From b96daa07c6af2d10a72233480c9299d6dbb56f41 Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Sun, 12 Dec 2021 01:57:54 +0800 Subject: [PATCH] Change: Update Database auth to user method --- pkg/api/handle_database_manage.go | 5 ++--- pkg/api/handle_error.go | 6 ++++++ pkg/api/handle_user.go | 23 +++++++++++++++++++++++ pkg/database/struct.go | 6 ++++++ web/src/component/Manage.js | 27 ++++++++++++++++++--------- 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/pkg/api/handle_database_manage.go b/pkg/api/handle_database_manage.go index 513081a..232e00d 100644 --- a/pkg/api/handle_database_manage.go +++ b/pkg/api/handle_database_manage.go @@ -6,7 +6,6 @@ import ( ) type WalkRequest struct { - Token string `json:"token"` Root string `json:"root"` Pattern []string `json:"pattern"` } @@ -24,7 +23,7 @@ func (api *API) HandleReset(w http.ResponseWriter, r *http.Request) { } // check token - err = api.CheckToken(w, r, resetRequest.Token) + err = api.CheckAdmin(w, r) if err != nil { return } @@ -53,7 +52,7 @@ func (api *API) HandleWalk(w http.ResponseWriter, r *http.Request) { } // check token match - err = api.CheckToken(w, r, walkRequest.Token) + err = api.CheckAdmin(w, r) if err != nil { return } diff --git a/pkg/api/handle_error.go b/pkg/api/handle_error.go index 818eca9..320d4d3 100644 --- a/pkg/api/handle_error.go +++ b/pkg/api/handle_error.go @@ -4,6 +4,12 @@ import ( "encoding/json" "log" "net/http" + "errors" +) + +var ( + ErrNotLoggedIn = errors.New("not logged in") + ErrNotAdmin = errors.New("not admin") ) type Error struct { diff --git a/pkg/api/handle_user.go b/pkg/api/handle_user.go index 121d06d..7fe1bc6 100644 --- a/pkg/api/handle_user.go +++ b/pkg/api/handle_user.go @@ -143,3 +143,26 @@ func (api *API) HandleRegister(w http.ResponseWriter, r *http.Request) { return } } + +func (api *API) CheckAdmin(w http.ResponseWriter, r *http.Request) error { + session, _ := api.store.Get(r, api.defaultSessionName) + userId, ok := session.Values["userId"] + if !ok { + api.HandleError(w, r, ErrNotLoggedIn) + return ErrNotLoggedIn + } + + user, err := api.Db.GetUserById(userId.(int64)) + if err != nil { + api.HandleError(w, r, err) + return err + } + + if user.Role != database.RoleAdmin { + api.HandleError(w, r, ErrNotAdmin) + return ErrNotAdmin + } + + w.WriteHeader(http.StatusOK) + return nil +} diff --git a/pkg/database/struct.go b/pkg/database/struct.go index f4c56dc..c7d92ee 100644 --- a/pkg/database/struct.go +++ b/pkg/database/struct.go @@ -28,6 +28,12 @@ type User struct { AvatarId int64 `json:"avatar_id"` } +var ( + RoleAnonymous = int64(0) + RoleAdmin = int64(1) + RoleUser = int64(2) +) + func (f *File) Path() (string, error) { folder, err := f.Db.GetFolder(f.Folder_id) if err != nil { diff --git a/web/src/component/Manage.js b/web/src/component/Manage.js index f2304ae..1b55f4f 100644 --- a/web/src/component/Manage.js +++ b/web/src/component/Manage.js @@ -4,19 +4,27 @@ import { useNavigate } from "react-router"; function Manage(props) { let navigate = useNavigate(); - const [token, setToken] = useState(""); const [walkPath, setWalkPath] = useState(""); + const [patternString, setPatternString] = useState(""); function updateDatabase() { + // split pattern string into array + let patternArray = patternString.split(" "); + // remove whitespace from array + patternArray = patternArray.map((item) => item.trim()); + // remove empty strings from array + patternArray = patternArray.filter((item) => item !== ""); + // add dot before item array + patternArray = patternArray.map((item) => "." + item); + fetch("/api/v1/walk", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ - token: token, root: walkPath, - pattern: [".wav", ".mp3"], + pattern: patternArray }), }) .then((res) => res.json()) @@ -56,18 +64,19 @@ function Manage(props) { )}
- setToken(e.target.value)} - /> +

Update Database

setWalkPath(e.target.value)} /> + setPatternString(e.target.value)} + />