Change: Update Database auth to user method

This commit is contained in:
2021-12-12 01:57:54 +08:00
parent 1f960f8f64
commit b96daa07c6
5 changed files with 55 additions and 12 deletions

View File

@@ -6,7 +6,6 @@ import (
) )
type WalkRequest struct { type WalkRequest struct {
Token string `json:"token"`
Root string `json:"root"` Root string `json:"root"`
Pattern []string `json:"pattern"` Pattern []string `json:"pattern"`
} }
@@ -24,7 +23,7 @@ func (api *API) HandleReset(w http.ResponseWriter, r *http.Request) {
} }
// check token // check token
err = api.CheckToken(w, r, resetRequest.Token) err = api.CheckAdmin(w, r)
if err != nil { if err != nil {
return return
} }
@@ -53,7 +52,7 @@ func (api *API) HandleWalk(w http.ResponseWriter, r *http.Request) {
} }
// check token match // check token match
err = api.CheckToken(w, r, walkRequest.Token) err = api.CheckAdmin(w, r)
if err != nil { if err != nil {
return return
} }

View File

@@ -4,6 +4,12 @@ import (
"encoding/json" "encoding/json"
"log" "log"
"net/http" "net/http"
"errors"
)
var (
ErrNotLoggedIn = errors.New("not logged in")
ErrNotAdmin = errors.New("not admin")
) )
type Error struct { type Error struct {

View File

@@ -143,3 +143,26 @@ func (api *API) HandleRegister(w http.ResponseWriter, r *http.Request) {
return 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
}

View File

@@ -28,6 +28,12 @@ type User struct {
AvatarId int64 `json:"avatar_id"` AvatarId int64 `json:"avatar_id"`
} }
var (
RoleAnonymous = int64(0)
RoleAdmin = int64(1)
RoleUser = int64(2)
)
func (f *File) Path() (string, error) { func (f *File) Path() (string, error) {
folder, err := f.Db.GetFolder(f.Folder_id) folder, err := f.Db.GetFolder(f.Folder_id)
if err != nil { if err != nil {

View File

@@ -4,19 +4,27 @@ import { useNavigate } from "react-router";
function Manage(props) { function Manage(props) {
let navigate = useNavigate(); let navigate = useNavigate();
const [token, setToken] = useState("");
const [walkPath, setWalkPath] = useState(""); const [walkPath, setWalkPath] = useState("");
const [patternString, setPatternString] = useState("");
function updateDatabase() { 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", { fetch("/api/v1/walk", {
method: "POST", method: "POST",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify({ body: JSON.stringify({
token: token,
root: walkPath, root: walkPath,
pattern: [".wav", ".mp3"], pattern: patternArray
}), }),
}) })
.then((res) => res.json()) .then((res) => res.json())
@@ -56,18 +64,19 @@ function Manage(props) {
</button> </button>
)} )}
<hr /> <hr />
<input <h3>Update Database</h3>
type="text"
value={token}
placeholder="token"
onChange={(e) => setToken(e.target.value)}
/>
<input <input
type="text" type="text"
value={walkPath} value={walkPath}
placeholder="walk path" placeholder="walk path"
onChange={(e) => setWalkPath(e.target.value)} onChange={(e) => setWalkPath(e.target.value)}
/> />
<input
type="text"
value={patternString}
placeholder="pattern wav flac mp3"
onChange={(e) => setPatternString(e.target.value)}
/>
<button <button
onClick={() => { onClick={() => {
updateDatabase(); updateDatabase();