-
-
Notifications
You must be signed in to change notification settings - Fork 212
/
entries.go
137 lines (116 loc) · 3.99 KB
/
entries.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
package config
import (
"github.com/spf13/cast"
"github.com/spf13/viper"
)
// Global options
var LogsFolder = asString("logs", "logs")
var WebHost = asString("web.host", "0.0.0.0:8080")
// Panel options
var PanelEnabled = asBool("panel.enable", true)
var DatabaseSessionLength = asInt("panel.database.session", 60)
var DatabaseDialect = asString("panel.database.dialect", "sqlite3")
var DatabaseUrl = asString("panel.database.url", "")
var DatabaseLoggingEnabled = asBool("panel.database.log", false)
var WebRoot = asString("panel.web.files", "www")
var EmailTemplateJson = asString("panel.email.templates", "email/emails.json")
var EmailProvider = asString("panel.email.provider", "")
var EmailFrom = asString("panel.email.from", "")
var EmailDomain = asString("panel.email.domain", "")
var EmailHost = asString("panel.email.host", "")
var EmailKey = asString("panel.email.key", "")
var EmailUsername = asString("panel.email.username", "")
var EmailPassword = asString("panel.email.password", "")
var CompanyName = asString("panel.settings.companyName", "PufferPanel")
var DefaultTheme = asString("panel.settings.defaultTheme", "PufferPanel")
var ThemeSettings = asString("panel.settings.themeSettings", "{}")
var MasterUrl = asString("panel.settings.masterUrl", "http://localhost:8080")
var SessionKey = asString("panel.sessionKey", "")
var RegistrationEnabled = asBool("panel.registrationEnabled", true)
// Daemon options
var DaemonEnabled = asBool("daemon.enable", true)
var ConsoleBuffer = asInt("daemon.console.buffer", 50)
var ConsoleForward = asBool("daemon.console.forward", false)
var SftpHost = asString("daemon.sftp.host", "0.0.0.0:5657")
var SftpKey = asString("daemon.sftp.key", "sftp.key")
var AuthUrl = asString("daemon.auth.url", "http://localhost:8080")
var ClientId = asString("daemon.auth.clientId", "")
var ClientSecret = asString("daemon.auth.clientSecret", "")
var CacheFolder = asString("daemon.data.cache", "cache")
var ServersFolder = asString("daemon.data.servers", "servers")
var BinariesFolder = asString("daemon.data.binaries", "binaries")
var CrashLimit = asInt("daemon.data.crashLimit", 3)
var WebSocketFileLimit = asInt64("daemon.data.maxWSDownloadSize", 1024*1024*20)
// Deprecated: Removed in v3
var TokenPrivate = asString("token.private", "private.pem")
// Deprecated: Removed in v3
var TokenPublic = asString("token.public", "public.pem")
var SecurityForceOpenat2 = asBool("security.forceOpenat2", false)
var SecurityForceOpenat = asBool("security.forceOpenat", false)
type entry[T ValueType] struct {
key string
}
type StringEntry struct {
entry[string]
}
type BoolEntry struct {
entry[bool]
}
type IntEntry struct {
entry[int]
}
type Int64Entry struct {
entry[int64]
}
type ValueType interface {
int | int64 | bool | string
}
func (se StringEntry) Value() string {
return cast.ToString(se.get())
}
func (se BoolEntry) Value() bool {
return cast.ToBool(se.get())
}
func (se IntEntry) Value() int {
return cast.ToInt(se.get())
}
func (se Int64Entry) Value() int64 {
return cast.ToInt64(se.get())
}
func (se entry[T]) Key() string {
return se.key
}
func (se entry[T]) Set(value T, save bool) error {
viper.Set(se.Key(), value)
if save {
return viper.WriteConfig()
}
return nil
}
func asString(key string, def string) StringEntry {
return StringEntry{entry: as[string](key, def)}
}
func asBool(key string, def bool) BoolEntry {
return BoolEntry{entry: as[bool](key, def)}
}
func asInt(key string, def int) IntEntry {
return IntEntry{entry: as[int](key, def)}
}
func asInt64(key string, def int64) Int64Entry {
return Int64Entry{entry: as[int64](key, def)}
}
func as[T ValueType](key string, def T) entry[T] {
//We are not using viper for this, because it writes a giant config with the defaults,
//and we cannot do that to allow for changes in the future
//viper.SetDefault(key, def)
defaults[key] = def
return entry[T]{key: key}
}
func (se entry[T]) get() interface{} {
val := viper.Get(se.Key())
if val == nil {
val = defaults[se.Key()]
}
return val
}
var defaults = make(map[string]interface{})