feat: initial commit

This commit is contained in:
2025-02-21 18:42:56 +01:00
commit ee4a65b345
81 changed files with 3441 additions and 0 deletions

30
internal/config/auth.go Normal file
View 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
View 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
View 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
View 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"`
}

View File

@ -0,0 +1,5 @@
package config
type Logger struct {
Level int `env:"LEVEL" envDefault:"0"`
}

View 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"`
}