2022-07-21 22:43:42 +02:00
package controller
2022-08-09 17:34:00 +02:00
import (
2023-01-18 20:05:10 +01:00
"time"
2022-08-09 17:34:00 +02:00
"github.com/michaelquigley/cf"
2023-01-13 21:01:34 +01:00
"github.com/openziti/zrok/controller/store"
2022-08-09 17:34:00 +02:00
"github.com/pkg/errors"
)
2022-07-22 19:53:39 +02:00
2023-01-23 22:52:13 +01:00
const ConfigVersion = 2
2022-12-01 19:40:57 +01:00
2022-07-21 22:43:42 +02:00
type Config struct {
2023-01-20 18:08:40 +01:00
V int
Admin * AdminConfig
Endpoint * EndpointConfig
Email * EmailConfig
Influx * InfluxConfig
Limits * LimitsConfig
Maintenance * MaintenanceConfig
Metrics * MetricsConfig
Registration * RegistrationConfig
2023-01-23 22:52:13 +01:00
ResetPassword * ResetPasswordConfig
2023-01-20 18:08:40 +01:00
Store * store . Config
Ziti * ZitiConfig
2023-01-18 20:05:10 +01:00
}
2022-12-01 20:48:23 +01:00
type AdminConfig struct {
Secrets [ ] string ` cf:"+secret" `
2023-01-31 19:44:03 +01:00
TouLink string
2022-12-01 20:48:23 +01:00
}
2022-08-09 17:18:24 +02:00
type EndpointConfig struct {
Host string
Port int
}
2022-09-09 16:23:14 +02:00
type EmailConfig struct {
Host string
2022-09-12 21:28:59 +02:00
Port int
2022-09-09 16:23:14 +02:00
Username string
2022-10-31 20:56:59 +01:00
Password string ` cf:"+secret" `
2023-01-23 22:52:13 +01:00
From string
2022-09-09 16:23:14 +02:00
}
2022-09-09 19:23:30 +02:00
type RegistrationConfig struct {
2022-09-12 20:35:11 +02:00
RegistrationUrlTemplate string
2023-01-09 18:00:37 +01:00
TokenStrategy string
2022-09-09 19:23:30 +02:00
}
2023-01-20 18:08:40 +01:00
type ResetPasswordConfig struct {
ResetUrlTemplate string
}
2022-08-12 17:03:15 +02:00
type ZitiConfig struct {
ApiEndpoint string
Username string
2022-10-31 20:56:59 +01:00
Password string ` cf:"+secret" `
2022-08-12 17:03:15 +02:00
}
2022-10-19 19:20:47 +02:00
type MetricsConfig struct {
ServiceName string
}
type InfluxConfig struct {
Url string
Bucket string
Org string
2022-10-31 20:56:59 +01:00
Token string ` cf:"+secret" `
2022-10-19 19:20:47 +02:00
}
2023-01-12 17:04:56 +01:00
type MaintenanceConfig struct {
2023-01-20 18:08:40 +01:00
ResetPassword * ResetPasswordMaintenanceConfig
Registration * RegistrationMaintenanceConfig
2023-01-12 17:04:56 +01:00
}
type RegistrationMaintenanceConfig struct {
ExpirationTimeout time . Duration
CheckFrequency time . Duration
2023-01-12 21:09:04 +01:00
BatchLimit int
2023-01-12 17:04:56 +01:00
}
2023-01-20 18:08:40 +01:00
type ResetPasswordMaintenanceConfig struct {
2023-01-20 17:00:46 +01:00
ExpirationTimeout time . Duration
CheckFrequency time . Duration
BatchLimit int
}
2023-01-13 15:42:42 +01:00
const Unlimited = - 1
type LimitsConfig struct {
Environments int
Shares int
}
2023-01-12 21:09:04 +01:00
func DefaultConfig ( ) * Config {
return & Config {
2023-01-13 15:42:42 +01:00
Limits : & LimitsConfig {
Environments : Unlimited ,
Shares : Unlimited ,
} ,
Metrics : & MetricsConfig {
ServiceName : "metrics" ,
} ,
2023-01-12 21:09:04 +01:00
Maintenance : & MaintenanceConfig {
2023-01-20 18:08:40 +01:00
ResetPassword : & ResetPasswordMaintenanceConfig {
2023-01-20 17:00:46 +01:00
ExpirationTimeout : time . Minute * 15 ,
CheckFrequency : time . Minute * 15 ,
BatchLimit : 500 ,
} ,
2023-01-12 21:09:04 +01:00
Registration : & RegistrationMaintenanceConfig {
2023-01-12 22:00:09 +01:00
ExpirationTimeout : time . Hour * 24 ,
2023-01-12 21:09:04 +01:00
CheckFrequency : time . Hour ,
BatchLimit : 500 ,
} ,
} ,
}
}
2023-01-12 21:12:48 +01:00
func LoadConfig ( path string ) ( * Config , error ) {
cfg := DefaultConfig ( )
2022-08-09 17:34:00 +02:00
if err := cf . BindYaml ( cfg , path , cf . DefaultOptions ( ) ) ; err != nil {
return nil , errors . Wrapf ( err , "error loading controller config '%v'" , path )
}
2022-12-01 19:40:57 +01:00
if cfg . V != ConfigVersion {
return nil , errors . Errorf ( "expecting configuration version '%v', your configuration is version '%v'; please see zrok.io for changelog and configuration documentation" , ConfigVersion , cfg . V )
}
2022-08-09 17:34:00 +02:00
return cfg , nil
}