package admin import ( "context" "net/http" "nilfm.cc/git/felt/models" "nilfm.cc/git/felt/mongodb" "nilfm.cc/git/felt/admin/util" "nilfm.cc/git/quartzgun/auth" . "nilfm.cc/git/quartzgun/middleware" "nilfm.cc/git/quartzgun/renderer" "nilfm.cc/git/quartzgun/router" "strings" ) func apiGetTableList(next http.Handler, udb auth.UserStore) http.Handler { handlerFunc := func(w http.ResponseWriter, req *http.Request) { // get username from user := util.GetUserFromToken(req) 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.(string), ";") self := []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(), "tableList", self)) next.ServeHTTP(w, req) } 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) } func CreateAdminInterface(udb auth.UserStore, dbAdapter mongodb.DbAdapter) http.Handler { // create quartzgun router rtr := &router.Router{} scopes := map[string]string{} rtr.Post("api/auth", Provision(udb, 84)) rtr.Get(`api/table/`, Validate(apiGetTableList(renderer.JSON("tableList"), udb), udb, scopes)) rtr.Get(`api/table/(?P\S+)`, Validate(apiGetTableData(renderer.JSON("tableData"), udb, dbAdapter), udb, scopes)) return http.HandlerFunc(rtr.ServeHTTP) }