mirror of
https://hacklab.nilfm.cc/felt
synced 2024-10-22 14:31:48 +00:00
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
|
package admin
|
||
|
|
||
|
import (
|
||
|
"json"
|
||
|
"net/http"
|
||
|
"nilfm.cc/git/felt/models"
|
||
|
"nilfm.cc/git/quartzgun/auth"
|
||
|
"nilfm.cc/git/quartzgun/cookie"
|
||
|
"nilfm.cc/git/quartzgun/indentalUserDB"
|
||
|
. "nilfm.cc/git/quartzgun/middleware"
|
||
|
"nilfm.cc/git/quartzgun/renderer"
|
||
|
"nilfm.cc/git/quartzgun/router"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func getUserFromToken(req *http.Request) string {
|
||
|
authHeader := req.Header.Get("Authorization")
|
||
|
if strings.HasPrefix(authHeader, "Bearer ") {
|
||
|
authToken := strings.Split(authHeader, "Bearer ")[1]
|
||
|
data, err := base64.StdEncoding.DecodeString(token)
|
||
|
if err == nil {
|
||
|
parts := strings.Split(string(data), "\n")
|
||
|
if len(parts) == 2 {
|
||
|
return parts[0]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func apiGetTableData(next http.Handler, udb auth.UserStore) http.Handler {
|
||
|
handlerFunc := func(w http.ResponseWriter, req *http.Request) {
|
||
|
|
||
|
// get username from
|
||
|
|
||
|
rawTableData, err := udb.GetData(user, "tables")
|
||
|
if err != nil {
|
||
|
// handle error - return 404 or 500?
|
||
|
}
|
||
|
|
||
|
// split rawTableData - tableName,passCode;tableName,passCode;
|
||
|
tables := strings.Split(rawTableData, ";")
|
||
|
self := make([]models.TableKey)
|
||
|
for _, t := range tables {
|
||
|
parts := strings.Split(t, ",")
|
||
|
if len(parts) == 2 {
|
||
|
self = append(self, models.TableKey{
|
||
|
Name: parts[0],
|
||
|
Passcode: parts[1],
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*req = *req.WithContext(context.WithValue(req.Context(), "tableData", self))
|
||
|
next.serveHTTP(w, req)
|
||
|
}
|
||
|
|
||
|
return handlerFunc
|
||
|
}
|
||
|
|
||
|
func CreateAdminInterface(udb auth.UserStore) http.Handler {
|
||
|
// create quartzgun router
|
||
|
rtr := &router.Router{}
|
||
|
|
||
|
rtr.Post("api/auth", Provision(udb, 84))
|
||
|
|
||
|
// initialize routes with admin interface
|
||
|
rtr.Get(`api/table/?P<Slug>\S+)`, Validate(apiGetTableData(renderer.JSON("tableData"), udb)))
|
||
|
|
||
|
return router.ServeHTTP
|
||
|
}
|