chore: update
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
"github.com/omnex/control-plane/api/internal/downloads"
|
||||
"github.com/omnex/control-plane/api/internal/k8s"
|
||||
"github.com/omnex/control-plane/api/internal/profile"
|
||||
"github.com/omnex/control-plane/api/internal/projects"
|
||||
"github.com/omnex/control-plane/api/internal/router"
|
||||
"github.com/omnex/control-plane/api/internal/session"
|
||||
"github.com/omnex/control-plane/api/internal/sub"
|
||||
@@ -78,6 +79,7 @@ func main() {
|
||||
|
||||
var userStore auth.UserStore
|
||||
var demoStore demos.Store
|
||||
var projectStore projects.Store
|
||||
var demoPool demos.Pool
|
||||
var codeStore sub.Store
|
||||
var profileStore profile.Store
|
||||
@@ -96,19 +98,19 @@ func main() {
|
||||
if err := db.SeedExternalPool(gdb); err != nil {
|
||||
log.Fatalf("seed pool: %v", err)
|
||||
}
|
||||
users := auth.NewGormStore(gdb)
|
||||
seedAdmin(users)
|
||||
userStore = users
|
||||
userStore = auth.NewGormStore(gdb)
|
||||
codeStore = sub.NewGormStore(gdb)
|
||||
demoStore = demos.NewGormStore(gdb)
|
||||
projectStore = projects.NewGormStore(gdb)
|
||||
demoPool = demos.NewGormPool(gdb)
|
||||
profileStore = profile.NewGormStore(gdb)
|
||||
alertRecipients = alerts.GormRecipients(gdb)
|
||||
log.Printf("persistance: PostgreSQL (GORM)")
|
||||
} else {
|
||||
userStore = seedMemUsers()
|
||||
userStore = memUsers{}
|
||||
codeStore = sub.NewMemStore()
|
||||
demoStore = demos.NewMemStore()
|
||||
projectStore = projects.NewMemStore()
|
||||
demoPool = demos.NewMemPool()
|
||||
log.Printf("persistance: mémoire (dev — définir OMNEX_DATABASE_URL pour PostgreSQL)")
|
||||
}
|
||||
@@ -166,6 +168,15 @@ func main() {
|
||||
// de ce fichier : pas de contexte annulable, s'arrête avec le processus.
|
||||
go demoSvc.RunExpirationLoop(context.Background(), 5*time.Minute)
|
||||
|
||||
// Projets vitrine (abonnements de 1 à 12 mois) : même cluster, mêmes
|
||||
// sauvegardes Velero que les démos, mais suspension puis suppression après
|
||||
// un délai de grâce à l'échéance (voir internal/projects).
|
||||
projectSvc := projects.NewService(projectStore, helmProv, projects.Config{
|
||||
Domain: cfg.VitrineDomain,
|
||||
Grace: time.Duration(cfg.VitrineGraceDays) * 24 * time.Hour,
|
||||
})
|
||||
go projectSvc.RunExpirationLoop(context.Background(), 5*time.Minute)
|
||||
|
||||
// Alerting : surveille les pods des démos actives (état + seuils
|
||||
// CPU/mémoire/PVC), notifie Discord et/ou Telegram de chaque admin ayant
|
||||
// configuré son propre canal (voir profil admin, /profile/alerts).
|
||||
@@ -182,6 +193,17 @@ func main() {
|
||||
ns = append(ns, d.Namespace)
|
||||
}
|
||||
}
|
||||
// Projets vitrine en ligne (un projet suspendu n'a plus de pods :
|
||||
// l'alerte « pod absent » serait un faux positif).
|
||||
ps, err := projectSvc.List()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, p := range ps {
|
||||
if p.Status == projects.StatusReady {
|
||||
ns = append(ns, p.Namespace)
|
||||
}
|
||||
}
|
||||
return ns, nil
|
||||
})
|
||||
go watcher.Run(context.Background())
|
||||
@@ -196,6 +218,7 @@ func main() {
|
||||
Sessions: sessions,
|
||||
AuthH: auth.NewHandler(userStore, sessions, iss, cfg.Secure()),
|
||||
DemosH: demos.NewHandler(demoSvc, helmProv),
|
||||
ProjectsH: projects.NewHandler(projectSvc),
|
||||
SubH: sub.NewHandler(codeStore, demoSvc),
|
||||
ProfileH: profile.NewHandler(profileStore),
|
||||
DownloadsH: downloads.NewHandler(cfg.AppDownloadsDir, userStore, demoSvc),
|
||||
@@ -225,34 +248,3 @@ func main() {
|
||||
log.Printf("extinction forcée après délai: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// seedAdmin crée l'utilisateur admin de départ depuis l'env (idempotent).
|
||||
func seedAdmin(users *auth.GormStore) {
|
||||
username, pass := os.Getenv("OMNEX_SEED_USERNAME"), os.Getenv("OMNEX_SEED_PASSWORD")
|
||||
if username == "" || pass == "" {
|
||||
return
|
||||
}
|
||||
hash, err := auth.HashPassword(pass)
|
||||
if err != nil {
|
||||
log.Fatalf("seed: %v", err)
|
||||
}
|
||||
if err := users.EnsureUser(username, hash, auth.RoleAdmin); err != nil {
|
||||
log.Fatalf("seed: %v", err)
|
||||
}
|
||||
log.Printf("utilisateur admin seedé: %s", username)
|
||||
}
|
||||
|
||||
// seedMemUsers construit un store mémoire depuis l'env (dev uniquement).
|
||||
func seedMemUsers() memUsers {
|
||||
users := memUsers{}
|
||||
if username, pass := os.Getenv("OMNEX_SEED_USERNAME"), os.Getenv("OMNEX_SEED_PASSWORD"); username != "" && pass != "" {
|
||||
hash, err := auth.HashPassword(pass)
|
||||
if err != nil {
|
||||
log.Fatalf("seed: %v", err)
|
||||
}
|
||||
key := strings.ToLower(strings.TrimSpace(username))
|
||||
users[key] = auth.User{ID: "seed-admin", Username: key, PasswordHash: hash, Role: auth.RoleAdmin}
|
||||
log.Printf("utilisateur admin seedé (mémoire): %s", key)
|
||||
}
|
||||
return users
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user