summaryrefslogtreecommitdiff
path: root/internal/federation/federatingdb/get.go
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-05-27 16:06:24 +0200
committerLibravatar GitHub <noreply@github.com>2021-05-27 16:06:24 +0200
commit40add686913b7eb6edd5a780e37e7513b43a337f (patch)
tree75549dff97e5a15f732a505d4d00aa7a686bdad8 /internal/federation/federatingdb/get.go
parentFaves (#31) (diff)
downloadgotosocial-40add686913b7eb6edd5a780e37e7513b43a337f.tar.xz
Notifications (#34)
Notifications working for: * Mentions * Faves * New follow requests * New followers
Diffstat (limited to 'internal/federation/federatingdb/get.go')
-rw-r--r--internal/federation/federatingdb/get.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/internal/federation/federatingdb/get.go b/internal/federation/federatingdb/get.go
new file mode 100644
index 000000000..77a24bf43
--- /dev/null
+++ b/internal/federation/federatingdb/get.go
@@ -0,0 +1,83 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package federatingdb
+
+import (
+ "context"
+ "errors"
+ "net/url"
+
+ "github.com/go-fed/activity/streams/vocab"
+ "github.com/sirupsen/logrus"
+ "github.com/superseriousbusiness/gotosocial/internal/db"
+ "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/util"
+)
+
+// Get returns the database entry for the specified id.
+//
+// The library makes this call only after acquiring a lock first.
+func (f *federatingDB) Get(c context.Context, id *url.URL) (value vocab.Type, err error) {
+ l := f.log.WithFields(
+ logrus.Fields{
+ "func": "Get",
+ "id": id.String(),
+ },
+ )
+ l.Debug("entering GET function")
+
+ if util.IsUserPath(id) {
+ acct := &gtsmodel.Account{}
+ if err := f.db.GetWhere([]db.Where{{Key: "uri", Value: id.String()}}, acct); err != nil {
+ return nil, err
+ }
+ l.Debug("is user path! returning account")
+ return f.typeConverter.AccountToAS(acct)
+ }
+
+ if util.IsFollowersPath(id) {
+ acct := &gtsmodel.Account{}
+ if err := f.db.GetWhere([]db.Where{{Key: "followers_uri", Value: id.String()}}, acct); err != nil {
+ return nil, err
+ }
+
+ followersURI, err := url.Parse(acct.FollowersURI)
+ if err != nil {
+ return nil, err
+ }
+
+ return f.Followers(c, followersURI)
+ }
+
+ if util.IsFollowingPath(id) {
+ acct := &gtsmodel.Account{}
+ if err := f.db.GetWhere([]db.Where{{Key: "following_uri", Value: id.String()}}, acct); err != nil {
+ return nil, err
+ }
+
+ followingURI, err := url.Parse(acct.FollowingURI)
+ if err != nil {
+ return nil, err
+ }
+
+ return f.Following(c, followingURI)
+ }
+
+ return nil, errors.New("could not get")
+}