aboutsummaryrefslogtreecommitdiff
path: root/routes/actor.go
diff options
context:
space:
mode:
Diffstat (limited to 'routes/actor.go')
-rw-r--r--routes/actor.go377
1 files changed, 0 insertions, 377 deletions
diff --git a/routes/actor.go b/routes/actor.go
deleted file mode 100644
index 4f848f1..0000000
--- a/routes/actor.go
+++ /dev/null
@@ -1,377 +0,0 @@
-package routes
-
-import (
- "bytes"
- "errors"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
-
- "github.com/FChannel0/FChannel-Server/activitypub"
- "github.com/FChannel0/FChannel-Server/config"
- "github.com/FChannel0/FChannel-Server/post"
- "github.com/FChannel0/FChannel-Server/util"
- "github.com/FChannel0/FChannel-Server/webfinger"
- "github.com/gofiber/fiber/v2"
-)
-
-func ActorInbox(ctx *fiber.Ctx) error {
- activity, err := activitypub.GetActivityFromJson(ctx)
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if activity.Actor.PublicKey.Id == "" {
- nActor, err := activitypub.FingerActor(activity.Actor.Id)
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- activity.Actor = &nActor
- }
-
- if !activity.Actor.VerifyHeaderSignature(ctx) {
- response := activity.Reject()
- return response.MakeRequestInbox()
- }
-
- switch activity.Type {
- case "Create":
- for _, e := range activity.To {
- actor := activitypub.Actor{Id: e}
- if res, err := actor.IsLocal(); err == nil && res {
- if res, err := activity.Actor.IsLocal(); err == nil && res {
- reqActivity := activitypub.Activity{Id: activity.Object.Id}
- col, err := reqActivity.GetCollection()
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if len(col.OrderedItems) < 1 {
- break
- }
-
- if err := activity.Object.WriteCache(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- actor, err := activitypub.GetActorFromDB(e)
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if err := actor.ArchivePosts(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- //SendToFollowers(e, activity)
- } else if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- } else if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- }
-
- break
-
- case "Delete":
- for _, e := range activity.To {
- actor, err := activitypub.GetActorFromDB(e)
- if err != nil {
- return util.MakeError(err, "")
- }
-
- if actor.Id != "" && actor.Id != config.Domain {
- if activity.Object.Replies.OrderedItems != nil {
- for _, k := range activity.Object.Replies.OrderedItems {
- if err := k.Tombstone(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- }
- }
-
- if err := activity.Object.Tombstone(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- if err := actor.UnArchiveLast(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- break
- }
- }
- break
-
- case "Follow":
- for _, e := range activity.To {
- if _, err := activitypub.GetActorFromDB(e); err == nil {
- response := activity.AcceptFollow()
- response, err := response.SetActorFollower()
-
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if err := response.MakeRequestInbox(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- alreadyFollowing, err := response.Actor.IsAlreadyFollowing(response.Object.Id)
-
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- objActor, err := activitypub.FingerActor(response.Object.Actor)
-
- if err != nil || objActor.Id == "" {
- return util.MakeError(err, "ActorInbox")
- }
-
- reqActivity := activitypub.Activity{Id: objActor.Following}
- remoteActorFollowingCol, err := reqActivity.GetCollection()
-
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- alreadyFollow := false
-
- for _, e := range remoteActorFollowingCol.Items {
- if e.Id == response.Actor.Id {
- alreadyFollowing = true
- }
- }
-
- autoSub, err := response.Actor.GetAutoSubscribe()
-
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if autoSub && !alreadyFollow && alreadyFollowing {
- followActivity, err := response.Actor.MakeFollowActivity(response.Object.Actor)
-
- if err != nil {
- return util.MakeError(err, "ActorInbox")
- }
-
- if err := followActivity.MakeRequestOutbox(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- }
- } else if err != nil {
- return util.MakeError(err, "ActorInbox")
- } else {
- config.Log.Println("follow request for rejected")
- response := activity.Reject()
- return response.MakeRequestInbox()
- }
- }
- break
-
- case "Reject":
- if activity.Object.Object.Type == "Follow" {
- config.Log.Println("follow rejected")
- if _, err := activity.SetActorFollowing(); err != nil {
- return util.MakeError(err, "ActorInbox")
- }
- }
- break
- }
-
- return nil
-}
-
-func ActorOutbox(ctx *fiber.Ctx) error {
- //var activity activitypub.Activity
- actor, err := webfinger.GetActorFromPath(ctx.Path(), "/")
- if err != nil {
- return util.MakeError(err, "ActorOutbox")
- }
-
- if activitypub.AcceptActivity(ctx.Get("Accept")) {
- actor.GetOutbox(ctx)
- return nil
- }
-
- return ParseOutboxRequest(ctx, actor)
-}
-
-func ActorFollowing(ctx *fiber.Ctx) error {
- actor, _ := activitypub.GetActorFromDB(config.Domain + "/" + ctx.Params("actor"))
- return actor.GetFollowingResp(ctx)
-}
-
-func ActorFollowers(ctx *fiber.Ctx) error {
- actor, _ := activitypub.GetActorFromDB(config.Domain + "/" + ctx.Params("actor"))
- return actor.GetFollowersResp(ctx)
-}
-
-func ActorReported(c *fiber.Ctx) error {
- // STUB
-
- return c.SendString("actor reported")
-}
-
-func ActorArchive(c *fiber.Ctx) error {
- // STUB
-
- return c.SendString("actor archive")
-}
-
-func ActorPost(ctx *fiber.Ctx) error {
- header, _ := ctx.FormFile("file")
-
- if ctx.FormValue("inReplyTo") == "" && header == nil {
- return ctx.Render("403", fiber.Map{
- "message": "Media is required for new posts",
- })
- }
-
- var file multipart.File
-
- if header != nil {
- file, _ = header.Open()
- }
-
- if file != nil && header.Size > (7<<20) {
- return ctx.Render("403", fiber.Map{
- "message": "7MB max file size",
- })
- }
-
- if is, _ := util.IsPostBlacklist(ctx.FormValue("comment")); is {
- errors.New("\n\nBlacklist post blocked\n\n")
- return ctx.Redirect("/", 301)
- }
-
- if ctx.FormValue("inReplyTo") == "" || file == nil {
- if ctx.FormValue("comment") == "" && ctx.FormValue("subject") == "" {
- return ctx.Render("403", fiber.Map{
- "message": "Comment or Subject required",
- })
- }
- }
-
- if len(ctx.FormValue("comment")) > 2000 {
- return ctx.Render("403", fiber.Map{
- "message": "Comment limit 2000 characters",
- })
- }
-
- if len(ctx.FormValue("subject")) > 100 || len(ctx.FormValue("name")) > 100 || len(ctx.FormValue("options")) > 100 {
- return ctx.Render("403", fiber.Map{
- "message": "Name, Subject or Options limit 100 characters",
- })
- }
-
- if ctx.FormValue("captcha") == "" {
- return ctx.Render("403", fiber.Map{
- "message": "Incorrect Captcha",
- })
- }
-
- b := bytes.Buffer{}
- we := multipart.NewWriter(&b)
-
- if file != nil {
- var fw io.Writer
-
- fw, err := we.CreateFormFile("file", header.Filename)
-
- if err != nil {
- errors.New("error with form file create")
- }
- _, err = io.Copy(fw, file)
-
- if err != nil {
- errors.New("error with form file copy")
- }
- }
-
- reply, _ := post.ParseCommentForReply(ctx.FormValue("comment"))
-
- form, _ := ctx.MultipartForm()
-
- for key, r0 := range form.Value {
- if key == "captcha" {
- err := we.WriteField(key, ctx.FormValue("captchaCode")+":"+ctx.FormValue("captcha"))
- if err != nil {
- errors.New("error with writing captcha field")
- }
- } else if key == "name" {
- name, tripcode, _ := post.CreateNameTripCode(ctx)
-
- err := we.WriteField(key, name)
- if err != nil {
- errors.New("error with writing name field")
- }
-
- err = we.WriteField("tripcode", tripcode)
- if err != nil {
- errors.New("error with writing tripcode field")
- }
- } else {
- err := we.WriteField(key, r0[0])
- if err != nil {
- errors.New("error with writing field")
- }
- }
- }
-
- if ctx.FormValue("inReplyTo") == "" && reply != "" {
- err := we.WriteField("inReplyTo", reply)
- if err != nil {
- errors.New("error with writing inReplyTo field")
- }
- }
-
- we.Close()
-
- sendTo := ctx.FormValue("sendTo")
-
- req, err := http.NewRequest("POST", sendTo, &b)
-
- if err != nil {
- errors.New("error with post form req")
- }
-
- req.Header.Set("Content-Type", we.FormDataContentType())
-
- resp, err := util.RouteProxy(req)
-
- if err != nil {
- errors.New("error with post form resp")
- }
-
- defer resp.Body.Close()
- body, _ := ioutil.ReadAll(resp.Body)
-
- if resp.StatusCode == 200 {
-
- var obj activitypub.ObjectBase
-
- obj = post.ParseOptions(ctx, obj)
- for _, e := range obj.Option {
- if e == "noko" || e == "nokosage" {
- return ctx.Redirect(config.Domain+"/"+ctx.FormValue("boardName")+"/"+util.ShortURL(ctx.FormValue("sendTo"), string(body)), 301)
- }
- }
-
- if ctx.FormValue("returnTo") == "catalog" {
- return ctx.Redirect(config.Domain+"/"+ctx.FormValue("boardName")+"/catalog", 301)
- } else {
- return ctx.Redirect(config.Domain+"/"+ctx.FormValue("boardName"), 301)
- }
- }
-
- if resp.StatusCode == 403 {
- return ctx.Render("403", fiber.Map{
- "message": string(body),
- })
- }
-
- return ctx.Redirect(config.Domain+"/"+ctx.FormValue("boardName"), 301)
-}