From 5cff4d3740eb8b9f67de9713124e84109d04cff8 Mon Sep 17 00:00:00 2001 From: FChannel <> Date: Mon, 13 Jun 2022 17:58:26 -0700 Subject: admin reported management improvements --- db/report.go | 19 +++++++++++++++++++ route/routes/admin.go | 39 ++++++++++++++++++++++++++++++++++++--- route/routes/api.go | 2 +- route/structs.go | 1 - route/util.go | 7 +++++++ views/admin.html | 25 ++++++++++++++++++++++++- views/manage.html | 9 ++++++--- 7 files changed, 93 insertions(+), 9 deletions(-) diff --git a/db/report.go b/db/report.go index f5569fd..52e303a 100644 --- a/db/report.go +++ b/db/report.go @@ -1,6 +1,7 @@ package db import ( + "github.com/FChannel0/FChannel-Server/activitypub" "github.com/FChannel0/FChannel-Server/config" "github.com/FChannel0/FChannel-Server/util" ) @@ -8,6 +9,9 @@ import ( type Reports struct { ID string Count int + Actor activitypub.Actor + Object activitypub.ObjectBase + OP string Reason []string } @@ -102,12 +106,27 @@ func GetLocalReport(board string) (map[string]Reports, error) { continue } + var obj = activitypub.ObjectBase{Id: r.ID} + + col, _ := obj.GetCollectionFromPath() + + OP, _ := obj.GetOP() + reported[r.ID] = Reports{ ID: r.ID, Count: 1, + Object: col.OrderedItems[0], + OP: OP, + Actor: activitypub.Actor{Name: board, Outbox: config.Domain + "/" + board + "/outbox"}, Reason: []string{r.Reason}, } } return reported, nil } + +type ReportsSortDesc []Reports + +func (a ReportsSortDesc) Len() int { return len(a) } +func (a ReportsSortDesc) Less(i, j int) bool { return a[i].Object.Updated.After(a[j].Object.Updated) } +func (a ReportsSortDesc) Swap(i, j int) { a[i], a[j] = a[j], a[i] } diff --git a/route/routes/admin.go b/route/routes/admin.go index 1576a3a..a2b4ad5 100644 --- a/route/routes/admin.go +++ b/route/routes/admin.go @@ -6,6 +6,8 @@ import ( "errors" "io/ioutil" "net/http" + "regexp" + "sort" "time" "github.com/FChannel0/FChannel-Server/activitypub" @@ -119,6 +121,24 @@ func AdminIndex(ctx *fiber.Ctx) error { var adminData route.AdminPage adminData.Following = following adminData.Followers = followers + + var reported = make(map[string][]db.Reports) + + for _, e := range following { + re := regexp.MustCompile(`.*/(.+)$`) + boards := re.FindStringSubmatch(e) + reports, _ := db.GetLocalReport(boards[1]) + + for _, k := range reports { + reported[k.Actor.Name] = append(reported[k.Actor.Name], k) + } + } + + for k, e := range reported { + sort.Sort(db.ReportsSortDesc(e)) + reported[k] = e + } + adminData.Actor = actor.Id adminData.Key = config.Key adminData.Domain = config.Domain @@ -140,7 +160,8 @@ func AdminIndex(ctx *fiber.Ctx) error { adminData.Themes = &config.Themes return ctx.Render("admin", fiber.Map{ - "page": adminData, + "page": adminData, + "reports": reported, }, "layouts/main") } @@ -248,10 +269,21 @@ func AdminActorIndex(ctx *fiber.Ctx) error { data.Following = following data.Followers = followers - data.Reported, _ = db.GetLocalReport(actor.Name) + + reports, _ := db.GetLocalReport(actor.Name) + + var reported = make(map[string][]db.Reports) + for _, k := range reports { + reported[k.Actor.Name] = append(reported[k.Actor.Name], k) + } + + for k, e := range reported { + sort.Sort(db.ReportsSortDesc(e)) + reported[k] = e + } + data.Domain = config.Domain data.IsLocal, _ = actor.IsLocal() - data.Title = "Manage /" + actor.Name + "/" data.Boards = webfinger.Boards data.Board.Name = actor.Name @@ -286,6 +318,7 @@ func AdminActorIndex(ctx *fiber.Ctx) error { return ctx.Render("manage", fiber.Map{ "page": data, "jannies": jannies, + "reports": reported, }, "layouts/main") } diff --git a/route/routes/api.go b/route/routes/api.go index 49c2623..70607e9 100644 --- a/route/routes/api.go +++ b/route/routes/api.go @@ -30,7 +30,7 @@ func RouteImages(ctx *fiber.Ctx, media string) error { resp, err := client.Do(req) if err != nil { - return util.MakeError(err, "RouteImages") + return nil } defer resp.Body.Close() diff --git a/route/structs.go b/route/structs.go index 601943c..17deb25 100644 --- a/route/structs.go +++ b/route/structs.go @@ -38,7 +38,6 @@ type AdminPage struct { Boards []webfinger.Board Following []string Followers []string - Reported map[string]db.Reports Domain string IsLocal bool PostBlacklist []util.PostBlacklist diff --git a/route/util.go b/route/util.go index 131cf5a..74926b4 100644 --- a/route/util.go +++ b/route/util.go @@ -374,6 +374,13 @@ func TemplateFunctions(engine *html.Engine) { return returnString }) + engine.AddFunc("parseLinkTitle", func(board string, op string, content string) string { + nContent := post.ParseLinkTitle(board, op, content) + nContent = strings.ReplaceAll(nContent, `/\<`, ">") + + return nContent + }) + engine.AddFunc("parseLink", func(board activitypub.Actor, link string) string { var obj = activitypub.ObjectBase{ Id: link, diff --git a/views/admin.html b/views/admin.html index 2b733b5..3444657 100644 --- a/views/admin.html +++ b/views/admin.html @@ -14,10 +14,10 @@ @@ -45,6 +45,29 @@ +
+

Reported

+ +
+

Create News

diff --git a/views/manage.html b/views/manage.html index e51644e..7db9d01 100644 --- a/views/manage.html +++ b/views/manage.html @@ -47,9 +47,11 @@

Reported

-- cgit v1.2.3