feat: initial commit
This commit is contained in:
33
internal/config/auth.go
Normal file
33
internal/config/auth.go
Normal file
@ -0,0 +1,33 @@
|
||||
package config
|
||||
|
||||
type Auth struct {
|
||||
Providers AuthProviders `envPrefix:"PROVIDERS_"`
|
||||
}
|
||||
|
||||
type AuthProviders struct {
|
||||
Google OAuth2Provider `envPrefix:"GOOGLE_"`
|
||||
Github OAuth2Provider `envPrefix:"GITHUB_"`
|
||||
Gitea GiteaProvider `envPrefix:"GITEA_"`
|
||||
OIDC OIDCProvider `envPrefix:"OIDC_"`
|
||||
}
|
||||
|
||||
type OAuth2Provider struct {
|
||||
Key string `env:"KEY,expand"`
|
||||
Secret string `env:"SECRET,expand"`
|
||||
Scopes []string `env:"SCOPES,expand"`
|
||||
}
|
||||
|
||||
type OIDCProvider struct {
|
||||
OAuth2Provider
|
||||
DiscoveryURL string `env:"DISCOVERY_URL,expand"`
|
||||
Icon string `env:"ICON,expand" envDefault:"fa-passport"`
|
||||
Label string `env:"LABEL,expand" envDefault:"OpenID Connect"`
|
||||
}
|
||||
|
||||
type GiteaProvider struct {
|
||||
OAuth2Provider
|
||||
TokenURL string `env:"TOKEN_URL,expand"`
|
||||
AuthURL string `env:"AUTH_URL,expand"`
|
||||
ProfileURL string `env:"PROFILE_URL,expand"`
|
||||
Label string `env:"LABEL,expand" envDefault:"Gitea"`
|
||||
}
|
25
internal/config/config.go
Normal file
25
internal/config/config.go
Normal file
@ -0,0 +1,25 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/caarlos0/env/v11"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Logger Logger `envPrefix:"LOGGER_"`
|
||||
Auth Auth `envPrefix:"AUTH_"`
|
||||
HTTP HTTP `envPrefix:"HTTP_"`
|
||||
LLM LLM `envPrefix:"LLM_"`
|
||||
Store Store `envPrefix:"STORE_"`
|
||||
}
|
||||
|
||||
func Parse() (*Config, error) {
|
||||
conf, err := env.ParseAsWithOptions[Config](env.Options{
|
||||
Prefix: "KOUIZ_",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
|
||||
return &conf, nil
|
||||
}
|
21
internal/config/http.go
Normal file
21
internal/config/http.go
Normal file
@ -0,0 +1,21 @@
|
||||
package config
|
||||
|
||||
import "time"
|
||||
|
||||
type HTTP struct {
|
||||
BaseURL string `env:"BASE_URL" envDefault:"http://localhost:3001"`
|
||||
Address string `env:"ADDRESS,expand" envDefault:":3001"`
|
||||
Session Session `envPrefix:"SESSION_"`
|
||||
}
|
||||
|
||||
type Session struct {
|
||||
Keys []string `env:"KEYS"`
|
||||
Cookie Cookie `envPrefix:"COOKIE_"`
|
||||
}
|
||||
|
||||
type Cookie struct {
|
||||
Path string `env:"PATH,expand" envDefault:"/"`
|
||||
HTTPOnly bool `env:"HTTP_ONLY,expand" envDefault:"true"`
|
||||
Secure bool `env:"SECURE,expand" envDefault:"false"`
|
||||
MaxAge time.Duration `env:"MAX_AGE,expand" envDefault:"24h"`
|
||||
}
|
12
internal/config/llm.go
Normal file
12
internal/config/llm.go
Normal file
@ -0,0 +1,12 @@
|
||||
package config
|
||||
|
||||
type LLM struct {
|
||||
Provider LLMProvider `envPrefix:"PROVIDER_"`
|
||||
}
|
||||
|
||||
type LLMProvider struct {
|
||||
Name string `env:"NAME" envDefault:"openai"`
|
||||
BaseURL string `env:"BASE_URL" envDefault:"https://api.openai.com/v1/"`
|
||||
Key string `env:"KEY"`
|
||||
Model string `env:"MODEL" envDefault:"gpt-4o-mini"`
|
||||
}
|
5
internal/config/logger.go
Normal file
5
internal/config/logger.go
Normal file
@ -0,0 +1,5 @@
|
||||
package config
|
||||
|
||||
type Logger struct {
|
||||
Level int `env:"LEVEL" envDefault:"0"`
|
||||
}
|
6
internal/config/store.go
Normal file
6
internal/config/store.go
Normal file
@ -0,0 +1,6 @@
|
||||
package config
|
||||
|
||||
type Store struct {
|
||||
Debug bool `env:"DEBUG" envDefault:"false"`
|
||||
DSN string `env:"DSN" envDefault:"data.sqlite"`
|
||||
}
|
Reference in New Issue
Block a user