diff --git a/api/api.go b/api/api.go index c20041e..7266ddb 100644 --- a/api/api.go +++ b/api/api.go @@ -132,6 +132,8 @@ func HandleAPI(w http.ResponseWriter, r *http.Request) { switch req.Method { case "report_activity": ReportActivity(w, conn, req, user) + case "mark_posted": + MarkPosted(w, conn, req, user) default: jsonRPCErr(w, -32601, "Method not found", req.ID) } diff --git a/api/mark_posted.go b/api/mark_posted.go new file mode 100644 index 0000000..1981d51 --- /dev/null +++ b/api/mark_posted.go @@ -0,0 +1,41 @@ +package api + +import ( + "database/sql" + "encoding/json" + "net/http" + + "faculty_media_report/dbi" +) + +type markPostedParams struct { + UID string `json:"uid"` +} + +func MarkPosted(w http.ResponseWriter, conn *sql.Conn, req jsonRPCRequest, user dbi.User) { + if user.Status != "admin" { + jsonRPCErr(w, -32000, "Forbidden", req.ID) + return + } + + var params markPostedParams + if err := json.Unmarshal(req.Params, ¶ms); err != nil { + jsonRPCErr(w, -32602, "Invalid params", req.ID) + return + } + if params.UID == "" { + jsonRPCErr(w, -32602, "Invalid params: uid is required", req.ID) + return + } + + if err := dbi.MarkPosted(conn, params.UID); err != nil { + jsonRPCErr(w, -32603, "Internal error", req.ID) + return + } + + writeJSONRPC(w, jsonRPCResponse{ + Jsonrpc: "2.0", + Result: true, + ID: req.ID, + }) +} diff --git a/main.go b/main.go index 581460d..edaa7df 100644 --- a/main.go +++ b/main.go @@ -61,12 +61,17 @@ func handleLoginPost(w http.ResponseWriter, r *http.Request) { } if user.Status == "admin" { + token, err := dbi.GenJWT(user) + if err != nil { + fail() + return + } items, err := dbi.GetReportedItems(conn) if err != nil { fail() return } - html, err := pages.DashboardPage(items) + html, err := pages.DashboardPage(token, items) if err != nil { fail() return diff --git a/pages/dashboard.go b/pages/dashboard.go index 9d40550..991be2d 100644 --- a/pages/dashboard.go +++ b/pages/dashboard.go @@ -7,6 +7,11 @@ import ( "faculty_media_report/dbi" ) +type dashboardData struct { + JWT string + Items []dbi.DashboardItem +} + var dashboardTmpl = template.Must(template.New("dashboard").Parse(`
@@ -14,6 +19,7 @@ var dashboardTmpl = template.Must(template.New("dashboard").Parse(`