diff options
Diffstat (limited to 'route/routes')
-rw-r--r-- | route/routes/actor.go | 8 | ||||
-rw-r--r-- | route/routes/boardmgmt.go | 124 |
2 files changed, 127 insertions, 5 deletions
diff --git a/route/routes/actor.go b/route/routes/actor.go index e27133b..e1372ee 100644 --- a/route/routes/actor.go +++ b/route/routes/actor.go @@ -21,6 +21,7 @@ import ( func ActorInbox(ctx *fiber.Ctx) error { activity, err := activitypub.GetActivityFromJson(ctx) + if err != nil { return util.MakeError(err, "ActorInbox") } @@ -380,8 +381,8 @@ func ActorPost(ctx *fiber.Ctx) error { } func ActorPostGet(ctx *fiber.Ctx) error { - actor, err := activitypub.GetActorByNameFromDB(ctx.Params("actor")) + if err != nil { return nil } @@ -428,8 +429,9 @@ func ActorPostGet(ctx *fiber.Ctx) error { } else { obj := activitypub.ObjectBase{Id: inReplyTo} collection, err := obj.GetCollectionFromPath() + if err != nil { - return util.MakeError(err, "PostGet") + return ctx.Status(404).Render("404", fiber.Map{}) } if collection.Actor.Id != "" { @@ -560,7 +562,7 @@ func ActorOutboxGet(ctx *fiber.Ctx) error { actor, err := activitypub.GetActorByNameFromDB(ctx.Params("actor")) if err != nil { - return nil + return ctx.Status(404).Render("404", fiber.Map{}) } if activitypub.AcceptActivity(ctx.Get("Accept")) { 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 { |