config.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package config
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "strings"
  6. yaml "gopkg.in/yaml.v2"
  7. )
  8. const (
  9. LOG_LEVEL_OFF = iota
  10. LOG_LEVEL_INFO
  11. LOG_LEVEL_DEBUG
  12. )
  13. type ConfigT struct {
  14. // Domain
  15. Url string
  16. Domain string
  17. // Logging
  18. LogLevel int `yaml:"log_level"`
  19. // Secret keys
  20. Keys struct {
  21. CookieStoreKey string `yaml:"cookie_store_key"`
  22. JWTSigningKey string `yaml:"jwt_signing_key"`
  23. }
  24. // Admin credentials
  25. Admin struct {
  26. Username string
  27. Password string
  28. }
  29. // Database
  30. Orm struct {
  31. Connection string
  32. Options string
  33. Reset bool
  34. AutoMigrate bool
  35. Regenerate bool
  36. }
  37. Ldap struct {
  38. Host string
  39. AdminCN string `yaml:"admin_cn"`
  40. AdminPassword string `yaml:"admin_password"`
  41. TeachersDN string `yaml:"teachers_dn"`
  42. PeopleDN string `yaml:"people_dn"`
  43. GroupsDN string `yaml:"groups_dn"`
  44. MailGIDNumber string `yaml:"mail_gid_number"`
  45. FirstUIDNumber string `yaml:"first_uid_number"`
  46. MailDirBasePath string `yaml:"maildir_base_path"`
  47. MailQuota string `yaml:"mail_quota"`
  48. }
  49. Cloud struct {
  50. Url string
  51. Username string
  52. Password string
  53. }
  54. Smtp struct {
  55. Host string
  56. Port int
  57. Username string
  58. Password string
  59. From string
  60. Cc string
  61. }
  62. Sync struct {
  63. Schedule string
  64. SendMail bool `yaml:"send_mail"`
  65. SafeRun bool `yaml:"safe_run"`
  66. Verbose bool
  67. TeachersSearchBase string `yaml:"teachers_search_base"`
  68. AdministrativesSearchBase string `yaml:"administratives_search_base"`
  69. TeachersGroup string `yaml:"teachers_group"`
  70. AdministrativesGroup string `yaml:"administratives_group"`
  71. TeachersML string `yaml:"teachers_ml"`
  72. DepartmentsCoordinatorsGroup string `yaml:"departments_coordinators_group"`
  73. DepartmentsCoordinatorsML string `yaml:"departments_coordinators_ml"`
  74. ClassCoordinatorsGroup string `yaml:"class_coordinators_group"`
  75. ClassCoordinatorsML string `yaml:"class_coordinators_ml"`
  76. }
  77. Documents struct {
  78. OutputPath string `yaml:"output_path"`
  79. }
  80. }
  81. var (
  82. Config *ConfigT
  83. )
  84. func init() {
  85. Config = new(ConfigT)
  86. }
  87. // ReadFile reads the config file placed at the given path.
  88. func ReadFile(path string, config *ConfigT) error {
  89. cf, err := ioutil.ReadFile(path)
  90. if err != nil {
  91. return err
  92. }
  93. if err := yaml.Unmarshal(cf, config); err != nil {
  94. return err
  95. }
  96. return nil
  97. }
  98. // Read reads the config data from the given slice.
  99. func Read(data []byte, config *ConfigT) error {
  100. if err := yaml.Unmarshal(data, config); err != nil {
  101. return err
  102. }
  103. return nil
  104. }
  105. func (conf *ConfigT) DomainDN() (out string) {
  106. for _, dc := range strings.Split(conf.Domain, ".") {
  107. out += "dc=" + dc + ","
  108. }
  109. return strings.TrimRight(out, ",")
  110. }
  111. func (conf *ConfigT) AdminCN() string {
  112. return fmt.Sprintf("cn=%s,%s", conf.Ldap.AdminCN, conf.DomainDN())
  113. }