felt/admin/admin.go

70 lines
1.9 KiB
Go
Raw Normal View History

2022-12-22 04:45:15 +00:00
package admin
import (
2022-12-22 16:39:39 +00:00
"context"
2022-12-22 04:45:15 +00:00
"net/http"
"nilfm.cc/git/felt/models"
2022-12-22 16:39:39 +00:00
"nilfm.cc/git/felt/mongodb"
"nilfm.cc/git/felt/admin/util"
2022-12-22 04:45:15 +00:00
"nilfm.cc/git/quartzgun/auth"
. "nilfm.cc/git/quartzgun/middleware"
"nilfm.cc/git/quartzgun/renderer"
"nilfm.cc/git/quartzgun/router"
"strings"
)
2022-12-22 16:39:39 +00:00
func apiGetTableList(next http.Handler, udb auth.UserStore) http.Handler {
2022-12-22 04:45:15 +00:00
handlerFunc := func(w http.ResponseWriter, req *http.Request) {
// get username from
2022-12-22 16:39:39 +00:00
user := util.GetUserFromToken(req)
2022-12-22 04:45:15 +00:00
rawTableData, err := udb.GetData(user, "tables")
if err != nil {
// handle error - return 404 or 500?
}
// split rawTableData - tableName,passCode;tableName,passCode;
2022-12-22 16:39:39 +00:00
tables := strings.Split(rawTableData.(string), ";")
self := []models.TableKey{}
2022-12-22 04:45:15 +00:00
for _, t := range tables {
parts := strings.Split(t, ",")
if len(parts) == 2 {
self = append(self, models.TableKey{
Name: parts[0],
Passcode: parts[1],
})
}
}
2022-12-22 16:39:39 +00:00
*req = *req.WithContext(context.WithValue(req.Context(), "tableList", self))
next.ServeHTTP(w, req)
2022-12-22 04:45:15 +00:00
}
2022-12-22 16:39:39 +00:00
return http.HandlerFunc(handlerFunc)
}
func apiGetTableData(next http.Handler, udb auth.UserStore, dbAdapter mongodb.DbAdapter) http.Handler {
handlerFunc := func(w http.ResponseWriter, req *http.Request) {
// tableName := req.Context().Value("Slug")
// get table entities from mongodb and store the data object in the context
next.ServeHTTP(w, req)
}
return http.HandlerFunc(handlerFunc)
2022-12-22 04:45:15 +00:00
}
2022-12-22 16:39:39 +00:00
func CreateAdminInterface(udb auth.UserStore, dbAdapter mongodb.DbAdapter) http.Handler {
2022-12-22 04:45:15 +00:00
// create quartzgun router
rtr := &router.Router{}
2022-12-22 16:39:39 +00:00
scopes := map[string]string{}
2022-12-22 04:45:15 +00:00
rtr.Post("api/auth", Provision(udb, 84))
2022-12-22 16:39:39 +00:00
rtr.Get(`api/table/`, Validate(apiGetTableList(renderer.JSON("tableList"), udb), udb, scopes))
rtr.Get(`api/table/(?P<Slug>\S+)`, Validate(apiGetTableData(renderer.JSON("tableData"), udb, dbAdapter), udb, scopes))
2022-12-22 04:45:15 +00:00
2022-12-22 16:39:39 +00:00
return http.HandlerFunc(rtr.ServeHTTP)
2022-12-22 04:45:15 +00:00
}