Compare commits

...

1 Commits

Author SHA1 Message Date
Naoki Kosaka c7282c622b [WIP] Pleroma ready. 2019-07-06 16:33:10 +09:00
2 changed files with 48 additions and 8 deletions

View File

@ -102,6 +102,19 @@ type Activity struct {
Cc []string `json:"cc,omitempty"` Cc []string `json:"cc,omitempty"`
} }
// GenerateFollowbackRequest : Generate follow response.
func (activity *Activity) GenerateFollowbackRequest(host *url.URL) Activity {
return Activity{
[]string{"https://www.w3.org/ns/activitystreams"},
host.String() + "/activities/" + uuid.NewV4().String(),
host.String() + "/actor",
"Follow",
activity.Actor,
[]string{activity.Actor},
nil,
}
}
// GenerateResponse : Generate activity response. // GenerateResponse : Generate activity response.
func (activity *Activity) GenerateResponse(host *url.URL, responseType string) Activity { func (activity *Activity) GenerateResponse(host *url.URL, responseType string) Activity {
return Activity{ return Activity{
@ -110,7 +123,7 @@ func (activity *Activity) GenerateResponse(host *url.URL, responseType string) A
host.String() + "/actor", host.String() + "/actor",
responseType, responseType,
&activity, &activity,
nil, []string{activity.Actor},
nil, nil,
} }
} }

View File

@ -126,7 +126,7 @@ func followAcceptable(activity *activitypub.Activity, actor *activitypub.Actor)
if contains(activity.Object, "https://www.w3.org/ns/activitystreams#Public") { if contains(activity.Object, "https://www.w3.org/ns/activitystreams#Public") {
return nil return nil
} else { } else {
return errors.New("Follow only allowed for https://www.w3.org/ns/activitystreams#Public") return nil
} }
} }
@ -134,7 +134,7 @@ func unFollowAcceptable(activity *activitypub.Activity, actor *activitypub.Actor
if contains(activity.Object, "https://www.w3.org/ns/activitystreams#Public") { if contains(activity.Object, "https://www.w3.org/ns/activitystreams#Public") {
return nil return nil
} else { } else {
return errors.New("Unfollow only allowed for https://www.w3.org/ns/activitystreams#Public") return nil
} }
} }
@ -148,7 +148,7 @@ func suitableFollow(activity *activitypub.Activity, actor *activitypub.Actor) bo
func relayAcceptable(activity *activitypub.Activity, actor *activitypub.Actor) error { func relayAcceptable(activity *activitypub.Activity, actor *activitypub.Actor) error {
if !contains(activity.To, "https://www.w3.org/ns/activitystreams#Public") && !contains(activity.Cc, "https://www.w3.org/ns/activitystreams#Public") { if !contains(activity.To, "https://www.w3.org/ns/activitystreams#Public") && !contains(activity.Cc, "https://www.w3.org/ns/activitystreams#Public") {
return errors.New("Activity should contain https://www.w3.org/ns/activitystreams#Public as receiver") return nil
} }
domain, _ := url.Parse(activity.Actor) domain, _ := url.Parse(activity.Actor)
if contains(relayState.Subscriptions, domain.Host) { if contains(relayState.Subscriptions, domain.Host) {
@ -184,7 +184,7 @@ func handleInbox(writer http.ResponseWriter, request *http.Request, activityDeco
if err != nil { if err != nil {
resp := activity.GenerateResponse(hostURL, "Reject") resp := activity.GenerateResponse(hostURL, "Reject")
jsonData, _ := json.Marshal(&resp) jsonData, _ := json.Marshal(&resp)
go pushRegistorJob(actor.Inbox, jsonData) go pushRegistorJob(actor.Endpoints.SharedInbox, jsonData)
fmt.Println("Reject Follow Request : ", err.Error(), activity.Actor) fmt.Println("Reject Follow Request : ", err.Error(), activity.Actor)
writer.WriteHeader(202) writer.WriteHeader(202)
@ -203,7 +203,7 @@ func handleInbox(writer http.ResponseWriter, request *http.Request, activityDeco
} else { } else {
resp := activity.GenerateResponse(hostURL, "Accept") resp := activity.GenerateResponse(hostURL, "Accept")
jsonData, _ := json.Marshal(&resp) jsonData, _ := json.Marshal(&resp)
go pushRegistorJob(actor.Inbox, jsonData) go pushRegistorJob(actor.Endpoints.SharedInbox, jsonData)
relayState.AddSubscription(state.Subscription{ relayState.AddSubscription(state.Subscription{
Domain: domain.Host, Domain: domain.Host,
InboxURL: actor.Endpoints.SharedInbox, InboxURL: actor.Endpoints.SharedInbox,
@ -211,11 +211,15 @@ func handleInbox(writer http.ResponseWriter, request *http.Request, activityDeco
ActorID: actor.ID, ActorID: actor.ID,
}) })
fmt.Println("Accept Follow Request : ", activity.Actor) fmt.Println("Accept Follow Request : ", activity.Actor)
fb := activity.GenerateFollowbackRequest(hostURL)
fbjsonData, _ := json.Marshal(&fb)
go pushRegistorJob(actor.Endpoints.SharedInbox, fbjsonData)
fmt.Println("Send Follow Back Request : ", activity.Actor)
} }
} else { } else {
resp := activity.GenerateResponse(hostURL, "Reject") resp := activity.GenerateResponse(hostURL, "Reject")
jsonData, _ := json.Marshal(&resp) jsonData, _ := json.Marshal(&resp)
go pushRegistorJob(actor.Inbox, jsonData) go pushRegistorJob(actor.Endpoints.SharedInbox, jsonData)
fmt.Println("Reject Follow Request : ", activity.Actor) fmt.Println("Reject Follow Request : ", activity.Actor)
} }
@ -251,7 +255,30 @@ func handleInbox(writer http.ResponseWriter, request *http.Request, activityDeco
writer.Write(nil) writer.Write(nil)
} }
} }
case "Create", "Update", "Delete", "Announce": case "Announce":
err = relayAcceptable(activity, actor)
if err != nil {
writer.WriteHeader(400)
writer.Write([]byte(err.Error()))
} else {
if suitableRelay(activity, actor) {
resp := activity.GenerateAnnounce(hostURL)
if value, ok := activity.Object.(string); ok {
resp.Object = value
jsonData, _ := json.Marshal(&resp)
go pushRelayJob(domain.Host, jsonData)
fmt.Println("Swapping Announce : ", activity.Actor)
} else {
fmt.Println("Skipping Relay Status : ", activity.Actor)
}
} else {
fmt.Println("Skipping Relay Status : ", activity.Actor)
}
writer.WriteHeader(202)
writer.Write(nil)
}
case "Create", "Update", "Delete":
err = relayAcceptable(activity, actor) err = relayAcceptable(activity, actor)
if err != nil { if err != nil {
writer.WriteHeader(400) writer.WriteHeader(400)