aboutsummaryrefslogtreecommitdiff
path: root/route/routes/boardmgmt.go
diff options
context:
space:
mode:
Diffstat (limited to 'route/routes/boardmgmt.go')
-rw-r--r--route/routes/boardmgmt.go124
1 files changed, 122 insertions, 2 deletions
diff --git a/route/routes/boardmgmt.go b/route/routes/boardmgmt.go
index 15b2686..fb577f3 100644
--- a/route/routes/boardmgmt.go
+++ b/route/routes/boardmgmt.go
@@ -1,13 +1,133 @@
package routes
-import "github.com/gofiber/fiber/v2"
+import (
+ "net/http"
+
+ "github.com/FChannel0/FChannel-Server/activitypub"
+ "github.com/FChannel0/FChannel-Server/config"
+ "github.com/FChannel0/FChannel-Server/util"
+ "github.com/gofiber/fiber/v2"
+)
func BoardBanMedia(ctx *fiber.Ctx) error {
return ctx.SendString("board ban media")
}
func BoardDelete(ctx *fiber.Ctx) error {
- return ctx.SendString("board delete")
+ id := ctx.Query("id")
+ board := ctx.Query("board")
+
+ _, auth := util.GetPasswordFromSession(ctx)
+
+ if id == "" || auth == "" {
+ ctx.Response().Header.SetStatusCode(http.StatusBadRequest)
+
+ _, err := ctx.Write([]byte("id or auth empty"))
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ activity := activitypub.Activity{Id: id}
+ col, err := activity.GetCollection()
+
+ if err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ if len(col.OrderedItems) < 1 {
+ actor, err := activitypub.GetActorByNameFromDB(board)
+
+ if err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ if has, _ := util.HasAuth(auth, actor.Id); !has {
+ ctx.Response().Header.SetStatusCode(http.StatusBadRequest)
+
+ _, err := ctx.Write([]byte("does not have auth"))
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ obj := activitypub.ObjectBase{Id: id}
+ isOP, _ := obj.CheckIfOP()
+
+ if !isOP {
+ if err := obj.Tombstone(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+ } else {
+ if err := obj.TombstoneReplies(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+ }
+
+ if err := actor.UnArchiveLast(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ if ctx.Query("manage") == "t" {
+ return ctx.Redirect("/"+config.Key+"/"+board, http.StatusSeeOther)
+ }
+
+ return ctx.Redirect("/"+board, http.StatusSeeOther)
+ }
+
+ actorID := col.OrderedItems[0].Actor
+
+ if has, _ := util.HasAuth(auth, actorID); !has {
+ ctx.Response().Header.SetStatusCode(http.StatusBadRequest)
+
+ _, err := ctx.Write([]byte("does not have auth"))
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ var obj activitypub.ObjectBase
+ obj.Id = id
+ obj.Actor = actorID
+
+ isOP, _ := obj.CheckIfOP()
+
+ var OP string
+
+ if len(col.OrderedItems[0].InReplyTo) > 0 {
+ OP = col.OrderedItems[0].InReplyTo[0].Id
+ }
+
+ if !isOP {
+ if err := obj.Tombstone(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+ } else {
+ if err := obj.TombstoneReplies(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+ }
+
+ if local, _ := obj.IsLocal(); !local {
+ if err := obj.DeleteRequest(); err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+ }
+
+ actor := activitypub.Actor{Id: actorID}
+ err = actor.UnArchiveLast()
+
+ if err != nil {
+ return util.MakeError(err, "BoardDelete")
+ }
+
+ if ctx.Query("manage") == "t" {
+ return ctx.Redirect("/"+config.Key+"/"+board, http.StatusSeeOther)
+ }
+
+ if !isOP {
+ if local, _ := obj.IsLocal(); !local {
+ return ctx.Redirect("/"+board+"/"+util.RemoteShort(OP), http.StatusSeeOther)
+ } else {
+ return ctx.Redirect(OP, http.StatusSeeOther)
+ }
+ }
+
+ return ctx.Redirect("/"+board, http.StatusSeeOther)
}
func BoardDeleteAttach(ctx *fiber.Ctx) error {