MCPcopy
hub / github.com/gourouting/singo / DatabaseDSN

Function DatabaseDSN

conf/conf.go:34–81  ·  view source on GitHub ↗

DatabaseDSN builds a MySQL DSN from DB_* environment variables.

()

Source from the content-addressed store, hash-verified

32
33// DatabaseDSN builds a MySQL DSN from DB_* environment variables.
34func DatabaseDSN() (string, error) {
35 user := os.Getenv("DB_USER")
36 name := os.Getenv("DB_NAME")
37 missing := make([]string, 0, 2)
38 if user == "" {
39 missing = append(missing, "DB_USER")
40 }
41 if name == "" {
42 missing = append(missing, "DB_NAME")
43 }
44 if len(missing) > 0 {
45 return "", fmt.Errorf("missing required database config: %s", strings.Join(missing, ", "))
46 }
47 if err := validateDSNPart("DB_USER", user, ":"); err != nil {
48 return "", err
49 }
50 if err := validateDSNPart("DB_NAME", name, "/", "?"); err != nil {
51 return "", err
52 }
53
54 password := os.Getenv("DB_PASSWORD")
55 host := envDefault("DB_HOST", "127.0.0.1")
56 port := envDefault("DB_PORT", "3306")
57 charset := envDefault("DB_CHARSET", "utf8")
58 parseTime, err := strconv.ParseBool(envDefault("DB_PARSE_TIME", "True"))
59 if err != nil {
60 return "", fmt.Errorf("invalid DB_PARSE_TIME: %w", err)
61 }
62
63 loc, err := time.LoadLocation(envDefault("DB_LOC", "Local"))
64 if err != nil {
65 return "", fmt.Errorf("invalid DB_LOC: %w", err)
66 }
67
68 config := mysql.NewConfig()
69 config.User = user
70 config.Passwd = password
71 config.Net = "tcp"
72 config.Addr = fmt.Sprintf("%s:%s", host, port)
73 config.DBName = name
74 config.ParseTime = parseTime
75 config.Loc = loc
76 if err := config.Apply(mysql.Charset(charset, "")); err != nil {
77 return "", fmt.Errorf("invalid DB_CHARSET: %w", err)
78 }
79
80 return config.FormatDSN(), nil
81}
82
83// Init initializes configuration.
84func Init() error {

Calls 2

validateDSNPartFunction · 0.85
envDefaultFunction · 0.85