feat: initial commit
This commit is contained in:
30
internal/config/auth.go
Normal file
30
internal/config/auth.go
Normal file
@ -0,0 +1,30 @@
|
||||
package config
|
||||
|
||||
type Auth struct {
|
||||
DefaultAdmin DefaultAdmin `envPrefix:"DEFAULT_ADMIN_"`
|
||||
Providers AuthProviders `envPrefix:"PROVIDERS_"`
|
||||
}
|
||||
|
||||
type DefaultAdmin struct {
|
||||
Email string `env:"EMAIL,expand"`
|
||||
Provider string `env:"PROVIDER,expand"`
|
||||
}
|
||||
|
||||
type AuthProviders struct {
|
||||
Google OAuth2Provider `envPrefix:"GOOGLE_"`
|
||||
Github OAuth2Provider `envPrefix:"GITHUB_"`
|
||||
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"`
|
||||
}
|
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_"`
|
||||
Storage Storage `envPrefix:"STORAGE_"`
|
||||
LLM LLM `envPrefix:"LLM_"`
|
||||
}
|
||||
|
||||
func Parse() (*Config, error) {
|
||||
conf, err := env.ParseAsWithOptions[Config](env.Options{
|
||||
Prefix: "CLEARCASE_",
|
||||
})
|
||||
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:3000"`
|
||||
Address string `env:"ADDRESS,expand" envDefault:":3000"`
|
||||
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"`
|
||||
}
|
19
internal/config/storage.go
Normal file
19
internal/config/storage.go
Normal file
@ -0,0 +1,19 @@
|
||||
package config
|
||||
|
||||
type Storage struct {
|
||||
Database Database `envPrefix:"DATABASE_"`
|
||||
Object Object `envPrefix:"OBJECT_"`
|
||||
}
|
||||
|
||||
type Database struct {
|
||||
DSN string `env:"DSN" envDefault:"sqlite://data.sqlite"`
|
||||
}
|
||||
|
||||
type Object struct {
|
||||
DSN string `env:"DSN" envDefault:"sqlite://data.sqlite"`
|
||||
Encryption Encryption `envPrefix:"ENCRYPTION_"`
|
||||
}
|
||||
|
||||
type Encryption struct {
|
||||
Key string `env:"KEY,unset"`
|
||||
}
|
Reference in New Issue
Block a user