diff --git a/backend/cronjobs/cronjobs.go b/backend/cronjobs/cronjobs.go index cef67141..4b8d51f3 100644 --- a/backend/cronjobs/cronjobs.go +++ b/backend/cronjobs/cronjobs.go @@ -13,14 +13,14 @@ var CronPing *cron.Cron var CronWakeShutdown *cron.Cron func RunPing(app *pocketbase.PocketBase) { - settingsRecords, err := app.Dao().FindRecordsByExpr("settings") + settingsPrivateRecords, err := app.Dao().FindRecordsByExpr("settings_private") if err != nil { logger.Error.Println(err) } // init cronjob CronPing = cron.New() - CronPing.AddFunc(settingsRecords[0].GetString("interval"), func() { + CronPing.AddFunc(settingsPrivateRecords[0].GetString("interval"), func() { // skip cron if no realtime clients connected realtimeClients := len(app.SubscriptionsBroker().Clients()) if realtimeClients == 0 { diff --git a/backend/migrations/1678400249_created_settings_public.go b/backend/migrations/1678400249_created_settings_public.go new file mode 100644 index 00000000..a19b676f --- /dev/null +++ b/backend/migrations/1678400249_created_settings_public.go @@ -0,0 +1,80 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models" +) + +func init() { + m.Register(func(db dbx.Builder) error { + jsonData := `{ + "id": "t1rajoyzl6691g3", + "created": "2023-03-09 22:17:29.463Z", + "updated": "2023-03-09 22:17:29.463Z", + "name": "settings_public", + "type": "base", + "system": false, + "schema": [ + { + "system": false, + "id": "s1grje98", + "name": "website_title", + "type": "text", + "required": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "tlzz87pj", + "name": "favicon", + "type": "file", + "required": false, + "unique": false, + "options": { + "maxSelect": 1, + "maxSize": 5242880, + "mimeTypes": [ + "image/x-icon", + "image/png", + "image/svg+xml", + "image/gif", + "image/jpeg" + ], + "thumbs": [] + } + } + ], + "listRule": "", + "viewRule": "", + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": {} + }` + + collection := &models.Collection{} + if err := json.Unmarshal([]byte(jsonData), &collection); err != nil { + return err + } + + return daos.New(db).SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("t1rajoyzl6691g3") + if err != nil { + return err + } + + return dao.DeleteCollection(collection) + }) +} diff --git a/backend/migrations/1678400310_updated_settings.go b/backend/migrations/1678400310_updated_settings.go new file mode 100644 index 00000000..80b19f4c --- /dev/null +++ b/backend/migrations/1678400310_updated_settings.go @@ -0,0 +1,65 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" + "github.com/pocketbase/pocketbase/tools/types" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("nmj3ko20gzkg8n3") + if err != nil { + return err + } + + collection.Name = "settings_private" + + collection.ListRule = nil + + collection.ViewRule = nil + + // remove + collection.Schema.RemoveField("slrjkipw") + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("nmj3ko20gzkg8n3") + if err != nil { + return err + } + + collection.Name = "settings" + + collection.ListRule = types.Pointer("@request.auth.id != \"\"") + + collection.ViewRule = types.Pointer("@request.auth.id != \"\"") + + // add + del_website_title := &schema.SchemaField{} + json.Unmarshal([]byte(`{ + "system": false, + "id": "slrjkipw", + "name": "website_title", + "type": "text", + "required": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }`), del_website_title) + collection.Schema.AddField(del_website_title) + + return dao.SaveCollection(collection) + }) +} diff --git a/backend/pb/handlers.go b/backend/pb/handlers.go index 48c158a2..de53820c 100644 --- a/backend/pb/handlers.go +++ b/backend/pb/handlers.go @@ -70,12 +70,12 @@ func HandlerScan(c echo.Context) error { } // check if scan range is valid - allSettings, err := App.Dao().FindRecordsByExpr("settings") + allPrivateSettings, err := App.Dao().FindRecordsByExpr("settings_private") if err != nil { return err } - settings := allSettings[0] - scanRange := settings.GetString("scan_range") + settingsPrivate := allPrivateSettings[0] + scanRange := settingsPrivate.GetString("scan_range") _, ipNet, err := net.ParseCIDR(scanRange) if err != nil { return apis.NewBadRequestError(err.Error(), nil) diff --git a/backend/pb/pb.go b/backend/pb/pb.go index 4ed5a360..57c90d0e 100644 --- a/backend/pb/pb.go +++ b/backend/pb/pb.go @@ -85,7 +85,7 @@ func StartPocketBase(distDirFS fs.FS) { // add event hook before starting server. // using this outside App.OnBeforeServe() would not work App.OnModelAfterUpdate().Add(func(e *core.ModelEvent) error { - if e.Model.TableName() == "settings" { + if e.Model.TableName() == "settings_private" { for _, job := range cronjobs.CronPing.Entries() { cronjobs.CronPing.Remove(job.ID) } @@ -119,18 +119,32 @@ func StartPocketBase(distDirFS fs.FS) { } func importSettings() error { - // get first settings record - settingsRecords, err := App.Dao().FindRecordsByExpr("settings") + // get first settingsPrivate record + settingsPrivateRecords, err := App.Dao().FindRecordsByExpr("settings_private") if err != nil { return err } - settingsCollection, err := App.Dao().FindCollectionByNameOrId("settings") + settingsPrivateCollection, err := App.Dao().FindCollectionByNameOrId("settings_private") if err != nil { return err } - settings := models.NewRecord(settingsCollection) - if len(settingsRecords) > 0 { - settings = settingsRecords[0] + settingsPrivate := models.NewRecord(settingsPrivateCollection) + if len(settingsPrivateRecords) > 0 { + settingsPrivate = settingsPrivateRecords[0] + } + + // get first settingsPublic record + settingsPublicRecords, err := App.Dao().FindRecordsByExpr("settings_public") + if err != nil { + return err + } + settingsPublicCollection, err := App.Dao().FindCollectionByNameOrId("settings_public") + if err != nil { + return err + } + settingsPublic := models.NewRecord(settingsPublicCollection) + if len(settingsPublicRecords) > 0 { + settingsPublic = settingsPublicRecords[0] } // set ping interval settings. priority: @@ -138,22 +152,22 @@ func importSettings() error { // 2nd: database entry // 3rd: default values interval := "@every 3s" - if settings.GetString("interval") != "" { - interval = settings.GetString("interval") + if settingsPrivate.GetString("interval") != "" { + interval = settingsPrivate.GetString("interval") } if os.Getenv("UPSNAP_INTERVAL") != "" { interval = os.Getenv("UPSNAP_INTERVAL") } // save settings to db - settings.Set("interval", interval) + settingsPrivate.Set("interval", interval) if scanRange := os.Getenv("UPSNAP_SCAN_RANGE"); scanRange != "" { - settings.Set("scan_range", scanRange) + settingsPrivate.Set("scan_range", scanRange) } - if scanRange := os.Getenv("UPSNAP_WEBSITE_TITLE"); scanRange != "" { - settings.Set("website_title", scanRange) + if websiteTitle := os.Getenv("UPSNAP_WEBSITE_TITLE"); websiteTitle != "" { + settingsPublic.Set("website_title", websiteTitle) } - if err := App.Dao().SaveRecord(settings); err != nil { + if err := App.Dao().SaveRecord(settingsPublic); err != nil { return err } diff --git a/frontend/src/app.html b/frontend/src/app.html index b21b9f96..a1c1328b 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -2,7 +2,6 @@
- %sveltekit.head% diff --git a/frontend/src/components/DeviceCard.svelte b/frontend/src/components/DeviceCard.svelte index 5440a17d..557bb25a 100644 --- a/frontend/src/components/DeviceCard.svelte +++ b/frontend/src/components/DeviceCard.svelte @@ -2,6 +2,7 @@ import { dev } from '$app/environment'; import { parseISO, formatDistance } from 'date-fns'; import { pocketbase } from '@stores/pocketbase'; + import Fa from 'svelte-fa/src/fa.svelte'; import { faPowerOff, faEllipsisVertical, @@ -10,7 +11,6 @@ faCircleDown, faLock } from '@fortawesome/free-solid-svg-icons'; - import Fa from 'svelte-fa/src/fa.svelte'; import { sortPorts } from '../sorts'; export let device; diff --git a/frontend/src/components/DeviceForm.svelte b/frontend/src/components/DeviceForm.svelte index bdcb04d0..0569be7b 100644 --- a/frontend/src/components/DeviceForm.svelte +++ b/frontend/src/components/DeviceForm.svelte @@ -1,8 +1,8 @@ -