show register form if setup not completed

This commit is contained in:
Maxi Quoß
2023-03-10 10:52:38 +01:00
parent df9f549d65
commit 93a72207cc
6 changed files with 366 additions and 189 deletions

View File

@@ -0,0 +1,48 @@
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"
)
func init() {
m.Register(func(db dbx.Builder) error {
dao := daos.New(db);
collection, err := dao.FindCollectionByNameOrId("t1rajoyzl6691g3")
if err != nil {
return err
}
// add
new_setup_completed := &schema.SchemaField{}
json.Unmarshal([]byte(`{
"system": false,
"id": "vrxqcsnv",
"name": "setup_completed",
"type": "bool",
"required": false,
"unique": false,
"options": {}
}`), new_setup_completed)
collection.Schema.AddField(new_setup_completed)
return dao.SaveCollection(collection)
}, func(db dbx.Builder) error {
dao := daos.New(db);
collection, err := dao.FindCollectionByNameOrId("t1rajoyzl6691g3")
if err != nil {
return err
}
// remove
collection.Schema.RemoveField("vrxqcsnv")
return dao.SaveCollection(collection)
})
}

View File

@@ -104,7 +104,26 @@ func StartPocketBase(distDirFS fs.FS) {
// refresh the device list on database events // refresh the device list on database events
App.OnModelAfterCreate().Add(func(e *core.ModelEvent) error { App.OnModelAfterCreate().Add(func(e *core.ModelEvent) error {
refreshDeviceList() if e.Model.TableName() == "_admins" {
totalAdmins, err := App.Dao().TotalAdmins()
if err != nil {
return err
}
settingsPublicRecords, err := App.Dao().FindRecordsByExpr("settings_public")
if err != nil {
return err
}
if totalAdmins > 0 {
settingsPublicRecords[0].Set("setup_completed", true)
} else {
settingsPublicRecords[0].Set("setup_completed", false)
}
if err := App.Dao().SaveRecord(settingsPublicRecords[0]); err != nil {
return err
}
} else {
refreshDeviceList()
}
return nil return nil
}) })
App.OnModelAfterDelete().Add(func(e *core.ModelEvent) error { App.OnModelAfterDelete().Add(func(e *core.ModelEvent) error {
@@ -159,17 +178,30 @@ func importSettings() error {
interval = os.Getenv("UPSNAP_INTERVAL") interval = os.Getenv("UPSNAP_INTERVAL")
} }
// save settings to db // set private settings
settingsPrivate.Set("interval", interval) settingsPrivate.Set("interval", interval)
if scanRange := os.Getenv("UPSNAP_SCAN_RANGE"); scanRange != "" { if scanRange := os.Getenv("UPSNAP_SCAN_RANGE"); scanRange != "" {
settingsPrivate.Set("scan_range", scanRange) settingsPrivate.Set("scan_range", scanRange)
} }
if err := App.Dao().SaveRecord(settingsPrivate); err != nil {
return err // set public settings
}
if websiteTitle := os.Getenv("UPSNAP_WEBSITE_TITLE"); websiteTitle != "" { if websiteTitle := os.Getenv("UPSNAP_WEBSITE_TITLE"); websiteTitle != "" {
settingsPublic.Set("website_title", websiteTitle) settingsPublic.Set("website_title", websiteTitle)
} }
if totalAdmins, err := App.Dao().TotalAdmins(); err != nil {
return err
} else {
if totalAdmins > 0 {
settingsPublic.Set("setup_completed", true)
} else {
settingsPublic.Set("setup_completed", false)
}
}
// save records
if err := App.Dao().SaveRecord(settingsPrivate); err != nil {
return err
}
if err := App.Dao().SaveRecord(settingsPublic); err != nil { if err := App.Dao().SaveRecord(settingsPublic); err != nil {
return err return err
} }

View File

@@ -18,17 +18,17 @@
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-static": "^1.0.6", "@sveltejs/adapter-static": "^1.0.6",
"@sveltejs/kit": "^1.10.0", "@sveltejs/kit": "^1.11.0",
"@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/eslint-plugin": "^5.54.1",
"@typescript-eslint/parser": "^5.54.0", "@typescript-eslint/parser": "^5.54.1",
"eslint": "^8.35.0", "eslint": "^8.35.0",
"eslint-config-prettier": "^8.6.0", "eslint-config-prettier": "^8.7.0",
"eslint-plugin-svelte3": "^4.0.0", "eslint-plugin-svelte3": "^4.0.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"lint-staged": "^13.1.2", "lint-staged": "^13.1.2",
"prettier": "^2.8.4", "prettier": "^2.8.4",
"prettier-plugin-svelte": "^2.9.0", "prettier-plugin-svelte": "^2.9.0",
"svelte": "^3.55.1", "svelte": "^3.56.0",
"svelte-preprocess": "^5.0.1", "svelte-preprocess": "^5.0.1",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"vite": "^4.1.4" "vite": "^4.1.4"
@@ -538,9 +538,9 @@
} }
}, },
"node_modules/@sveltejs/kit": { "node_modules/@sveltejs/kit": {
"version": "1.10.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.10.0.tgz", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.11.0.tgz",
"integrity": "sha512-0P35zHrByfbF3Ym3RdQL+RvzgsCDSyO3imSwuZ67XAD5HoCQFF3a8Mhh0V3sObz3rc5aJd4Qn82UpAihJqZ6gQ==", "integrity": "sha512-PwViZcMoLgEU/jhLoSyjf5hSrHS67wvSm0ifBo4prP9irpGa5HuPOZeVDTL5tPDSBoKxtdYi1zlGdoiJfO86jA==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
@@ -637,14 +637,14 @@
"dev": true "dev": true
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz",
"integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", "integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "5.54.0", "@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/type-utils": "5.54.0", "@typescript-eslint/type-utils": "5.54.1",
"@typescript-eslint/utils": "5.54.0", "@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"grapheme-splitter": "^1.0.4", "grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0", "ignore": "^5.2.0",
@@ -671,14 +671,14 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz",
"integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", "integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "5.54.0", "@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.0", "@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.0", "@typescript-eslint/typescript-estree": "5.54.1",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
@@ -698,13 +698,13 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz",
"integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", "integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "5.54.0", "@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.0" "@typescript-eslint/visitor-keys": "5.54.1"
}, },
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -715,13 +715,13 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz",
"integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", "integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "5.54.0", "@typescript-eslint/typescript-estree": "5.54.1",
"@typescript-eslint/utils": "5.54.0", "@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"tsutils": "^3.21.0" "tsutils": "^3.21.0"
}, },
@@ -742,9 +742,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz",
"integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -755,13 +755,13 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz",
"integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "5.54.0", "@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.0", "@typescript-eslint/visitor-keys": "5.54.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -782,16 +782,16 @@
} }
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz",
"integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", "integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12", "@types/semver": "^7.3.12",
"@typescript-eslint/scope-manager": "5.54.0", "@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.0", "@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.0", "@typescript-eslint/typescript-estree": "5.54.1",
"eslint-scope": "^5.1.1", "eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0", "eslint-utils": "^3.0.0",
"semver": "^7.3.7" "semver": "^7.3.7"
@@ -808,12 +808,12 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "5.54.0", "version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz",
"integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "5.54.0", "@typescript-eslint/types": "5.54.1",
"eslint-visitor-keys": "^3.3.0" "eslint-visitor-keys": "^3.3.0"
}, },
"engines": { "engines": {
@@ -1404,9 +1404,9 @@
} }
}, },
"node_modules/eslint-config-prettier": { "node_modules/eslint-config-prettier": {
"version": "8.6.0", "version": "8.7.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz",
"integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==",
"dev": true, "dev": true,
"bin": { "bin": {
"eslint-config-prettier": "bin/cli.js" "eslint-config-prettier": "bin/cli.js"
@@ -2910,9 +2910,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "3.18.0", "version": "3.19.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.18.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.0.tgz",
"integrity": "sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==", "integrity": "sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==",
"dev": true, "dev": true,
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
@@ -3266,9 +3266,9 @@
} }
}, },
"node_modules/svelte": { "node_modules/svelte": {
"version": "3.55.1", "version": "3.56.0",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.56.0.tgz",
"integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", "integrity": "sha512-LvXiJbjdvJKwB/0CQyYpDX0q+hFqCyWmybzC2G6eK1tJJA/RSRCytTfNmjHv+RHlLuA70vWG7nXp6gbeErYvRA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"

View File

@@ -12,17 +12,17 @@
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-static": "^1.0.6", "@sveltejs/adapter-static": "^1.0.6",
"@sveltejs/kit": "^1.10.0", "@sveltejs/kit": "^1.11.0",
"@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/eslint-plugin": "^5.54.1",
"@typescript-eslint/parser": "^5.54.0", "@typescript-eslint/parser": "^5.54.1",
"eslint": "^8.35.0", "eslint": "^8.35.0",
"eslint-config-prettier": "^8.6.0", "eslint-config-prettier": "^8.7.0",
"eslint-plugin-svelte3": "^4.0.0", "eslint-plugin-svelte3": "^4.0.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"lint-staged": "^13.1.2", "lint-staged": "^13.1.2",
"prettier": "^2.8.4", "prettier": "^2.8.4",
"prettier-plugin-svelte": "^2.9.0", "prettier-plugin-svelte": "^2.9.0",
"svelte": "^3.55.1", "svelte": "^3.56.0",
"svelte-preprocess": "^5.0.1", "svelte-preprocess": "^5.0.1",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"vite": "^4.1.4" "vite": "^4.1.4"

142
frontend/pnpm-lock.yaml generated
View File

@@ -4,13 +4,13 @@ specifiers:
'@fortawesome/free-solid-svg-icons': ^6.3.0 '@fortawesome/free-solid-svg-icons': ^6.3.0
'@popperjs/core': ^2.11.6 '@popperjs/core': ^2.11.6
'@sveltejs/adapter-static': ^1.0.6 '@sveltejs/adapter-static': ^1.0.6
'@sveltejs/kit': ^1.10.0 '@sveltejs/kit': ^1.11.0
'@typescript-eslint/eslint-plugin': ^5.54.0 '@typescript-eslint/eslint-plugin': ^5.54.1
'@typescript-eslint/parser': ^5.54.0 '@typescript-eslint/parser': ^5.54.1
bootstrap: 5.3.0-alpha1 bootstrap: 5.3.0-alpha1
date-fns: ^2.29.3 date-fns: ^2.29.3
eslint: ^8.35.0 eslint: ^8.35.0
eslint-config-prettier: ^8.6.0 eslint-config-prettier: ^8.7.0
eslint-plugin-svelte3: ^4.0.0 eslint-plugin-svelte3: ^4.0.0
husky: ^8.0.3 husky: ^8.0.3
lint-staged: ^13.1.2 lint-staged: ^13.1.2
@@ -18,7 +18,7 @@ specifiers:
prettier: ^2.8.4 prettier: ^2.8.4
prettier-plugin-svelte: ^2.9.0 prettier-plugin-svelte: ^2.9.0
sass: ^1.58.3 sass: ^1.58.3
svelte: ^3.55.1 svelte: ^3.56.0
svelte-fa: ^3.0.3 svelte-fa: ^3.0.3
svelte-preprocess: ^5.0.1 svelte-preprocess: ^5.0.1
typescript: ^4.9.5 typescript: ^4.9.5
@@ -34,19 +34,19 @@ dependencies:
svelte-fa: 3.0.3 svelte-fa: 3.0.3
devDependencies: devDependencies:
'@sveltejs/adapter-static': 1.0.6_@sveltejs+kit@1.10.0 '@sveltejs/adapter-static': 1.0.6_@sveltejs+kit@1.11.0
'@sveltejs/kit': 1.10.0_svelte@3.55.1+vite@4.1.4 '@sveltejs/kit': 1.11.0_svelte@3.56.0+vite@4.1.4
'@typescript-eslint/eslint-plugin': 5.54.0_6mj2wypvdnknez7kws2nfdgupi '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i
'@typescript-eslint/parser': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
eslint: 8.35.0 eslint: 8.35.0
eslint-config-prettier: 8.6.0_eslint@8.35.0 eslint-config-prettier: 8.7.0_eslint@8.35.0
eslint-plugin-svelte3: 4.0.0_n4ieifq2d7jq3sqoe474cgqlim eslint-plugin-svelte3: 4.0.0_edkhwr7m6j5c643qin6znnpg6e
husky: 8.0.3 husky: 8.0.3
lint-staged: 13.1.2 lint-staged: 13.1.2
prettier: 2.8.4 prettier: 2.8.4
prettier-plugin-svelte: 2.9.0_jrsxveqmsx2uadbqiuq74wlc4u prettier-plugin-svelte: 2.9.0_gan2xfhhcbz3kbkivttwsjndea
svelte: 3.55.1 svelte: 3.56.0
svelte-preprocess: 5.0.1_fsk2356kdqta2rdbnwwjn3abbe svelte-preprocess: 5.0.1_qc2e3katqrp64k42mpevd5vmaq
typescript: 4.9.5 typescript: 4.9.5
vite: 4.1.4_sass@1.58.3 vite: 4.1.4_sass@1.58.3
@@ -443,7 +443,7 @@ packages:
} }
dev: false dev: false
/@sveltejs/adapter-static/1.0.6_@sveltejs+kit@1.10.0: /@sveltejs/adapter-static/1.0.6_@sveltejs+kit@1.11.0:
resolution: resolution:
{ {
integrity: sha512-gTus2jW6bEQAZoT1MdmPHWZZmcb6dfLWc0r6dFHnbzSDZ68kifqQ1E+dZDOMF7aXeRV91sgnPuAn2MtpinVdlA== integrity: sha512-gTus2jW6bEQAZoT1MdmPHWZZmcb6dfLWc0r6dFHnbzSDZ68kifqQ1E+dZDOMF7aXeRV91sgnPuAn2MtpinVdlA==
@@ -451,13 +451,13 @@ packages:
peerDependencies: peerDependencies:
'@sveltejs/kit': ^1.0.0 '@sveltejs/kit': ^1.0.0
dependencies: dependencies:
'@sveltejs/kit': 1.10.0_svelte@3.55.1+vite@4.1.4 '@sveltejs/kit': 1.11.0_svelte@3.56.0+vite@4.1.4
dev: true dev: true
/@sveltejs/kit/1.10.0_svelte@3.55.1+vite@4.1.4: /@sveltejs/kit/1.11.0_svelte@3.56.0+vite@4.1.4:
resolution: resolution:
{ {
integrity: sha512-0P35zHrByfbF3Ym3RdQL+RvzgsCDSyO3imSwuZ67XAD5HoCQFF3a8Mhh0V3sObz3rc5aJd4Qn82UpAihJqZ6gQ== integrity: sha512-PwViZcMoLgEU/jhLoSyjf5hSrHS67wvSm0ifBo4prP9irpGa5HuPOZeVDTL5tPDSBoKxtdYi1zlGdoiJfO86jA==
} }
engines: { node: ^16.14 || >=18 } engines: { node: ^16.14 || >=18 }
hasBin: true hasBin: true
@@ -466,7 +466,7 @@ packages:
svelte: ^3.54.0 svelte: ^3.54.0
vite: ^4.0.0 vite: ^4.0.0
dependencies: dependencies:
'@sveltejs/vite-plugin-svelte': 2.0.3_svelte@3.55.1+vite@4.1.4 '@sveltejs/vite-plugin-svelte': 2.0.3_svelte@3.56.0+vite@4.1.4
'@types/cookie': 0.5.1 '@types/cookie': 0.5.1
cookie: 0.5.0 cookie: 0.5.0
devalue: 4.3.0 devalue: 4.3.0
@@ -477,7 +477,7 @@ packages:
sade: 1.8.1 sade: 1.8.1
set-cookie-parser: 2.5.1 set-cookie-parser: 2.5.1
sirv: 2.0.2 sirv: 2.0.2
svelte: 3.55.1 svelte: 3.56.0
tiny-glob: 0.2.9 tiny-glob: 0.2.9
undici: 5.20.0 undici: 5.20.0
vite: 4.1.4_sass@1.58.3 vite: 4.1.4_sass@1.58.3
@@ -485,7 +485,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@sveltejs/vite-plugin-svelte/2.0.3_svelte@3.55.1+vite@4.1.4: /@sveltejs/vite-plugin-svelte/2.0.3_svelte@3.56.0+vite@4.1.4:
resolution: resolution:
{ {
integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA== integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==
@@ -499,8 +499,8 @@ packages:
deepmerge: 4.3.0 deepmerge: 4.3.0
kleur: 4.1.5 kleur: 4.1.5
magic-string: 0.29.0 magic-string: 0.29.0
svelte: 3.55.1 svelte: 3.56.0
svelte-hmr: 0.15.1_svelte@3.55.1 svelte-hmr: 0.15.1_svelte@3.56.0
vite: 4.1.4_sass@1.58.3 vite: 4.1.4_sass@1.58.3
vitefu: 0.2.4_vite@4.1.4 vitefu: 0.2.4_vite@4.1.4
transitivePeerDependencies: transitivePeerDependencies:
@@ -545,10 +545,10 @@ packages:
} }
dev: true dev: true
/@typescript-eslint/eslint-plugin/5.54.0_6mj2wypvdnknez7kws2nfdgupi: /@typescript-eslint/eslint-plugin/5.54.1_mlk7dnz565t663n4razh6a6v6i:
resolution: resolution:
{ {
integrity: sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies: peerDependencies:
@@ -559,10 +559,10 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
'@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/scope-manager': 5.54.1
'@typescript-eslint/type-utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu '@typescript-eslint/type-utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
'@typescript-eslint/utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
debug: 4.3.4 debug: 4.3.4
eslint: 8.35.0 eslint: 8.35.0
grapheme-splitter: 1.0.4 grapheme-splitter: 1.0.4
@@ -576,10 +576,10 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: /@typescript-eslint/parser/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
resolution: resolution:
{ {
integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies: peerDependencies:
@@ -589,9 +589,9 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/scope-manager': 5.54.1
'@typescript-eslint/types': 5.54.0 '@typescript-eslint/types': 5.54.1
'@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
debug: 4.3.4 debug: 4.3.4
eslint: 8.35.0 eslint: 8.35.0
typescript: 4.9.5 typescript: 4.9.5
@@ -599,21 +599,21 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/scope-manager/5.54.0: /@typescript-eslint/scope-manager/5.54.1:
resolution: resolution:
{ {
integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg== integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dependencies: dependencies:
'@typescript-eslint/types': 5.54.0 '@typescript-eslint/types': 5.54.1
'@typescript-eslint/visitor-keys': 5.54.0 '@typescript-eslint/visitor-keys': 5.54.1
dev: true dev: true
/@typescript-eslint/type-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: /@typescript-eslint/type-utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
resolution: resolution:
{ {
integrity: sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ== integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies: peerDependencies:
@@ -623,8 +623,8 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
'@typescript-eslint/utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu
debug: 4.3.4 debug: 4.3.4
eslint: 8.35.0 eslint: 8.35.0
tsutils: 3.21.0_typescript@4.9.5 tsutils: 3.21.0_typescript@4.9.5
@@ -633,18 +633,18 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/types/5.54.0: /@typescript-eslint/types/5.54.1:
resolution: resolution:
{ {
integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dev: true dev: true
/@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5: /@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.5:
resolution: resolution:
{ {
integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ== integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies: peerDependencies:
@@ -653,8 +653,8 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/types': 5.54.0 '@typescript-eslint/types': 5.54.1
'@typescript-eslint/visitor-keys': 5.54.0 '@typescript-eslint/visitor-keys': 5.54.1
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
@@ -665,10 +665,10 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: /@typescript-eslint/utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu:
resolution: resolution:
{ {
integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
peerDependencies: peerDependencies:
@@ -676,9 +676,9 @@ packages:
dependencies: dependencies:
'@types/json-schema': 7.0.11 '@types/json-schema': 7.0.11
'@types/semver': 7.3.13 '@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/scope-manager': 5.54.1
'@typescript-eslint/types': 5.54.0 '@typescript-eslint/types': 5.54.1
'@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5
eslint: 8.35.0 eslint: 8.35.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.35.0 eslint-utils: 3.0.0_eslint@8.35.0
@@ -688,14 +688,14 @@ packages:
- typescript - typescript
dev: true dev: true
/@typescript-eslint/visitor-keys/5.54.0: /@typescript-eslint/visitor-keys/5.54.1:
resolution: resolution:
{ {
integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA== integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==
} }
engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
dependencies: dependencies:
'@typescript-eslint/types': 5.54.0 '@typescript-eslint/types': 5.54.1
eslint-visitor-keys: 3.3.0 eslint-visitor-keys: 3.3.0
dev: true dev: true
@@ -1157,10 +1157,10 @@ packages:
engines: { node: '>=10' } engines: { node: '>=10' }
dev: true dev: true
/eslint-config-prettier/8.6.0_eslint@8.35.0: /eslint-config-prettier/8.7.0_eslint@8.35.0:
resolution: resolution:
{ {
integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== integrity: sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==
} }
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -1169,7 +1169,7 @@ packages:
eslint: 8.35.0 eslint: 8.35.0
dev: true dev: true
/eslint-plugin-svelte3/4.0.0_n4ieifq2d7jq3sqoe474cgqlim: /eslint-plugin-svelte3/4.0.0_edkhwr7m6j5c643qin6znnpg6e:
resolution: resolution:
{ {
integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g== integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==
@@ -1179,7 +1179,7 @@ packages:
svelte: ^3.2.0 svelte: ^3.2.0
dependencies: dependencies:
eslint: 8.35.0 eslint: 8.35.0
svelte: 3.55.1 svelte: 3.56.0
dev: true dev: true
/eslint-scope/5.1.1: /eslint-scope/5.1.1:
@@ -2261,7 +2261,7 @@ packages:
engines: { node: '>= 0.8.0' } engines: { node: '>= 0.8.0' }
dev: true dev: true
/prettier-plugin-svelte/2.9.0_jrsxveqmsx2uadbqiuq74wlc4u: /prettier-plugin-svelte/2.9.0_gan2xfhhcbz3kbkivttwsjndea:
resolution: resolution:
{ {
integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw== integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==
@@ -2271,7 +2271,7 @@ packages:
svelte: ^3.2.0 svelte: ^3.2.0
dependencies: dependencies:
prettier: 2.8.4 prettier: 2.8.4
svelte: 3.55.1 svelte: 3.56.0
dev: true dev: true
/prettier/2.8.4: /prettier/2.8.4:
@@ -2381,10 +2381,10 @@ packages:
glob: 7.2.3 glob: 7.2.3
dev: true dev: true
/rollup/3.18.0: /rollup/3.19.0:
resolution: resolution:
{ {
integrity: sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg== integrity: sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==
} }
engines: { node: '>=14.18.0', npm: '>=8.0.0' } engines: { node: '>=14.18.0', npm: '>=8.0.0' }
hasBin: true hasBin: true
@@ -2673,7 +2673,7 @@ packages:
} }
dev: false dev: false
/svelte-hmr/0.15.1_svelte@3.55.1: /svelte-hmr/0.15.1_svelte@3.56.0:
resolution: resolution:
{ {
integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA== integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==
@@ -2682,10 +2682,10 @@ packages:
peerDependencies: peerDependencies:
svelte: '>=3.19.0' svelte: '>=3.19.0'
dependencies: dependencies:
svelte: 3.55.1 svelte: 3.56.0
dev: true dev: true
/svelte-preprocess/5.0.1_fsk2356kdqta2rdbnwwjn3abbe: /svelte-preprocess/5.0.1_qc2e3katqrp64k42mpevd5vmaq:
resolution: resolution:
{ {
integrity: sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ== integrity: sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==
@@ -2733,14 +2733,14 @@ packages:
sass: 1.58.3 sass: 1.58.3
sorcery: 0.11.0 sorcery: 0.11.0
strip-indent: 3.0.0 strip-indent: 3.0.0
svelte: 3.55.1 svelte: 3.56.0
typescript: 4.9.5 typescript: 4.9.5
dev: true dev: true
/svelte/3.55.1: /svelte/3.56.0:
resolution: resolution:
{ {
integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ== integrity: sha512-LvXiJbjdvJKwB/0CQyYpDX0q+hFqCyWmybzC2G6eK1tJJA/RSRCytTfNmjHv+RHlLuA70vWG7nXp6gbeErYvRA==
} }
engines: { node: '>= 8' } engines: { node: '>= 8' }
dev: true dev: true
@@ -2898,7 +2898,7 @@ packages:
esbuild: 0.16.17 esbuild: 0.16.17
postcss: 8.4.21 postcss: 8.4.21
resolve: 1.22.1 resolve: 1.22.1
rollup: 3.18.0 rollup: 3.19.0
sass: 1.58.3 sass: 1.58.3
optionalDependencies: optionalDependencies:
fsevents: 2.3.2 fsevents: 2.3.2

View File

@@ -3,13 +3,22 @@
let username; let username;
let password; let password;
let passwordConfirm;
let isAdmin; let isAdmin;
let error = { let callout = {
hidden: true, hidden: true,
level: 'danger',
title: '', title: '',
msg: '' msg: ''
}; };
$: if ($settings_public.setup_completed === false) {
callout.title = '';
callout.msg = 'No admin account has been set up. Please create one.';
callout.level = 'info';
callout.hidden = false;
}
async function login() { async function login() {
if (isAdmin) { if (isAdmin) {
$pocketbase.admins $pocketbase.admins
@@ -19,9 +28,10 @@
}) })
.catch((err) => { .catch((err) => {
authorizedStore.set(false); authorizedStore.set(false);
error.title = err.status; callout.level = 'danger';
error.msg = err.message; callout.title = err.status;
error.hidden = false; callout.msg = err.message;
callout.hidden = false;
}); });
} else { } else {
$pocketbase $pocketbase
@@ -32,12 +42,48 @@
}) })
.catch((err) => { .catch((err) => {
authorizedStore.set(false); authorizedStore.set(false);
error.title = err.status; callout.level = 'danger';
error.msg = err.message; callout.title = err.status;
error.hidden = false; callout.msg = err.message;
callout.hidden = false;
}); });
} }
} }
async function register() {
if (password !== passwordConfirm) {
callout.level = 'danger';
callout.title = "Passwords don't match";
callout.msg = 'Please try again';
callout.hidden = false;
return;
} else {
callout.hidden = true;
}
$pocketbase.admins
.create({
email: username,
password: password,
passwordConfirm: passwordConfirm
})
.then(() => {
$pocketbase.admins
.authWithPassword(username, password)
.then(() => {
authorizedStore.set(true);
})
.catch((err) => {
return err;
});
})
.catch((err) => {
authorizedStore.set(false);
callout.level = 'danger';
callout.title = err.status;
callout.msg = err.message;
callout.hidden = false;
});
}
</script> </script>
<div class="container text-dark-emphasis"> <div class="container text-dark-emphasis">
@@ -50,54 +96,105 @@
alt={$settings_public.website_title ? $settings_public.website_title : 'UpSnap'} alt={$settings_public.website_title ? $settings_public.website_title : 'UpSnap'}
class="logo pe-none user-select-none" class="logo pe-none user-select-none"
/> />
<h2 class="text-dark-emphasis fw-bold text-center mt-3">Login</h2> <h2 class="text-dark-emphasis fw-bold text-center mt-3">
{$settings_public.setup_completed === true ? 'Login' : 'Register'}
</h2>
</div> </div>
</div> </div>
<div class="row justify-content-center align-items-center p-2"> <div class="row justify-content-center align-items-center p-2">
<div class="col-md-6 col-lg-5 p-4 login rounded-5 shadow-sm"> <div class="col-md-6 col-lg-5 p-4 login rounded-5 shadow-sm">
<form class="w-100" on:submit|preventDefault={login}> <div class="callout callout-{callout.level} mt-0" class:d-none={callout.hidden}>
<div class="mb-3"> {#if callout.title !== ''}
<label for="username" class="form-label">Username or email address</label> <h5>{callout.title}</h5>
<input {/if}
type="text" {#if callout.msg !== ''}
class="form-control" <p class="m-0">{callout.msg}</p>
id="username" {/if}
placeholder="user@example.com" </div>
bind:value={username} {#if $settings_public.setup_completed === true}
required <form class="w-100" on:submit|preventDefault={login}>
/> <div class="mb-3">
</div> <label for="username" class="form-label">Username or email</label>
<div class="mb-3"> <input
<label for="password" class="form-label">Password</label> type="text"
<input class="form-control"
type="password" id="username"
class="form-control" placeholder="user@example.com"
id="password" bind:value={username}
placeholder="secret-password" required
bind:value={password} />
required </div>
/> <div class="mb-3">
</div> <label for="password" class="form-label">Password</label>
<div class="form-check form-switch mb-3"> <input
<input type="password"
class="form-check-input" class="form-control"
type="checkbox" id="password"
role="switch" placeholder="secret-password"
id="flexSwitchCheckChecked" bind:value={password}
bind:checked={isAdmin} required
/> />
<label class="form-check-label" for="flexSwitchCheckChecked">Admin login</label> </div>
</div> <div class="form-check form-switch mb-3">
<div class="callout callout-danger" class:d-none={error.hidden}> <input
<h5>Error {error.title}</h5> class="form-check-input"
<p class="m-0">{error.msg}</p> type="checkbox"
</div> role="switch"
<button class="btn btn-secondary w-100" type="submit">Login</button> id="flexSwitchCheckChecked"
</form> bind:checked={isAdmin}
<p class="text-center m-0 mt-3"> />
<!-- hacky way of linking a non existing route in svelte --> <label class="form-check-label" for="flexSwitchCheckChecked"
<a href="/_/" rel="external" class="text-muted cursor-pointer">Manage users</a> >Admin login</label
</p> >
</div>
<button class="btn btn-secondary w-100" type="submit">Login</button>
</form>
<p class="text-center m-0 mt-3">
<!-- hacky way of linking a non existing route in svelte -->
<a href="/_/" rel="external" class="text-muted cursor-pointer">Manage users</a>
</p>
{:else}
<form class="w-100" on:submit|preventDefault={register}>
<div class="mb-3">
<label for="username" class="form-label">Email</label>
<input
type="email"
class="form-control"
id="username"
placeholder="user@example.com"
bind:value={username}
required
/>
</div>
<div class="mb-3">
<label for="password" class="form-label"
>Password (min. 10 characters)</label
>
<input
type="password"
class="form-control"
id="password"
placeholder="secret-password"
minlength="10"
bind:value={password}
required
/>
</div>
<div class="mb-3">
<label for="passwordConfirm" class="form-label">Password confirm</label>
<input
type="password"
class="form-control"
id="passwordConfirm"
placeholder="secret-password"
minlength="10"
bind:value={passwordConfirm}
required
/>
</div>
<button class="btn btn-secondary w-100" type="submit">Create and login</button>
</form>
{/if}
</div> </div>
</div> </div>
</div> </div>