aboutsummaryrefslogtreecommitdiff
path: root/activitypub/object.go
diff options
context:
space:
mode:
Diffstat (limited to 'activitypub/object.go')
-rw-r--r--activitypub/object.go201
1 files changed, 171 insertions, 30 deletions
diff --git a/activitypub/object.go b/activitypub/object.go
index a873ce0..29a17e4 100644
--- a/activitypub/object.go
+++ b/activitypub/object.go
@@ -2,10 +2,7 @@ package activitypub
import (
"database/sql"
- "encoding/json"
"fmt"
- "io/ioutil"
- "net/http"
"os"
"os/exec"
"regexp"
@@ -17,6 +14,35 @@ import (
"github.com/FChannel0/FChannel-Server/util"
)
+func (obj ObjectBase) CreateActivity(activityType string) (Activity, error) {
+ var newActivity Activity
+
+ actor, err := FingerActor(obj.Actor)
+ if err != nil {
+ return newActivity, util.MakeError(err, "CreateActivity")
+ }
+
+ newActivity.AtContext.Context = "https://www.w3.org/ns/activitystreams"
+ newActivity.Type = activityType
+ newActivity.Published = obj.Published
+ newActivity.Actor = &actor
+ newActivity.Object = &obj
+
+ for _, e := range obj.To {
+ if obj.Actor != e {
+ newActivity.To = append(newActivity.To, e)
+ }
+ }
+
+ for _, e := range obj.Cc {
+ if obj.Actor != e {
+ newActivity.Cc = append(newActivity.Cc, e)
+ }
+ }
+
+ return newActivity, nil
+}
+
func (obj ObjectBase) CheckIfOP() (bool, error) {
var count int
@@ -63,6 +89,44 @@ func (obj ObjectBase) CreatePreview() *NestedObjectBase {
return &nPreview
}
+func (obj ObjectBase) DeleteAndRepliesRequest() error {
+ activity, err := obj.CreateActivity("Delete")
+
+ if err != nil {
+ return util.MakeError(err, "DeleteAndRepliesRequest")
+ }
+
+ nObj, err := obj.GetCollectionFromPath()
+ if err != nil {
+ return util.MakeError(err, "DeleteAndRepliesRequest")
+ }
+
+ activity.Actor.Id = nObj.OrderedItems[0].Actor
+ activity.Object = &nObj.OrderedItems[0]
+ objActor, _ := GetActor(nObj.OrderedItems[0].Actor)
+ followers, err := objActor.GetFollow()
+
+ if err != nil {
+ return util.MakeError(err, "DeleteAndRepliesRequest")
+ }
+ for _, e := range followers {
+ activity.To = append(activity.To, e.Id)
+ }
+
+ following, err := objActor.GetFollowing()
+ if err != nil {
+ return util.MakeError(err, "DeleteAndRepliesRequest")
+ }
+
+ for _, e := range following {
+ activity.To = append(activity.To, e.Id)
+ }
+
+ err = activity.MakeRequestInbox()
+
+ return util.MakeError(err, "DeleteAndRepliesRequest")
+}
+
//TODO break this off into seperate for Cache
func (obj ObjectBase) DeleteAttachment() error {
query := `delete from activitystream where id in (select attachment from activitystream where id=$1)`
@@ -167,49 +231,65 @@ func (obj ObjectBase) Delete() error {
return util.MakeError(err, "Delete")
}
-func (obj ObjectBase) DeleteRepliedTo() error {
- query := `delete from replies where id=$1`
- _, err := config.DB.Exec(query, obj.Id)
- return util.MakeError(err, "DeleteRepliedTo")
-}
-
func (obj ObjectBase) DeleteInReplyTo() error {
query := `delete from replies where id in (select id from replies where inreplyto=$1)`
_, err := config.DB.Exec(query, obj.Id)
return util.MakeError(err, "DeleteInReplyTo")
}
-func (obj ObjectBase) DeleteReported() error {
- query := `delete from reported where id=$1`
+func (obj ObjectBase) DeleteRepliedTo() error {
+ query := `delete from replies where id=$1`
_, err := config.DB.Exec(query, obj.Id)
- return util.MakeError(err, "DeleteReported")
+ return util.MakeError(err, "DeleteRepliedTo")
}
-func (obj ObjectBase) GetCollection() (Collection, error) {
- var nColl Collection
+func (obj ObjectBase) DeleteRequest() error {
+ activity, err := obj.CreateActivity("Delete")
- req, err := http.NewRequest("GET", obj.Id, nil)
if err != nil {
- return nColl, util.MakeError(err, "GetCollection")
+ return util.MakeError(err, "DeleteRequest")
}
- req.Header.Set("Accept", config.ActivityStreams)
- resp, err := util.RouteProxy(req)
+ nObj, err := obj.GetFromPath()
+
if err != nil {
- return nColl, util.MakeError(err, "GetCollection")
+ return util.MakeError(err, "DeleteRequest")
}
- if resp.StatusCode == 200 {
- defer resp.Body.Close()
- body, _ := ioutil.ReadAll(resp.Body)
- if len(body) > 0 {
- if err := json.Unmarshal(body, &nColl); err != nil {
- return nColl, util.MakeError(err, "GetCollection")
- }
- }
+ actor, err := FingerActor(nObj.Actor)
+
+ if err != nil {
+ return util.MakeError(err, "DeleteRequest")
+ }
+ activity.Actor = &actor
+ objActor, _ := GetActor(nObj.Actor)
+ followers, err := objActor.GetFollow()
+ if err != nil {
+ return util.MakeError(err, "DeleteRequest")
}
- return nColl, nil
+ for _, e := range followers {
+ activity.To = append(activity.To, e.Id)
+ }
+
+ following, err := objActor.GetFollowing()
+ if err != nil {
+ return util.MakeError(err, "DeleteRequest")
+ }
+ for _, e := range following {
+ activity.To = append(activity.To, e.Id)
+ }
+
+ err = activity.MakeRequestInbox()
+
+ return util.MakeError(err, "DeleteRequest")
+}
+
+func (obj ObjectBase) DeleteReported() error {
+ query := `delete from reported where id=$1`
+ _, err := config.DB.Exec(query, obj.Id)
+
+ return util.MakeError(err, "DeleteReported")
}
func (obj ObjectBase) GetCollectionLocal() (Collection, error) {
@@ -646,6 +726,23 @@ func (obj ObjectBase) IsLocal() (bool, error) {
return true, nil
}
+func (obj ObjectBase) IsReplyInThread(id string) (bool, error) {
+ reqActivity := Activity{Id: obj.InReplyTo[0].Id}
+ coll, _, err := reqActivity.CheckValid()
+
+ if err != nil {
+ return false, util.MakeError(err, "IsReplyInThread")
+ }
+
+ for _, e := range coll.OrderedItems[0].Replies.OrderedItems {
+ if e.Id == id {
+ return true, nil
+ }
+ }
+
+ return false, nil
+}
+
//TODO break this off into seperate for Cache
func (obj ObjectBase) MarkSensitive(sensitive bool) error {
var query = `update activitystream set sensitive=$1 where id=$2`
@@ -1151,6 +1248,50 @@ func (obj ObjectBase) WriteReply() error {
return nil
}
+func (obj ObjectBase) WriteReplyCache() error {
+ for i, e := range obj.InReplyTo {
+ res, err := obj.InReplyTo[0].IsReplyInThread(e.Id)
+ if err != nil {
+ return util.MakeError(err, "WriteReplyCache")
+ }
+
+ if i == 0 || res {
+ query := `select id from replies where id=$1`
+
+ rows, err := config.DB.Query(query, obj.Id)
+ if err != nil {
+ return util.MakeError(err, "WriteReplyCache")
+ }
+ defer rows.Close()
+
+ var id string
+ rows.Next()
+ err = rows.Scan(&id)
+ if err != nil {
+ return util.MakeError(err, "WriteReplyCache")
+ } else if id != "" {
+ return nil // TODO: error?
+ }
+
+ query = `insert into cachereplies (id, inreplyto) values ($1, $2)`
+
+ _, err = config.DB.Exec(query, obj.Id, e.Id)
+ if err != nil {
+ return util.MakeError(err, "WriteReplyCache")
+ }
+ }
+ }
+
+ if len(obj.InReplyTo) < 1 {
+ query := `insert into cachereplies (id, inreplyto) values ($1, $2)`
+
+ _, err := config.DB.Exec(query, obj.Id, "")
+ return util.MakeError(err, "WriteReplyCache")
+ }
+
+ return nil
+}
+
func (obj ObjectBase) WriteReplyLocal(replyto string) error {
var nID string
@@ -1179,7 +1320,7 @@ func (obj ObjectBase) WriteReplyLocal(replyto string) error {
func (obj ObjectBase) WriteObjectToCache() (ObjectBase, error) {
if isBlacklisted, err := util.IsPostBlacklist(obj.Content); err != nil || isBlacklisted {
- fmt.Println("\n\nBlacklist post blocked\n\n")
+ config.Log.Println("\n\nBlacklist post blocked\n\n")
return obj, util.MakeError(err, "WriteObjectToCache")
}
@@ -1243,7 +1384,7 @@ func (obj ObjectBase) WriteWithAttachment(attachment ObjectBase) {
_, e := config.DB.Exec(query, obj.Id, obj.Type, obj.Name, obj.Content, attachment.Id, obj.Preview.Id, obj.Published, obj.Updated, obj.AttributedTo, obj.Actor, obj.TripCode, obj.Sensitive)
if e != nil {
- fmt.Println("error inserting new activity with attachment")
+ config.Log.Println("error inserting new activity with attachment")
panic(e)
}
}