oef/config/config.go
2019-11-04 15:00:46 +01:00

144 lines
2.6 KiB
Go

package config
import (
"fmt"
"io/ioutil"
"strings"
yaml "gopkg.in/yaml.v2"
)
const (
LOG_LEVEL_OFF = iota
LOG_LEVEL_INFO
LOG_LEVEL_DEBUG
)
type ConfigT struct {
// Domain
Url string
Domain string
// Logging
LogLevel int `yaml:"log_level"`
// Secret keys
Keys struct {
CookieStoreKey string `yaml:"cookie_store_key"`
JWTSigningKey string `yaml:"jwt_signing_key"`
}
// Admin credentials
Admin struct {
Username string
Password string
}
// Database
Orm struct {
Connection string
Options string
Reset bool
AutoMigrate bool
Regenerate bool
}
Ldap struct {
Host string
AdminCN string `yaml:"admin_cn"`
AdminPassword string `yaml:"admin_password"`
TeachersDN string `yaml:"teachers_dn"`
PeopleDN string `yaml:"people_dn"`
GroupsDN string `yaml:"groups_dn"`
MailGIDNumber string `yaml:"mail_gid_number"`
FirstUIDNumber string `yaml:"first_uid_number"`
MailDirBasePath string `yaml:"maildir_base_path"`
MailQuota string `yaml:"mail_quota"`
}
Cloud struct {
Url string
Username string
Password string
}
Smtp struct {
Host string
Port int
Username string
Password string
From string
Cc string
}
Sync struct {
Schedule string
SendMail bool `yaml:"send_mail"`
SafeRun bool `yaml:"safe_run"`
Verbose bool
TeachersSearchBase string `yaml:"teachers_search_base"`
AdministrativesSearchBase string `yaml:"administratives_search_base"`
TeachersGroup string `yaml:"teachers_group"`
AdministrativesGroup string `yaml:"administratives_group"`
TeachersML string `yaml:"teachers_ml"`
DepartmentsCoordinatorsGroup string `yaml:"departments_coordinators_group"`
DepartmentsCoordinatorsML string `yaml:"departments_coordinators_ml"`
}
Documents struct {
OutputPath string `yaml:"output_path"`
}
}
var (
Config *ConfigT
)
func init() {
Config = new(ConfigT)
}
// ReadFile reads the config file placed at the given path.
func ReadFile(path string, config *ConfigT) error {
cf, err := ioutil.ReadFile(path)
if err != nil {
return err
}
if err := yaml.Unmarshal(cf, config); err != nil {
return err
}
return nil
}
// Read reads the config data from the given slice.
func Read(data []byte, config *ConfigT) error {
if err := yaml.Unmarshal(data, config); err != nil {
return err
}
return nil
}
func (conf *ConfigT) DomainDN() (out string) {
for _, dc := range strings.Split(conf.Domain, ".") {
out += "dc=" + dc + ","
}
return strings.TrimRight(out, ",")
}
func (conf *ConfigT) AdminCN() string {
return fmt.Sprintf("cn=%s,%s", conf.Ldap.AdminCN, conf.DomainDN())
}