init from gitlab
This commit is contained in:
72
internal/server/setup.go
Normal file
72
internal/server/setup.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gitlab.com/texm/shokku/internal/env"
|
||||
"gitlab.com/texm/shokku/internal/models"
|
||||
"gitlab.com/texm/shokku/internal/server/auth"
|
||||
"gitlab.com/texm/shokku/internal/server/github"
|
||||
"time"
|
||||
)
|
||||
|
||||
func maybeSyncState(e *env.Env, state *models.Server) error {
|
||||
if state.AuthMethod == auth.MethodGithub {
|
||||
timeSinceLast := time.Since(state.LastSync)
|
||||
needsSync := timeSinceLast > 6*time.Hour
|
||||
if !needsSync {
|
||||
return nil
|
||||
}
|
||||
if err := github.SyncUsersToDB(e); err != nil {
|
||||
return fmt.Errorf("failed to sync github state: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
state.LastSync = time.Now()
|
||||
if err := e.DB.Save(state).Error; err != nil {
|
||||
return fmt.Errorf("failed to update last sync time")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initServerState(e *env.Env) (*models.Server, error) {
|
||||
var state models.Server
|
||||
if err := e.DB.FirstOrCreate(&state).Error; err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Msg("failed to get state")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debug().
|
||||
Bool("is_setup", state.IsSetup).
|
||||
Str("auth_method", string(state.AuthMethod)).
|
||||
Time("last_sync", state.LastSync).
|
||||
Msg("server setup state")
|
||||
|
||||
e.SetupCompleted = state.IsSetup
|
||||
|
||||
if state.IsSetup {
|
||||
if syncErr := maybeSyncState(e, &state); syncErr != nil {
|
||||
return nil, syncErr
|
||||
}
|
||||
return &state, nil
|
||||
}
|
||||
|
||||
if state.SetupKey == "" {
|
||||
state.SetupKey = generateRandomString(16)
|
||||
if err := e.DB.Save(&state).Error; err != nil {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Msg("failed to update setup key")
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
log.Info().
|
||||
Str("setup_key", state.SetupKey).
|
||||
Msg("running in setup mode")
|
||||
|
||||
return &state, nil
|
||||
}
|
||||
Reference in New Issue
Block a user