mirror of
https://github.com/hay-kot/homebox.git
synced 2024-12-04 14:35:41 +00:00
fix blocking error during startup when in demo mode (#838)
This commit is contained in:
parent
af9aa239af
commit
f621d3ad5d
5 changed files with 37 additions and 12 deletions
|
@ -1,6 +1,7 @@
|
||||||
version: "3"
|
version: "3"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
|
HBOX_LOG_LEVEL: debug
|
||||||
HBOX_STORAGE_SQLITE_URL: .data/homebox.db?_pragma=busy_timeout=1000&_pragma=journal_mode=WAL&_fk=1
|
HBOX_STORAGE_SQLITE_URL: .data/homebox.db?_pragma=busy_timeout=1000&_pragma=journal_mode=WAL&_fk=1
|
||||||
HBOX_OPTIONS_ALLOW_REGISTRATION: true
|
HBOX_OPTIONS_ALLOW_REGISTRATION: true
|
||||||
UNSAFE_DISABLE_PASSWORD_PROJECTION: "yes_i_am_sure"
|
UNSAFE_DISABLE_PASSWORD_PROJECTION: "yes_i_am_sure"
|
||||||
|
|
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hay-kot/homebox/backend/internal/core/services"
|
"github.com/hay-kot/homebox/backend/internal/core/services"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
@ -18,6 +19,9 @@ func (a *app) SetupDemo() {
|
||||||
,Kitchen,IOT;Home Assistant; Z-Wave,1,Smart Rocker Light Dimmer,"UltraPro Z-Wave Smart Rocker Light Dimmer with QuickFit and SimpleWire, 3-Way Ready, Compatible with Alexa, Google Assistant, ZWave Hub Required, Repeater/Range Extender, White Paddle Only, 39351",,,39351,Honeywell,,Amazon,65.98,09/30/0202,,,,,,,
|
,Kitchen,IOT;Home Assistant; Z-Wave,1,Smart Rocker Light Dimmer,"UltraPro Z-Wave Smart Rocker Light Dimmer with QuickFit and SimpleWire, 3-Way Ready, Compatible with Alexa, Google Assistant, ZWave Hub Required, Repeater/Range Extender, White Paddle Only, 39351",,,39351,Honeywell,,Amazon,65.98,09/30/0202,,,,,,,
|
||||||
`
|
`
|
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
registration := services.UserRegistration{
|
registration := services.UserRegistration{
|
||||||
Email: "demo@example.com",
|
Email: "demo@example.com",
|
||||||
Name: "Demo",
|
Name: "Demo",
|
||||||
|
@ -25,21 +29,34 @@ func (a *app) SetupDemo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// First check if we've already setup a demo user and skip if so
|
// First check if we've already setup a demo user and skip if so
|
||||||
_, err := a.services.User.Login(context.Background(), registration.Email, registration.Password, false)
|
log.Debug().Msg("Checking if demo user already exists")
|
||||||
|
_, err := a.services.User.Login(ctx, registration.Email, registration.Password, false)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
log.Info().Msg("Demo user already exists, skipping setup")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = a.services.User.RegisterUser(context.Background(), registration)
|
log.Debug().Msg("Demo user does not exist, setting up demo")
|
||||||
|
_, err = a.services.User.RegisterUser(ctx, registration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("Failed to register demo user")
|
log.Err(err).Msg("Failed to register demo user")
|
||||||
log.Fatal().Msg("Failed to setup demo")
|
log.Fatal().Msg("Failed to setup demo")
|
||||||
}
|
}
|
||||||
|
|
||||||
token, _ := a.services.User.Login(context.Background(), registration.Email, registration.Password, false)
|
token, err := a.services.User.Login(ctx, registration.Email, registration.Password, false)
|
||||||
self, _ := a.services.User.GetSelf(context.Background(), token.Raw)
|
if err != nil {
|
||||||
|
log.Err(err).Msg("Failed to login demo user")
|
||||||
|
log.Fatal().Msg("Failed to setup demo")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self, err := a.services.User.GetSelf(ctx, token.Raw)
|
||||||
|
if err != nil {
|
||||||
|
log.Err(err).Msg("Failed to get self")
|
||||||
|
log.Fatal().Msg("Failed to setup demo")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
_, err = a.services.Items.CsvImport(context.Background(), self.GroupID, strings.NewReader(csvText))
|
_, err = a.services.Items.CsvImport(ctx, self.GroupID, strings.NewReader(csvText))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("Failed to import CSV")
|
log.Err(err).Msg("Failed to import CSV")
|
||||||
log.Fatal().Msg("Failed to setup demo")
|
log.Fatal().Msg("Failed to setup demo")
|
||||||
|
|
|
@ -207,6 +207,15 @@ func run(cfg *config.Config) error {
|
||||||
|
|
||||||
runner.AddFunc("eventbus", app.bus.Run)
|
runner.AddFunc("eventbus", app.bus.Run)
|
||||||
|
|
||||||
|
runner.AddFunc("seed_database", func(ctx context.Context) error {
|
||||||
|
// TODO: Remove through external API that does setup
|
||||||
|
if cfg.Demo {
|
||||||
|
log.Info().Msg("Running in demo mode, creating demo data")
|
||||||
|
app.SetupDemo()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
runner.AddPlugin(NewTask("purge-tokens", time.Duration(24)*time.Hour, func(ctx context.Context) {
|
runner.AddPlugin(NewTask("purge-tokens", time.Duration(24)*time.Hour, func(ctx context.Context) {
|
||||||
_, err := app.repos.AuthTokens.PurgeExpiredTokens(ctx)
|
_, err := app.repos.AuthTokens.PurgeExpiredTokens(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -239,12 +248,6 @@ func run(cfg *config.Config) error {
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
// TODO: Remove through external API that does setup
|
|
||||||
if cfg.Demo {
|
|
||||||
log.Info().Msg("Running in demo mode, creating demo data")
|
|
||||||
app.SetupDemo()
|
|
||||||
}
|
|
||||||
|
|
||||||
if cfg.Debug.Enabled {
|
if cfg.Debug.Enabled {
|
||||||
runner.AddFunc("debug", func(ctx context.Context) error {
|
runner.AddFunc("debug", func(ctx context.Context) error {
|
||||||
debugserver := http.Server{
|
debugserver := http.Server{
|
||||||
|
|
|
@ -35,7 +35,7 @@ type EventBus struct {
|
||||||
|
|
||||||
func New() *EventBus {
|
func New() *EventBus {
|
||||||
return &EventBus{
|
return &EventBus{
|
||||||
ch: make(chan eventData, 10),
|
ch: make(chan eventData, 100),
|
||||||
subscribers: map[Event][]func(any){
|
subscribers: map[Event][]func(any){
|
||||||
EventLabelMutation: {},
|
EventLabelMutation: {},
|
||||||
EventLocationMutation: {},
|
EventLocationMutation: {},
|
||||||
|
|
|
@ -92,9 +92,11 @@ func (svc *UserService) RegisterUser(ctx context.Context, data UserRegistration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return repo.UserOut{}, err
|
return repo.UserOut{}, err
|
||||||
}
|
}
|
||||||
|
log.Debug().Msg("user created")
|
||||||
|
|
||||||
// Create the default labels and locations for the group.
|
// Create the default labels and locations for the group.
|
||||||
if creatingGroup {
|
if creatingGroup {
|
||||||
|
log.Debug().Msg("creating default labels")
|
||||||
for _, label := range defaultLabels() {
|
for _, label := range defaultLabels() {
|
||||||
_, err := svc.repos.Labels.Create(ctx, usr.GroupID, label)
|
_, err := svc.repos.Labels.Create(ctx, usr.GroupID, label)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -102,6 +104,7 @@ func (svc *UserService) RegisterUser(ctx context.Context, data UserRegistration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debug().Msg("creating default locations")
|
||||||
for _, location := range defaultLocations() {
|
for _, location := range defaultLocations() {
|
||||||
_, err := svc.repos.Locations.Create(ctx, usr.GroupID, location)
|
_, err := svc.repos.Locations.Create(ctx, usr.GroupID, location)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -112,6 +115,7 @@ func (svc *UserService) RegisterUser(ctx context.Context, data UserRegistration)
|
||||||
|
|
||||||
// Decrement the invitation token if it was used.
|
// Decrement the invitation token if it was used.
|
||||||
if token.ID != uuid.Nil {
|
if token.ID != uuid.Nil {
|
||||||
|
log.Debug().Msg("decrementing invitation token")
|
||||||
err = svc.repos.Groups.InvitationUpdate(ctx, token.ID, token.Uses-1)
|
err = svc.repos.Groups.InvitationUpdate(ctx, token.ID, token.Uses-1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("Failed to update invitation token")
|
log.Err(err).Msg("Failed to update invitation token")
|
||||||
|
|
Loading…
Reference in a new issue