From 8d479669f4e70e4c055a624cbd4274d245eac795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxi=20Quo=C3=9F?= Date: Sun, 5 Mar 2023 02:44:47 +0100 Subject: [PATCH] add authentification #42 #55 * from now on, upsnap always requires authentification (user or admin) * users can view the dashboard and use wake/shutdown (read only) * admins can do everything (add, modify and delete) * make navbar collapse on small screens --- .../migrations/1677961980_created_users.go | 55 +++++++++++ .../migrations/1677962170_updated_devices.go | 50 ++++++++++ .../migrations/1677962204_updated_ports.go | 50 ++++++++++ .../migrations/1677962213_updated_settings.go | 50 ++++++++++ backend/pb/pb.go | 3 + frontend/src/components/DeviceCard.svelte | 13 ++- frontend/src/components/Login.svelte | 78 ++++++++++++++++ frontend/src/components/Navbar.svelte | 92 ++++++++++++++----- frontend/src/routes/+layout.svelte | 46 +++++----- frontend/src/routes/+page.svelte | 16 +++- frontend/src/routes/settings/+page.svelte | 13 ++- frontend/src/scss/main.scss | 7 ++ frontend/src/stores/pocketbase.ts | 1 + 13 files changed, 426 insertions(+), 48 deletions(-) create mode 100644 backend/migrations/1677961980_created_users.go create mode 100644 backend/migrations/1677962170_updated_devices.go create mode 100644 backend/migrations/1677962204_updated_ports.go create mode 100644 backend/migrations/1677962213_updated_settings.go create mode 100644 frontend/src/components/Login.svelte diff --git a/backend/migrations/1677961980_created_users.go b/backend/migrations/1677961980_created_users.go new file mode 100644 index 00000000..91c066c8 --- /dev/null +++ b/backend/migrations/1677961980_created_users.go @@ -0,0 +1,55 @@ +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": "27do0wbcuyfmbmx", + "created": "2023-03-04 20:33:00.558Z", + "updated": "2023-03-04 20:33:00.558Z", + "name": "users", + "type": "auth", + "system": false, + "schema": [], + "listRule": null, + "viewRule": null, + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": { + "allowEmailAuth": true, + "allowOAuth2Auth": false, + "allowUsernameAuth": true, + "exceptEmailDomains": [], + "manageRule": null, + "minPasswordLength": 8, + "onlyEmailDomains": [], + "requireEmail": false + } + }` + + 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("27do0wbcuyfmbmx") + if err != nil { + return err + } + + return dao.DeleteCollection(collection) + }) +} diff --git a/backend/migrations/1677962170_updated_devices.go b/backend/migrations/1677962170_updated_devices.go new file mode 100644 index 00000000..67b67d62 --- /dev/null +++ b/backend/migrations/1677962170_updated_devices.go @@ -0,0 +1,50 @@ +package migrations + +import ( + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/tools/types" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z5lghx2r3tm45n1") + if err != nil { + return err + } + + collection.ListRule = types.Pointer("@request.auth.id != \"\"") + + collection.ViewRule = types.Pointer("@request.auth.id != \"\"") + + collection.CreateRule = nil + + collection.UpdateRule = nil + + collection.DeleteRule = nil + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z5lghx2r3tm45n1") + if err != nil { + return err + } + + collection.ListRule = nil + + collection.ViewRule = nil + + collection.CreateRule = types.Pointer("") + + collection.UpdateRule = types.Pointer("") + + collection.DeleteRule = types.Pointer("") + + return dao.SaveCollection(collection) + }) +} diff --git a/backend/migrations/1677962204_updated_ports.go b/backend/migrations/1677962204_updated_ports.go new file mode 100644 index 00000000..adb8a06b --- /dev/null +++ b/backend/migrations/1677962204_updated_ports.go @@ -0,0 +1,50 @@ +package migrations + +import ( + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/tools/types" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("cti4l8f4mz8df3r") + if err != nil { + return err + } + + collection.ListRule = types.Pointer("@request.auth.id != \"\"") + + collection.ViewRule = types.Pointer("@request.auth.id != \"\"") + + collection.CreateRule = nil + + collection.UpdateRule = nil + + collection.DeleteRule = nil + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("cti4l8f4mz8df3r") + if err != nil { + return err + } + + collection.ListRule = nil + + collection.ViewRule = nil + + collection.CreateRule = types.Pointer("") + + collection.UpdateRule = types.Pointer("") + + collection.DeleteRule = types.Pointer("") + + return dao.SaveCollection(collection) + }) +} diff --git a/backend/migrations/1677962213_updated_settings.go b/backend/migrations/1677962213_updated_settings.go new file mode 100644 index 00000000..793d9ae5 --- /dev/null +++ b/backend/migrations/1677962213_updated_settings.go @@ -0,0 +1,50 @@ +package migrations + +import ( + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "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.ListRule = types.Pointer("@request.auth.id != \"\"") + + collection.ViewRule = types.Pointer("@request.auth.id != \"\"") + + collection.CreateRule = nil + + collection.UpdateRule = nil + + collection.DeleteRule = nil + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("nmj3ko20gzkg8n3") + if err != nil { + return err + } + + collection.ListRule = nil + + collection.ViewRule = nil + + collection.CreateRule = types.Pointer("") + + collection.UpdateRule = types.Pointer("") + + collection.DeleteRule = types.Pointer("") + + return dao.SaveCollection(collection) + }) +} diff --git a/backend/pb/pb.go b/backend/pb/pb.go index 7d9ea0ee..4ed5a360 100644 --- a/backend/pb/pb.go +++ b/backend/pb/pb.go @@ -41,6 +41,7 @@ func StartPocketBase(distDirFS fs.FS) { Handler: HandlerWake, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(App), + apis.RequireAdminOrRecordAuth("users"), }, }) @@ -51,6 +52,7 @@ func StartPocketBase(distDirFS fs.FS) { Handler: HandlerShutdown, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(App), + apis.RequireAdminOrRecordAuth("users"), }, }) @@ -61,6 +63,7 @@ func StartPocketBase(distDirFS fs.FS) { Handler: HandlerScan, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(App), + apis.RequireAdminAuth(), }, }) diff --git a/frontend/src/components/DeviceCard.svelte b/frontend/src/components/DeviceCard.svelte index 6b5c322b..238e0838 100644 --- a/frontend/src/components/DeviceCard.svelte +++ b/frontend/src/components/DeviceCard.svelte @@ -1,6 +1,7 @@ diff --git a/frontend/src/components/Login.svelte b/frontend/src/components/Login.svelte new file mode 100644 index 00000000..5bee5928 --- /dev/null +++ b/frontend/src/components/Login.svelte @@ -0,0 +1,78 @@ + + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
{error.msg}
+ +
+
+
+
diff --git a/frontend/src/components/Navbar.svelte b/frontend/src/components/Navbar.svelte index 80af846f..870db25a 100644 --- a/frontend/src/components/Navbar.svelte +++ b/frontend/src/components/Navbar.svelte @@ -1,17 +1,44 @@ @@ -22,7 +49,7 @@ {/if} -