/
config.go
184 lines (142 loc) · 4.45 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
package helper
import (
"fmt"
"strconv"
"time"
"os"
"io/ioutil"
"github.com/astaxie/beego"
)
//获取配置
//@param cate 配置分类
//@param key 键
//@param def default,即默认值
//@return val 值
func GetConfig(cate string, key string, def ...string) string {
if val, ok := ConfigMap.Load(fmt.Sprintf("%v.%v", cate, key)); ok {
return val.(string)
}
if len(def) > 0 {
return def[0]
}
return ""
}
//获取配置
//@param cate 配置分类
//@param key 键
//@return val 值
func GetConfigBool(cate string, key string) (val bool) {
value := GetConfig(cate, key)
if value == "true" || value == "1" {
val = true
}
return
}
//获取配置
//@param cate 配置分类
//@param key 键
//@return val 值
func GetConfigInt64(cate string, key string) (val int64) {
val, _ = strconv.ParseInt(GetConfig(cate, key), 10, 64)
return
}
//获取配置
//@param cate 配置分类
//@param key 键
//@return val 值
func GetConfigFloat64(cate string, key string) (val float64) {
val, _ = strconv.ParseFloat(GetConfig(cate, key), 64)
return
}
//设置基本配置
func setDefaultConfig() {
//在程序未安装之前才能设置
if !IsInstalled {
beego.BConfig.AppName = "DocHub" //默认程序名称
beego.BConfig.Listen.HTTPPort = 8090 //默认监听端口
//程序安装的时候为开发模式,安装完成之后变为产品模式
beego.BConfig.RunMode = "dev" //默认运行模式
beego.BConfig.EnableGzip = true //开启gzip压缩
//程序安装的时候不启用,安装完成之后必须启用
beego.BConfig.WebConfig.EnableXSRF = false //启用XSRF
beego.BConfig.WebConfig.XSRFKey = MyMD5(fmt.Sprintf("%v", time.Now().UnixNano()) + RandStr(5, 3)) //生成随机key
beego.BConfig.WebConfig.XSRFExpire = 3600 //过期时间
//SESSION基本配置
beego.BConfig.WebConfig.Session.SessionOn = true
beego.BConfig.WebConfig.Session.SessionName = "DocHub"
beego.BConfig.WebConfig.Session.SessionProvider = "file"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "cache/session"
//DIY配置
ConfigMap.Store("CookieSecret", RandStr(16, 3))
ConfigMap.Store("StaticExt", DEFAULT_STATIC_EXT)
}
}
//生成app.conf配置文件
func GenerateAppConf(host string, port int, username, password, database, prefix string) (err error) {
if !IsInstalled { //程序未安装状态才能生成app.conf文件
os.Mkdir("conf", os.ModePerm)
fileContent := `
# 项目名称
appname = DocHub
# 运行端口
httpport = 8090
# 运行模式:prod, dev【正式站点,务必设置为prod】
runmode = prod
# 开启GZip[建议开启]
EnableGzip=true
# 必须启用XSRF
enablexsrf = true
xsrfkey = %v
xsrfexpire = %v
# cookie的加密密钥
CookieSecret=%v
# 静态文件扩展名【注意:不要把.conf设置为扩展名,以避免泄露数据库账号密码】
StaticExt=%v
############ SESSION #############
# 必须启用session,否则无法登录
sessionon = true
# 使用文件的形式存储session
SessionProvider=file
#Session存放位置
SessionProviderConfig=cache/session
# session的名称
SessionName=dochub
############ SESSION #############
############ 数据库配置 start ############
#数据库配置
[db]
# 数据库host(之前分内网host和外网host,当初只是为了开发方便。但是后来发现,用户在使用的时候会感觉很不方便,所以移除了内网和外网的区分)
host=%v
#数据库端口
port=%v
# 数据库用户名
user=%v
# 数据库密码
password=%v
# 使用的数据库的名称
database=%v
# 表前缀
prefix=%v
# 字符串类型【不要修改,整个程序都是utf-8的】。
charset=utf8
#设置最大空闲连接
maxIdle= 50
#设置最大数据库连接
maxConn= 300
############ 数据库配置 end ############
`
cs, _ := ConfigMap.Load("CookieSecret")
se, _ := ConfigMap.Load("StaticExt")
//配置项配置
fileContent = fmt.Sprintf(
fileContent,
beego.BConfig.WebConfig.XSRFKey,
beego.BConfig.WebConfig.XSRFExpire,
cs,
se,
host, port, username, password, database, prefix,
)
err = ioutil.WriteFile("conf/app.conf", []byte(fileContent), os.ModePerm)
}
return
}