From 0fe34ddb610e62b6b4f85d5a7d1636e2525c17f2 Mon Sep 17 00:00:00 2001
From: Joshua Herring
Date: Thu, 28 May 2026 15:21:47 -0400
Subject: [PATCH] add mark_posted
---
api/api.go | 2 ++
api/mark_posted.go | 41 +++++++++++++++++++++++++++++++++++++++++
main.go | 7 ++++++-
pages/dashboard.go | 46 ++++++++++++++++++++++++++++++++++++++++------
4 files changed, 89 insertions(+), 7 deletions(-)
create mode 100644 api/mark_posted.go
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(`
Dashboard — Maurer School of Law
+
{{end}}
+