From 50ea1c2b125b01fe8d1f6c7574dffa4aa97665da Mon Sep 17 00:00:00 2001 From: Derek Stevens Date: Wed, 25 Jan 2023 22:57:31 -0700 Subject: [PATCH] doing a bit of work on this, we can do admin login now ayyy --- .gitignore | 1 + admin/admin.go | 3 ++- gametable/server.go | 5 +++-- main.go | 2 ++ static/admin.js | 36 ++++++++++++++++++++++++++++++++++++ static/error.html | 8 ++++++++ static/index.html | 11 +++++++++-- 7 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 static/admin.js create mode 100644 static/error.html diff --git a/.gitignore b/.gitignore index 94d6a35..c8777d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ felt +user.db mongodb/data/* mongodb/.env \ No newline at end of file diff --git a/admin/admin.go b/admin/admin.go index becf3c4..b5285f8 100644 --- a/admin/admin.go +++ b/admin/admin.go @@ -1,6 +1,7 @@ package admin import ( + "html/template" "net/http" "nilfm.cc/git/felt/admin/util" "nilfm.cc/git/felt/models" @@ -145,7 +146,7 @@ func apiDestroyTable(next http.Handler, udb auth.UserStore, dbAdapter mongodb.Db func CreateAdminInterface(udb auth.UserStore, dbAdapter mongodb.DbAdapter) http.Handler { // create quartzgun router - rtr := &router.Router{} + rtr := &router.Router{ Fallback: *template.Must(template.ParseFiles("static/error.html")) } scopes := map[string]string{} diff --git a/gametable/server.go b/gametable/server.go index 7461517..a6cdd82 100644 --- a/gametable/server.go +++ b/gametable/server.go @@ -13,6 +13,7 @@ import ( "nilfm.cc/git/felt/mongodb" "nilfm.cc/git/quartzgun/auth" "nilfm.cc/git/quartzgun/cookie" + "nilfm.cc/git/quartzgun/renderer" "sync" "time" ) @@ -40,8 +41,8 @@ func New(adapter mongodb.DbAdapter, udb auth.UserStore) *GameTableServer { publishLimiter: rate.NewLimiter(rate.Every(time.Millisecond*100), 8), dbAdapter: adapter, } - srvr.serveMux.Handle("/table/", http.FileServer(http.Dir("./static"))) - srvr.serveMux.Handle("/admin/", admin.CreateAdminInterface(udb, adapter)) + srvr.serveMux.Handle("/table/", http.StripPrefix("/table/", renderer.Subtree("./static"))) + srvr.serveMux.Handle("/admin/", http.StripPrefix("/admin", admin.CreateAdminInterface(udb, adapter))) srvr.serveMux.HandleFunc("/subscribe", srvr.subscribeHandler) srvr.serveMux.HandleFunc("/publish", srvr.publishHandler) diff --git a/main.go b/main.go index 848d342..46c434f 100644 --- a/main.go +++ b/main.go @@ -34,6 +34,8 @@ func run() error { udb := indentalUserDB.CreateIndentalUserDB( "./user.db") + + udb.AddUser("nilix", "questing") gt := gametable.New(dbEngine, udb) s := &http.Server{ diff --git a/static/admin.js b/static/admin.js new file mode 100644 index 0000000..a2ad7f8 --- /dev/null +++ b/static/admin.js @@ -0,0 +1,36 @@ +let adminToken = null; + +async function doLogin() { + const adminUsrInput = document.getElementById("input_admin_usr"); + const adminPassInput = document.getElementById("input_admin_pass"); + const errDiv = document.getElementById("loginErr"); + + if (adminUsrInput && adminPassInput) { + adminToken = await getAdminToken(adminUsrInput.value, adminPassInput.value); + if (adminToken) { + // render admin interface + } else { + if (errDiv) { + errDiv.innerHTML = "Incorrect credentials"; + } + } + } +} + +async function getAdminToken(user, pass) { + const headers = new Headers(); + headers.set('Authorization', 'Basic ' + btoa(user + ":" + pass)); + try { + const res = await fetch('/admin/api/auth/', { + method: 'POST', + headers: headers + }); + + if (res.ok) { + return await res.json(); + } + return null; + } catch (err) { + return null; + } +} diff --git a/static/error.html b/static/error.html new file mode 100644 index 0000000..9c37a22 --- /dev/null +++ b/static/error.html @@ -0,0 +1,8 @@ +{{ $params := (.Context).Value "params" }} + + + +

ERR {{ $params.ErrorCode }}

+

{{ $params.ErrorMessage }}

+ + \ No newline at end of file diff --git a/static/index.html b/static/index.html index 78c696e..df56178 100644 --- a/static/index.html +++ b/static/index.html @@ -4,7 +4,9 @@ Felt - + + + -
+
+ + + +
+