mirror of
https://github.com/SigNoz/signoz.git
synced 2026-03-10 07:22:09 +00:00
Some checks failed
build-staging / prepare (push) Has been cancelled
build-staging / js-build (push) Has been cancelled
build-staging / go-build (push) Has been cancelled
build-staging / staging (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
* feat: add org id support in root user config * chore: address review comments * fix: use zero value uuid for org id in example.conf
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package user
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/SigNoz/signoz/pkg/errors"
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/types"
|
|
"github.com/SigNoz/signoz/pkg/valuer"
|
|
)
|
|
|
|
type Config struct {
|
|
Password PasswordConfig `mapstructure:"password"`
|
|
Root RootConfig `mapstructure:"root"`
|
|
}
|
|
|
|
type RootConfig struct {
|
|
Enabled bool `mapstructure:"enabled"`
|
|
Email valuer.Email `mapstructure:"email"`
|
|
Password string `mapstructure:"password"`
|
|
Org OrgConfig `mapstructure:"org"`
|
|
}
|
|
|
|
type OrgConfig struct {
|
|
ID valuer.UUID `mapstructure:"id"`
|
|
Name string `mapstructure:"name"`
|
|
}
|
|
|
|
type PasswordConfig struct {
|
|
Reset ResetConfig `mapstructure:"reset"`
|
|
}
|
|
|
|
type ResetConfig struct {
|
|
AllowSelf bool `mapstructure:"allow_self"`
|
|
MaxTokenLifetime time.Duration `mapstructure:"max_token_lifetime"`
|
|
}
|
|
|
|
func NewConfigFactory() factory.ConfigFactory {
|
|
return factory.NewConfigFactory(factory.MustNewName("user"), newConfig)
|
|
}
|
|
|
|
func newConfig() factory.Config {
|
|
return &Config{
|
|
Password: PasswordConfig{
|
|
Reset: ResetConfig{
|
|
AllowSelf: false,
|
|
MaxTokenLifetime: 6 * time.Hour,
|
|
},
|
|
},
|
|
Root: RootConfig{
|
|
Enabled: false,
|
|
Org: OrgConfig{
|
|
Name: "default",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (c Config) Validate() error {
|
|
if c.Password.Reset.MaxTokenLifetime <= 0 {
|
|
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "user::password::reset::max_token_lifetime must be positive")
|
|
}
|
|
|
|
if c.Root.Enabled {
|
|
if c.Root.Email.IsZero() {
|
|
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "user::root::email is required when root user is enabled")
|
|
}
|
|
if c.Root.Password == "" {
|
|
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "user::root::password is required when root user is enabled")
|
|
}
|
|
if !types.IsPasswordValid(c.Root.Password) {
|
|
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, "user::root::password does not meet password requirements")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|