Add ActivityPub components, routes, handlers
This commit is contained in:
71
webfinger.go
Normal file
71
webfinger.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package writefreely
|
||||
|
||||
import (
|
||||
"github.com/writeas/go-webfinger"
|
||||
"github.com/writeas/impart"
|
||||
"github.com/writeas/web-core/log"
|
||||
"github.com/writeas/writefreely/config"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type wfResolver struct {
|
||||
db *datastore
|
||||
cfg *config.Config
|
||||
}
|
||||
|
||||
var wfUserNotFoundErr = impart.HTTPError{http.StatusNotFound, "User not found."}
|
||||
|
||||
func (wfr wfResolver) FindUser(username string, host, requestHost string, r []webfinger.Rel) (*webfinger.Resource, error) {
|
||||
var c *Collection
|
||||
var err error
|
||||
if wfr.cfg.App.SingleUser {
|
||||
c, err = wfr.db.GetCollectionByID(1)
|
||||
} else {
|
||||
c, err = wfr.db.GetCollection(username)
|
||||
}
|
||||
if err != nil {
|
||||
log.Error("Unable to get blog: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
if wfr.cfg.App.SingleUser {
|
||||
// Ensure handle matches user-chosen one on single-user blogs
|
||||
if username != c.Alias {
|
||||
log.Info("Username '%s' is not handle '%s'", username, c.Alias)
|
||||
return nil, wfUserNotFoundErr
|
||||
}
|
||||
}
|
||||
// Only return information if site has federation enabled.
|
||||
// TODO: enable two levels of federation? Unlisted or Public on timelines?
|
||||
if !wfr.cfg.App.Federation {
|
||||
return nil, wfUserNotFoundErr
|
||||
}
|
||||
|
||||
res := webfinger.Resource{
|
||||
Subject: "acct:" + username + "@" + host,
|
||||
Aliases: []string{
|
||||
c.CanonicalURL(),
|
||||
c.FederatedAccount(),
|
||||
},
|
||||
Links: []webfinger.Link{
|
||||
{
|
||||
HRef: c.CanonicalURL(),
|
||||
Type: "text/html",
|
||||
Rel: "https://webfinger.net/rel/profile-page",
|
||||
},
|
||||
{
|
||||
HRef: c.FederatedAccount(),
|
||||
Type: "application/activity+json",
|
||||
Rel: "self",
|
||||
},
|
||||
},
|
||||
}
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (wfr wfResolver) DummyUser(username string, hostname string, r []webfinger.Rel) (*webfinger.Resource, error) {
|
||||
return nil, wfUserNotFoundErr
|
||||
}
|
||||
|
||||
func (wfr wfResolver) IsNotFoundError(err error) bool {
|
||||
return err == wfUserNotFoundErr
|
||||
}
|
Reference in New Issue
Block a user