From 9bd7c11305a48c7524f0e6a826898dc6e51e1c26 Mon Sep 17 00:00:00 2001 From: Xeronith Date: Fri, 16 Sep 2022 23:15:35 +0430 Subject: [PATCH] refactor(workspace): :art: improve code structure --- greataped/app/routes/followers.go | 12 ++++++------ greataped/app/routes/following.go | 12 ++++++------ greataped/app/routes/user.go | 9 ++++----- greataped/contracts/context.go | 10 +++++++++- greataped/server/http_context.go | 25 +++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/greataped/app/routes/followers.go b/greataped/app/routes/followers.go index 620d875..46c3d0d 100644 --- a/greataped/app/routes/followers.go +++ b/greataped/app/routes/followers.go @@ -22,18 +22,18 @@ var Followers = route.New(HttpGet, "/u/:username/followers", func(x IContext) er } if username.IsFederated() { - webfinger := activitypub.Webfinger{} - if err := x.GetActivityStream(username.Webfinger(), nil, &webfinger); err != nil { + webfinger, err := x.GetWebFinger(username) + if err != nil { return x.InternalServerError(err) } - actor := activitypub.Actor{} - if err := x.GetActivityStream(webfinger.Self(), nil, &actor); err != nil { + actor, err := x.GetActor(webfinger) + if err != nil { return x.InternalServerError(err) } - followers := activitypub.OrderedCollection{} - if err := x.GetActivityStream(actor.Followers, nil, &followers); err != nil { + followers, err := x.GetOrderedCollection(actor.Followers) + if err != nil { return x.InternalServerError(err) } diff --git a/greataped/app/routes/following.go b/greataped/app/routes/following.go index 1956f49..de538da 100644 --- a/greataped/app/routes/following.go +++ b/greataped/app/routes/following.go @@ -17,18 +17,18 @@ var Following = route.New(HttpGet, "/u/:username/following", func(x IContext) er } if username.IsFederated() { - webfinger := activitypub.Webfinger{} - if err := x.GetActivityStream(username.Webfinger(), nil, &webfinger); err != nil { + webfinger, err := x.GetWebFinger(username) + if err != nil { return x.InternalServerError(err) } - actor := activitypub.Actor{} - if err := x.GetActivityStream(webfinger.Self(), nil, &actor); err != nil { + actor, err := x.GetActor(webfinger) + if err != nil { return x.InternalServerError(err) } - following := activitypub.OrderedCollection{} - if err := x.GetActivityStream(actor.Following, nil, &following); err != nil { + following, err := x.GetOrderedCollection(actor.Following) + if err != nil { return x.InternalServerError(err) } diff --git a/greataped/app/routes/user.go b/greataped/app/routes/user.go index 7963798..5f4e47e 100644 --- a/greataped/app/routes/user.go +++ b/greataped/app/routes/user.go @@ -1,7 +1,6 @@ package routes import ( - "activitypub" "app/models/domain" "app/models/repos" "config" @@ -19,13 +18,13 @@ var User = route.New(contracts.HttpGet, "/u/:username", func(x contracts.IContex } if username.IsFederated() { - webfinger := activitypub.Webfinger{} - if err := x.GetActivityStream(username.Webfinger(), nil, &webfinger); err != nil { + webfinger, err := x.GetWebFinger(username) + if err != nil { return x.InternalServerError(err) } - actor := activitypub.Actor{} - if err := x.GetActivityStream(webfinger.Self(), nil, &actor); err != nil { + actor, err := x.GetActor(webfinger) + if err != nil { return x.InternalServerError(err) } diff --git a/greataped/contracts/context.go b/greataped/contracts/context.go index ba599cb..48e1d1e 100644 --- a/greataped/contracts/context.go +++ b/greataped/contracts/context.go @@ -1,6 +1,10 @@ package contracts -import "mime/multipart" +import ( + "activitypub" + "app/models/domain" + "mime/multipart" +) type ( IContext interface { @@ -28,6 +32,10 @@ type ( GetActivityStreamSigned(url, keyId, privateKey string, data []byte, output interface{}) error PostActivityStreamSigned(url, keyId, privateKey string, data []byte, output interface{}) error + GetWebFinger(username domain.Username) (activitypub.Webfinger, error) + GetActor(activitypub.Webfinger) (activitypub.Actor, error) + GetOrderedCollection(url string) (activitypub.OrderedCollection, error) + BadRequest(interface{}, ...any) IServerError NotFound(interface{}, ...any) IServerError InternalServerError(interface{}, ...any) IServerError diff --git a/greataped/server/http_context.go b/greataped/server/http_context.go index 4bda037..17018c8 100644 --- a/greataped/server/http_context.go +++ b/greataped/server/http_context.go @@ -1,6 +1,8 @@ package server import ( + "activitypub" + "app/models/domain" "bytes" "config" . "contracts" @@ -235,3 +237,26 @@ func (context *httpServerContext) GetActivityStreamSigned(url, keyId, privateKey func (context *httpServerContext) PostActivityStreamSigned(url, keyId, privateKey string, data []byte, output interface{}) error { return context.requestActivityStream(http.MethodPost, url, keyId, privateKey, data, output) } + +func (context *httpServerContext) GetWebFinger(username domain.Username) (activitypub.Webfinger, error) { + result, err := context.GetObject(username.Webfinger(), &activitypub.Webfinger{}) + return result.(activitypub.Webfinger), err +} + +func (context *httpServerContext) GetActor(webfinger activitypub.Webfinger) (activitypub.Actor, error) { + result, err := context.GetObject(webfinger.Self(), &activitypub.Actor{}) + return result.(activitypub.Actor), err +} + +func (context *httpServerContext) GetOrderedCollection(url string) (activitypub.OrderedCollection, error) { + result, err := context.GetObject(url, &activitypub.OrderedCollection{}) + return result.(activitypub.OrderedCollection), err +} + +func (context *httpServerContext) GetObject(url string, result interface{}) (interface{}, error) { + if err := context.GetActivityStream(url, nil, &result); err != nil { + return result, err + } + + return result, nil +}