aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activitypub/object.go30
-rw-r--r--main.go3
-rw-r--r--route/routes/actor.go8
-rw-r--r--route/routes/boardmgmt.go124
4 files changed, 144 insertions, 21 deletions
diff --git a/activitypub/object.go b/activitypub/object.go
index 59ea904..f2241b7 100644
--- a/activitypub/object.go
+++ b/activitypub/object.go
@@ -44,10 +44,10 @@ func (obj ObjectBase) CreateActivity(activityType string) (Activity, error) {
}
func (obj ObjectBase) CheckIfOP() (bool, error) {
- var count int
+ var id string
query := `select id from replies where inreplyto='' and id=$1 `
- if err := config.DB.QueryRow(query, obj.Id).Scan(&count); err != nil {
+ if err := config.DB.QueryRow(query, obj.Id).Scan(&id); err != nil {
return false, nil
}
@@ -144,13 +144,13 @@ func (obj ObjectBase) DeleteAttachmentFromFile() error {
query := `select href from activitystream where id in (select attachment from activitystream where id=$1)`
if err := config.DB.QueryRow(query, obj.Id).Scan(&href); err != nil {
- return util.MakeError(err, "DeleteAttachmentFromFile")
+ return nil
}
href = strings.Replace(href, config.Domain+"/", "", 1)
if href != "static/notfound.png" {
if _, err := os.Stat(href); err != nil {
- return util.MakeError(err, "DeleteAttachmentFromFile")
+ return nil
}
return os.Remove(href)
}
@@ -177,13 +177,13 @@ func (obj ObjectBase) DeletePreviewFromFile() error {
query := `select href from activitystream where id in (select preview from activitystream where id=$1)`
if err := config.DB.QueryRow(query, obj.Id).Scan(&href); err != nil {
- return util.MakeError(err, "DeletePreviewFromFile")
+ return nil
}
href = strings.Replace(href, config.Domain+"/", "", 1)
if href != "static/notfound.png" {
if _, err := os.Stat(href); err != nil {
- return util.MakeError(err, "DeletePreviewFromFile")
+ return nil
}
return os.Remove(href)
}
@@ -261,9 +261,11 @@ func (obj ObjectBase) DeleteRequest() error {
if err != nil {
return util.MakeError(err, "DeleteRequest")
}
+
activity.Actor = &actor
objActor, _ := GetActor(nObj.Actor)
followers, err := objActor.GetFollower()
+
if err != nil {
return util.MakeError(err, "DeleteRequest")
}
@@ -418,9 +420,11 @@ func (obj ObjectBase) GetCollectionFromPath() (Collection, error) {
post.Actor = actor.Id
- post.Replies, post.Replies.TotalItems, post.Replies.TotalImgs, err = post.GetReplies()
+ if post.InReplyTo, err = post.GetInReplyTo(); err != nil {
+ return nColl, util.MakeError(err, "GetCollectionFromPath")
+ }
- if err != nil {
+ if post.Replies, post.Replies.TotalItems, post.Replies.TotalImgs, err = post.GetReplies(); err != nil {
return nColl, util.MakeError(err, "GetCollectionFromPath")
}
@@ -505,7 +509,7 @@ func (obj ObjectBase) GetRepliesCount() (int, int, error) {
query := `select count(x.id) over(), sum(case when RTRIM(x.attachment) = '' then 0 else 1 end) over() from (select id, attachment from activitystream where id in (select id from replies where inreplyto=$1) and type='Note' union select id, attachment from cacheactivitystream where id in (select id from replies where inreplyto=$1) and type='Note') as x`
if err := config.DB.QueryRow(query, obj.Id).Scan(&countId, &countImg); err != nil {
- return 0, 0, util.MakeError(err, "GetRepliesCount")
+ return 0, 0, nil
}
return countId, countImg, nil
@@ -887,7 +891,7 @@ func (obj ObjectBase) TombstoneAttachmentReplies() error {
query := `select id from activitystream where id in (select id from replies where inreplyto=$1)`
if err := config.DB.QueryRow(query, obj.Id).Scan(&attachment.Id); err != nil {
- return util.MakeError(err, "TombstoneAttachmentReplies")
+ return nil
}
if err := attachment.DeleteAttachmentFromFile(); err != nil {
@@ -918,8 +922,8 @@ func (obj ObjectBase) TombstonePreviewReplies() error {
var attachment ObjectBase
query := `select id from activitystream where id in (select id from replies where inreplyto=$1)`
- if err := config.DB.QueryRow(query, obj.Id).Scan(&attachment); err != nil {
- return util.MakeError(err, "TombstonePreviewReplies")
+ if err := config.DB.QueryRow(query, obj.Id).Scan(&attachment.Id); err != nil {
+ return nil
}
if err := attachment.DeletePreviewFromFile(); err != nil {
@@ -1005,7 +1009,7 @@ func (obj ObjectBase) TombstoneReplies() error {
return util.MakeError(err, "TombstoneReplies")
}
- return nil
+ return obj.Tombstone()
}
func (obj ObjectBase) _TombstoneReplies() error {
diff --git a/main.go b/main.go
index 0caa138..e08af88 100644
--- a/main.go
+++ b/main.go
@@ -15,8 +15,6 @@ import (
"github.com/gofiber/fiber/v2/middleware/encryptcookie"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/template/html"
-
- _ "github.com/lib/pq"
)
func main() {
@@ -156,5 +154,4 @@ func Init() {
go util.MakeCaptchas(100)
go db.CheckInactive()
-
}
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 {