aboutsummaryrefslogtreecommitdiff
path: root/outboxPost.go
diff options
context:
space:
mode:
Diffstat (limited to 'outboxPost.go')
-rw-r--r--outboxPost.go138
1 files changed, 70 insertions, 68 deletions
diff --git a/outboxPost.go b/outboxPost.go
index ee1e9e5..7ab6547 100644
--- a/outboxPost.go
+++ b/outboxPost.go
@@ -12,20 +12,22 @@ import (
"regexp"
"strings"
+ "github.com/FChannel0/FChannel-Server/activitypub"
_ "github.com/lib/pq"
+ "golang.org/x/perf/storage/db"
)
func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
var activity Activity
- actor := GetActorFromPath(db, r.URL.Path, "/")
+ actor := GetActorFromPath(r.URL.Path, "/")
contentType := GetContentType(r.Header.Get("content-type"))
defer r.Body.Close()
if contentType == "multipart/form-data" || contentType == "application/x-www-form-urlencoded" {
r.ParseMultipartForm(5 << 20)
- if BoardHasAuthType(db, actor.Name, "captcha") && CheckCaptcha(db, r.FormValue("captcha")) {
+ if BoardHasAuthType(actor.Name, "captcha") && CheckCaptcha(db, r.FormValue("captcha")) {
f, header, _ := r.FormFile("file")
if header != nil {
@@ -36,7 +38,7 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
return
}
- if IsMediaBanned(db, f) {
+ if IsMediaBanned(f) {
fmt.Println("media banned")
http.Redirect(w, r, Domain, http.StatusSeeOther)
return
@@ -56,15 +58,15 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
nObj.Actor = Domain + "/" + actor.Name
- nObj = WriteObjectToDB(db, nObj)
+ nObj = WriteObjectToDB(nObj)
if len(nObj.To) == 0 {
- ArchivePosts(db, actor)
+ ArchivePosts(actor)
}
activity := CreateActivity("Create", nObj)
- activity = AddFollowersToActivity(db, activity)
- go MakeActivityRequest(db, activity)
+ activity = AddFollowersToActivity(activity)
+ go MakeActivityRequest(activity)
var id string
op := len(nObj.InReplyTo) - 1
@@ -85,7 +87,7 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
w.Write([]byte("captcha could not auth"))
} else {
activity = GetActivityFromJson(r, db)
- if IsActivityLocal(db, activity) {
+ if IsActivityLocal(activity) {
if !VerifyHeaderSignature(r, *activity.Actor) {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(""))
@@ -108,11 +110,11 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
var rActivity Activity
if validActor && validLocalActor {
rActivity = AcceptFollow(activity)
- rActivity = SetActorFollowingDB(db, rActivity)
- MakeActivityRequest(db, activity)
+ rActivity = SetActorFollowingDB(rActivity)
+ MakeActivityRequest(activity)
}
- FollowingBoards = GetActorFollowingDB(db, Domain)
+ FollowingBoards = GetActorFollowingDB(Domain)
Boards = GetBoardCollection(db)
break
@@ -133,7 +135,7 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
summary := activity.Object.Summary
restricted := activity.Object.Sensitive
- actor := CreateNewBoardDB(db, *CreateNewActor(name, prefname, summary, authReq, restricted))
+ actor := CreateNewBoardDB(*CreateNewActor(name, prefname, summary, authReq, restricted))
if actor.Id != "" {
var board []ObjectBase
@@ -174,17 +176,17 @@ func ParseOutboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
}
}
-func ObjectFromJson(r *http.Request, obj ObjectBase) ObjectBase {
+func ObjectFromJson(r *http.Request, obj activitypub.ObjectBase) activitypub.ObjectBase {
body, _ := ioutil.ReadAll(r.Body)
- var respActivity ActivityRaw
+ var respActivity activitypub.ActivityRaw
err := json.Unmarshal(body, &respActivity)
CheckError(err, "error with object from json")
if HasContextFromJson(respActivity.AtContextRaw.Context) {
- var jObj ObjectBase
+ var jObj activitypub.ObjectBase
jObj = GetObjectFromJson(respActivity.ObjectRaw)
jObj.To = GetToFromJson(respActivity.ToRaw)
jObj.Cc = GetToFromJson(respActivity.CcRaw)
@@ -193,19 +195,19 @@ func ObjectFromJson(r *http.Request, obj ObjectBase) ObjectBase {
return obj
}
-func GetObjectFromJson(obj []byte) ObjectBase {
+func GetObjectFromJson(obj []byte) activitypub.ObjectBase {
var generic interface{}
err := json.Unmarshal(obj, &generic)
CheckError(err, "error with getting obj from json")
- var nObj ObjectBase
+ var nObj activitypub.ObjectBase
if generic != nil {
switch generic.(type) {
case []interface{}:
- var lObj ObjectBase
- var arrContext ObjectArray
+ var lObj activitypub.ObjectBase
+ var arrContext activitypub.ObjectArray
err = json.Unmarshal(obj, &arrContext.Object)
CheckError(err, "error with []interface{} oject from json")
if len(arrContext.Object) > 0 {
@@ -215,15 +217,15 @@ func GetObjectFromJson(obj []byte) ObjectBase {
break
case map[string]interface{}:
- var arrContext Object
+ var arrContext activitypub.Object
err = json.Unmarshal(obj, &arrContext.Object)
CheckError(err, "error with object from json")
nObj = *arrContext.Object
break
case string:
- var lObj ObjectBase
- var arrContext ObjectString
+ var lObj activitypub.ObjectBase
+ var arrContext activitypub.ObjectString
err = json.Unmarshal(obj, &arrContext.Object)
CheckError(err, "error with string object from json")
lObj.Id = arrContext.Object
@@ -235,9 +237,9 @@ func GetObjectFromJson(obj []byte) ObjectBase {
return nObj
}
-func GetActorFromJson(actor []byte) Actor {
+func GetActorFromJson(actor []byte) activitypub.Actor {
var generic interface{}
- var nActor Actor
+ var nActor activitypub.Actor
err := json.Unmarshal(actor, &generic)
if err != nil {
@@ -303,7 +305,7 @@ func HasContextFromJson(context []byte) bool {
switch generic.(type) {
case []interface{}:
- var arrContext AtContextArray
+ var arrContext activitypub.AtContextArray
err = json.Unmarshal(context, &arrContext.Context)
CheckError(err, "error with []interface{}")
if len(arrContext.Context) > 0 {
@@ -312,7 +314,7 @@ func HasContextFromJson(context []byte) bool {
}
}
case string:
- var arrContext AtContextString
+ var arrContext activitypub.AtContextString
err = json.Unmarshal(context, &arrContext.Context)
CheckError(err, "error with string")
if arrContext.Context == "https://www.w3.org/ns/activitystreams" {
@@ -323,7 +325,7 @@ func HasContextFromJson(context []byte) bool {
return hasContext
}
-func ObjectFromForm(r *http.Request, db *sql.DB, obj ObjectBase) ObjectBase {
+func ObjectFromForm(r *http.Request, db *sql.DB, obj activitypub.ObjectBase) activitypub.ObjectBase {
file, header, _ := r.FormFile("file")
@@ -361,19 +363,19 @@ func ObjectFromForm(r *http.Request, db *sql.DB, obj ObjectBase) ObjectBase {
obj = ParseOptions(r, obj)
- var originalPost ObjectBase
+ var originalPost activitypub.ObjectBase
originalPost.Id = EscapeString(r.FormValue("inReplyTo"))
obj.InReplyTo = append(obj.InReplyTo, originalPost)
- var activity Activity
+ var activity activitypub.Activity
if !IsInStringArray(activity.To, originalPost.Id) {
activity.To = append(activity.To, originalPost.Id)
}
if originalPost.Id != "" {
- if !IsActivityLocal(db, activity) {
+ if !IsActivityLocal(activity) {
actor := FingerActor(originalPost.Id)
if !IsInStringArray(obj.To, actor.Id) {
obj.To = append(obj.To, actor.Id)
@@ -381,7 +383,7 @@ func ObjectFromForm(r *http.Request, db *sql.DB, obj ObjectBase) ObjectBase {
}
}
- replyingTo := ParseCommentForReplies(db, r.FormValue("comment"), originalPost.Id)
+ replyingTo := ParseCommentForReplies(r.FormValue("comment"), originalPost.Id)
for _, e := range replyingTo {
@@ -397,11 +399,11 @@ func ObjectFromForm(r *http.Request, db *sql.DB, obj ObjectBase) ObjectBase {
if !has {
obj.InReplyTo = append(obj.InReplyTo, e)
- var activity Activity
+ var activity activitypub.Activity
activity.To = append(activity.To, e.Id)
- if !IsActivityLocal(db, activity) {
+ if !IsActivityLocal(activity) {
actor := FingerActor(e.Id)
if !IsInStringArray(obj.To, actor.Id) {
obj.To = append(obj.To, actor.Id)
@@ -413,7 +415,7 @@ func ObjectFromForm(r *http.Request, db *sql.DB, obj ObjectBase) ObjectBase {
return obj
}
-func ParseOptions(r *http.Request, obj ObjectBase) ObjectBase {
+func ParseOptions(r *http.Request, obj activitypub.ObjectBase) activitypub.ObjectBase {
options := EscapeString(r.FormValue("options"))
if options != "" {
option := strings.Split(options, ";")
@@ -431,7 +433,7 @@ func ParseOptions(r *http.Request, obj ObjectBase) ObjectBase {
obj.Option = append(obj.Option, "email:"+e)
} else if wallet.MatchString(e) {
obj.Option = append(obj.Option, "wallet")
- var wallet CryptoCur
+ var wallet activitypub.CryptoCur
value := strings.Split(e, ":")
wallet.Type = value[0]
wallet.Address = value[1]
@@ -445,12 +447,12 @@ func ParseOptions(r *http.Request, obj ObjectBase) ObjectBase {
return obj
}
-func GetActivityFromJson(r *http.Request, db *sql.DB) Activity {
+func GetActivityFromJson(r *http.Request, db *sql.DB) activitypub.Activity {
body, _ := ioutil.ReadAll(r.Body)
- var respActivity ActivityRaw
+ var respActivity activitypub.ActivityRaw
- var nActivity Activity
+ var nActivity activitypub.Activity
var nType string
@@ -459,7 +461,7 @@ func GetActivityFromJson(r *http.Request, db *sql.DB) Activity {
CheckError(err, "error with activity from json")
if HasContextFromJson(respActivity.AtContextRaw.Context) {
- var jObj ObjectBase
+ var jObj activitypub.ObjectBase
if respActivity.Type == "Note" {
jObj = GetObjectFromJson(body)
@@ -494,7 +496,7 @@ func GetActivityFromJson(r *http.Request, db *sql.DB) Activity {
return nActivity
}
-func CheckCaptcha(db *sql.DB, captcha string) bool {
+func CheckCaptcha(captcha string) bool {
parts := strings.Split(captcha, ":")
if strings.Trim(parts[0], " ") == "" || strings.Trim(parts[1], " ") == "" {
@@ -502,10 +504,10 @@ func CheckCaptcha(db *sql.DB, captcha string) bool {
}
path := "public/" + parts[0] + ".png"
- code := GetCaptchaCodeDB(db, path)
+ code := GetCaptchaCodeDB(path)
if code != "" {
- DeleteCaptchaCodeDB(db, path)
+ DeleteCaptchaCodeDB(path)
CreateNewCaptcha(db)
}
@@ -526,7 +528,7 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
if !VerifyHeaderSignature(r, *activity.Actor) {
response := RejectActivity(activity)
- MakeActivityRequest(db, response)
+ MakeActivityRequest(response)
return
}
@@ -534,8 +536,8 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
case "Create":
for _, e := range activity.To {
- if IsActorLocal(db, e) {
- if !IsActorLocal(db, activity.Actor.Id) {
+ if IsActorLocal(e) {
+ if !IsActorLocal(activity.Actor.Id) {
col := GetCollectionFromID(activity.Object.Id)
@@ -543,9 +545,9 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
break
}
- WriteObjectToCache(db, *activity.Object)
- ArchivePosts(db, GetActorFromDB(db, e))
- //SendToFollowers(db, e, activity)
+ WriteObjectToCache(*activity.Object)
+ ArchivePosts(GetActorFromDB(db, e))
+ //SendToFollowers(e, activity)
}
}
}
@@ -554,15 +556,15 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
case "Delete":
for _, e := range activity.To {
- actor := GetActorFromDB(db, e)
+ actor := GetActorFromDB(e)
if actor.Id != "" && actor.Id != Domain {
if activity.Object.Replies != nil {
for _, k := range activity.Object.Replies.OrderedItems {
- TombstoneObject(db, k.Id)
+ TombstoneObject(k.Id)
}
}
- TombstoneObject(db, activity.Object.Id)
- UnArchiveLast(db, actor.Id)
+ TombstoneObject(activity.Object.Id)
+ UnArchiveLast(actor.Id)
break
}
}
@@ -570,15 +572,15 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
case "Follow":
for _, e := range activity.To {
- if GetActorFromDB(db, e).Id != "" {
+ if GetActorFromDB(e).Id != "" {
response := AcceptFollow(activity)
- response = SetActorFollowerDB(db, response)
- MakeActivityRequest(db, response)
+ response = SetActorFollowerDB(response)
+ MakeActivityRequest(response)
alreadyFollow := false
alreadyFollowing := false
- autoSub := GetActorAutoSubscribeDB(db, response.Actor.Id)
- following := GetActorFollowingDB(db, response.Actor.Id)
+ autoSub := GetActorAutoSubscribeDB(response.Actor.Id)
+ following := GetActorFollowingDB(response.Actor.Id)
for _, e := range following {
if e.Id == response.Object.Id {
@@ -596,16 +598,16 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
}
if autoSub && !alreadyFollow && alreadyFollowing {
- followActivity := MakeFollowActivity(db, response.Actor.Id, response.Object.Actor)
+ followActivity := MakeFollowActivity(response.Actor.Id, response.Object.Actor)
if FingerActor(response.Object.Actor).Id != "" {
- MakeActivityRequestOutbox(db, followActivity)
+ MakeActivityRequestOutbox(followActivity)
}
}
} else {
fmt.Println("follow request for rejected")
response := RejectActivity(activity)
- MakeActivityRequest(db, response)
+ MakeActivityRequest(response)
return
}
}
@@ -614,13 +616,13 @@ func ParseInboxRequest(w http.ResponseWriter, r *http.Request, db *sql.DB) {
case "Reject":
if activity.Object.Object.Type == "Follow" {
fmt.Println("follow rejected")
- SetActorFollowingDB(db, activity)
+ SetActorFollowingDB(activity)
}
break
}
}
-func MakeActivityFollowingReq(w http.ResponseWriter, r *http.Request, activity Activity) bool {
+func MakeActivityFollowingReq(w http.ResponseWriter, r *http.Request, activity activitypub.Activity) bool {
actor := GetActor(activity.Object.Id)
req, err := http.NewRequest("POST", actor.Inbox, nil)
@@ -635,7 +637,7 @@ func MakeActivityFollowingReq(w http.ResponseWriter, r *http.Request, activity A
body, _ := ioutil.ReadAll(resp.Body)
- var respActivity Activity
+ var respActivity activitypub.Activity
err = json.Unmarshal(body, &respActivity)
@@ -646,7 +648,7 @@ func MakeActivityFollowingReq(w http.ResponseWriter, r *http.Request, activity A
return false
}
-func IsMediaBanned(db *sql.DB, f multipart.File) bool {
+func IsMediaBanned(f multipart.File) bool {
f.Seek(0, 0)
fileBytes := make([]byte, 2048)
@@ -680,12 +682,12 @@ func IsMediaBanned(db *sql.DB, f multipart.File) bool {
return false
}
-func SendToFollowers(db *sql.DB, actor string, activity Activity) {
+func SendToFollowers(actor string, activity activitypub.Activity) {
- nActor := GetActorFromDB(db, actor)
+ nActor := GetActorFromDB(actor)
activity.Actor = &nActor
- followers := GetActorFollowDB(db, actor)
+ followers := GetActorFollowDB(actor)
var to []string
for _, e := range followers {
@@ -699,6 +701,6 @@ func SendToFollowers(db *sql.DB, actor string, activity Activity) {
activity.To = to
if len(activity.Object.InReplyTo) > 0 {
- MakeActivityRequest(db, activity)
+ MakeActivityRequest(activity)
}
}