fix: remove global app variable

This commit is contained in:
Maxi Quoß
2024-12-31 12:11:29 +01:00
parent abe7b446be
commit 61980c62d7
2 changed files with 49 additions and 50 deletions

View File

@@ -17,12 +17,12 @@ import (
)
func HandlerWake(e *core.RequestEvent) error {
record, err := App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
record, err := e.App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
if err != nil {
return apis.NewNotFoundError("The device does not exist.", err)
}
record.Set("status", "pending")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
go func(r *core.Record) {
@@ -32,7 +32,7 @@ func HandlerWake(e *core.RequestEvent) error {
} else {
r.Set("status", "online")
}
if err := App.Save(r); err != nil {
if err := e.App.Save(r); err != nil {
logger.Error.Println("Failed to save record:", err)
}
}(record)
@@ -40,37 +40,37 @@ func HandlerWake(e *core.RequestEvent) error {
}
func HandlerSleep(e *core.RequestEvent) error {
record, err := App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
record, err := e.App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
if err != nil {
return apis.NewNotFoundError("The device does not exist.", err)
}
record.Set("status", "pending")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
resp, err := networking.SleepDevice(record)
if err != nil {
logger.Error.Println(err)
record.Set("status", "online")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
return apis.NewBadRequestError(resp.Message, nil)
}
record.Set("status", "offline")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
return e.JSON(http.StatusOK, nil)
}
func HandlerReboot(e *core.RequestEvent) error {
record, err := App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
record, err := e.App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
if err != nil {
return apis.NewNotFoundError("The device does not exist.", err)
}
record.Set("status", "pending")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
go func(r *core.Record) {
@@ -86,7 +86,7 @@ func HandlerReboot(e *core.RequestEvent) error {
r.Set("status", "online")
}
}
if err := App.Save(r); err != nil {
if err := e.App.Save(r); err != nil {
logger.Error.Println("Failed to save record:", err)
}
}(record)
@@ -94,12 +94,12 @@ func HandlerReboot(e *core.RequestEvent) error {
}
func HandlerShutdown(e *core.RequestEvent) error {
record, err := App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
record, err := e.App.FindFirstRecordByData("devices", "id", e.Request.PathValue("id"))
if err != nil {
return apis.NewNotFoundError("The device does not exist.", err)
}
record.Set("status", "pending")
if err := App.Save(record); err != nil {
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)
}
go func(r *core.Record) {
@@ -109,7 +109,7 @@ func HandlerShutdown(e *core.RequestEvent) error {
} else {
r.Set("status", "offline")
}
if err := App.Save(r); err != nil {
if err := e.App.Save(r); err != nil {
logger.Error.Println("Failed to save record:", err)
}
}(record)
@@ -134,7 +134,7 @@ func HandlerScan(e *core.RequestEvent) error {
}
// check if scan range is valid
allPrivateSettings, err := App.FindAllRecords("settings_private")
allPrivateSettings, err := e.App.FindAllRecords("settings_private")
if err != nil {
return err
}
@@ -249,7 +249,7 @@ func HandlerInitSuperuser(e *core.RequestEvent) error {
record := core.NewRecord(superusersCollection)
record.SetEmail(data.Email)
record.SetPassword(data.Password)
err = App.Save(record)
err = e.App.Save(record)
if err != nil {
return e.BadRequestError("Failed to create initial superuser", err)
}

View File

@@ -16,7 +16,6 @@ import (
_ "github.com/seriousm4x/upsnap/migrations"
)
var App *pocketbase.PocketBase
var Version = "(untracked)"
func StartPocketBase(distDirFS fs.FS) {
@@ -47,19 +46,19 @@ func StartPocketBase(distDirFS fs.FS) {
}
// create app
App = pocketbase.NewWithConfig(pocketbase.Config{
app := pocketbase.NewWithConfig(pocketbase.Config{
DefaultDataDir: dataDir,
})
App.RootCmd.Short = "UpSnap CLI"
App.RootCmd.Version = Version
app.RootCmd.Short = "UpSnap CLI"
app.RootCmd.Version = Version
// auto migrate db
migratecmd.MustRegister(App, App.RootCmd, migratecmd.Config{
migratecmd.MustRegister(app, app.RootCmd, migratecmd.Config{
Automigrate: true,
})
// event hooks
App.OnServe().BindFunc(func(se *core.ServeEvent) error {
app.OnServe().BindFunc(func(se *core.ServeEvent) error {
se.Router.GET("/{path...}", apis.Static(distDirFS, true))
se.Router.GET("/api/upsnap/wake/{id}", HandlerWake).Bind(RequireUpSnapPermission())
@@ -69,25 +68,25 @@ func StartPocketBase(distDirFS fs.FS) {
se.Router.GET("/api/upsnap/scan", HandlerScan).Bind(apis.RequireSuperuserAuth())
se.Router.POST("/api/upsnap/init-superuser", HandlerInitSuperuser) // https://github.com/pocketbase/pocketbase/discussions/6198
if err := importSettings(); err != nil {
if err := importSettings(app); err != nil {
return err
}
if err := resetDeviceStates(); err != nil {
if err := resetDeviceStates(app); err != nil {
return err
}
cronjobs.SetPingJobs(App)
cronjobs.SetPingJobs(app)
cronjobs.StartPing()
cronjobs.SetWakeShutdownJobs(App)
cronjobs.SetWakeShutdownJobs(app)
cronjobs.StartWakeShutdown()
// restart ping cronjobs or wake/shutdown cronjobs on model update
// add event hook before starting server.
// using this outside App.OnBeforeServe() would not work
App.OnModelAfterUpdateSuccess("settings_private", "devices").BindFunc(func(e *core.ModelEvent) error {
app.OnModelAfterUpdateSuccess("settings_private", "devices").BindFunc(func(e *core.ModelEvent) error {
if e.Model.TableName() == "settings_private" {
cronjobs.SetPingJobs(App)
cronjobs.SetPingJobs(app)
} else if e.Model.TableName() == "devices" {
// only restart wake/shutdown cronjobs if new model's cron changed
record := e.Model.(*core.Record)
@@ -114,7 +113,7 @@ func StartPocketBase(distDirFS fs.FS) {
newShutdownCron != oldShutdownCron ||
newShutdownCronEnabled != oldShutdownCronEnabled ||
newShutdownCmd != oldShutdownCmd {
cronjobs.SetWakeShutdownJobs(App)
cronjobs.SetWakeShutdownJobs(app)
}
}
return e.Next()
@@ -122,7 +121,7 @@ func StartPocketBase(distDirFS fs.FS) {
return se.Next()
})
App.OnModelAfterCreateSuccess().BindFunc(func(e *core.ModelEvent) error {
app.OnModelAfterCreateSuccess().BindFunc(func(e *core.ModelEvent) error {
if e.Model.TableName() == "_superusers" {
if err := setSetupCompleted(); err != nil {
logger.Error.Println(err)
@@ -135,7 +134,7 @@ func StartPocketBase(distDirFS fs.FS) {
userId := deviceRec.GetString("created_by")
var permissionRec *core.Record
permissionRec, err := App.FindFirstRecordByFilter("permissions",
permissionRec, err := app.FindFirstRecordByFilter("permissions",
fmt.Sprintf("user.id = '%s'", userId))
if err != nil && err.Error() != "sql: no rows in result set" {
logger.Error.Println(err)
@@ -145,7 +144,7 @@ func StartPocketBase(distDirFS fs.FS) {
permissionRec.Set("update", append(permissionRec.GetStringSlice("update"), deviceRec.Id))
permissionRec.Set("delete", append(permissionRec.GetStringSlice("delete"), deviceRec.Id))
permissionRec.Set("power", append(permissionRec.GetStringSlice("power"), deviceRec.Id))
if err := App.Save(permissionRec); err != nil {
if err := app.Save(permissionRec); err != nil {
logger.Error.Println(err)
return err
}
@@ -154,7 +153,7 @@ func StartPocketBase(distDirFS fs.FS) {
return e.Next()
})
App.OnModelAfterDeleteSuccess().BindFunc(func(e *core.ModelEvent) error {
app.OnModelAfterDeleteSuccess().BindFunc(func(e *core.ModelEvent) error {
if e.Model.TableName() == "_superusers" {
if err := setSetupCompleted(); err != nil {
logger.Error.Println(err)
@@ -165,29 +164,29 @@ func StartPocketBase(distDirFS fs.FS) {
})
// prevent new superuser bahavior introduced in pocketbase 0.23
App.OnRecordCreate(core.CollectionNameSuperusers).BindFunc(func(e *core.RecordEvent) error {
app.OnRecordCreate(core.CollectionNameSuperusers).BindFunc(func(e *core.RecordEvent) error {
if e.Record.Email() == core.DefaultInstallerEmail {
return errors.New("skip default PocketBase installer")
}
return e.Next()
})
App.OnTerminate().BindFunc(func(e *core.TerminateEvent) error {
app.OnTerminate().BindFunc(func(e *core.TerminateEvent) error {
cronjobs.StopAll()
return e.Next()
})
if err := App.Start(); err != nil {
if err := app.Start(); err != nil {
logger.Error.Fatalln(err)
}
}
func importSettings() error {
settingsPrivateRecords, err := App.FindAllRecords("settings_private")
func importSettings(app *pocketbase.PocketBase) error {
settingsPrivateRecords, err := app.FindAllRecords("settings_private")
if err != nil {
return err
}
settingsPrivateCollection, err := App.FindCollectionByNameOrId("settings_private")
settingsPrivateCollection, err := app.FindCollectionByNameOrId("settings_private")
if err != nil {
return err
}
@@ -196,11 +195,11 @@ func importSettings() error {
settingsPrivate = settingsPrivateRecords[0]
}
settingsPublicRecords, err := App.FindAllRecords("settings_public")
settingsPublicRecords, err := app.FindAllRecords("settings_public")
if err != nil {
return err
}
settingsPublicCollection, err := App.FindCollectionByNameOrId("settings_public")
settingsPublicCollection, err := app.FindCollectionByNameOrId("settings_public")
if err != nil {
return err
}
@@ -230,13 +229,13 @@ func importSettings() error {
settingsPublic.Set("website_title", websiteTitle)
}
if err := App.Save(settingsPrivate); err != nil {
if err := app.Save(settingsPrivate); err != nil {
return err
}
if err := App.Save(settingsPublic); err != nil {
if err := app.Save(settingsPublic); err != nil {
return err
}
if err := setSetupCompleted(); err != nil {
if err := setSetupCompleted(app); err != nil {
logger.Error.Println(err)
return err
}
@@ -245,26 +244,26 @@ func importSettings() error {
return nil
}
func resetDeviceStates() error {
devices, err := App.FindAllRecords("devices")
func resetDeviceStates(app *pocketbase.PocketBase) error {
devices, err := app.FindAllRecords("devices")
if err != nil {
return err
}
for _, device := range devices {
device.Set("status", "offline")
if err := App.Save(device); err != nil {
if err := app.Save(device); err != nil {
return err
}
}
return nil
}
func setSetupCompleted() error {
totalAdmins, err := App.CountRecords(core.CollectionNameSuperusers)
func setSetupCompleted(app *pocketbase.PocketBase) error {
totalAdmins, err := app.CountRecords(core.CollectionNameSuperusers)
if err != nil {
return err
}
settingsPublicRecords, err := App.FindAllRecords("settings_public")
settingsPublicRecords, err := app.FindAllRecords("settings_public")
if err != nil {
return err
}
@@ -273,7 +272,7 @@ func setSetupCompleted() error {
} else {
settingsPublicRecords[0].Set("setup_completed", false)
}
if err := App.Save(settingsPublicRecords[0]); err != nil {
if err := app.Save(settingsPublicRecords[0]); err != nil {
return err
}
return nil