master
go 79 lines 1.41 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package mysql
4
5 import (
6 "fmt"
7 "os"
8
9 "gopkg.in/ini.v1"
10 )
11
12 func dsnFromFile(filename string) (string, error) {
13 f, err := ini.Load(filename)
14 if err != nil {
15 return "", err
16 }
17
18 section, err := f.GetSection("client")
19 if err != nil {
20 return "", err
21 }
22
23 defaultUser := getUser()
24 defaultHost := "localhost"
25 defaultPort := "3306"
26
27 user := section.Key("user").String()
28 password := section.Key("password").String()
29 socket := section.Key("socket").String()
30 host := section.Key("host").String()
31 port := section.Key("port").String()
32 database := section.Key("database").String()
33
34 var dsn string
35
36 if user != "" {
37 dsn = user
38 } else {
39 dsn = defaultUser
40 }
41
42 if password != "" {
43 dsn += ":" + password
44 }
45
46 switch {
47 case socket != "":
48 dsn += fmt.Sprintf("@unix(%s)/", socket)
49 case host != "" && port != "":
50 dsn += fmt.Sprintf("@tcp(%s:%s)/", host, port)
51 case host != "":
52 dsn += fmt.Sprintf("@tcp(%s:%s)/", host, defaultPort)
53 case port != "":
54 dsn += fmt.Sprintf("@tcp(%s:%s)/", defaultHost, port)
55 default:
56 dsn += "@/"
57 }
58
59 if database != "" {
60 dsn += database
61 }
62 return dsn, nil
63 }
64
65 func getUser() (user string) {
66 if user = os.Getenv("LOGNAME"); user != "" {
67 return user
68 }
69 if user = os.Getenv("USER"); user != "" {
70 return user
71 }
72 if user = os.Getenv("LNAME"); user != "" {
73 return user
74 }
75 if user = os.Getenv("USERNAME"); user != "" {
76 return user
77 }
78 return ""
79 }