summaryrefslogtreecommitdiff
path: root/internal/db/bundb/account.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-08-20 22:47:19 +0200
committerLibravatar GitHub <noreply@github.com>2022-08-20 21:47:19 +0100
commit570fa7c3598118ded6df7ced0a5326f54e7a43e2 (patch)
tree9575a6f3016c73b7109c88f68a2a512981cf19e4 /internal/db/bundb/account.go
parent[docs] Textual updates on markdown files (#756) (diff)
downloadgotosocial-570fa7c3598118ded6df7ced0a5326f54e7a43e2.tar.xz
[bugfix] Fix potential dereference of accounts on own instance (#757)
* add GetAccountByUsernameDomain * simplify search * add escape to not deref accounts on own domain * check if local + we have account by ap uri
Diffstat (limited to 'internal/db/bundb/account.go')
-rw-r--r--internal/db/bundb/account.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go
index 201de6f02..95c3d80d8 100644
--- a/internal/db/bundb/account.go
+++ b/internal/db/bundb/account.go
@@ -84,6 +84,26 @@ func (a *accountDB) GetAccountByURL(ctx context.Context, url string) (*gtsmodel.
)
}
+func (a *accountDB) GetAccountByUsernameDomain(ctx context.Context, username string, domain string) (*gtsmodel.Account, db.Error) {
+ return a.getAccount(
+ ctx,
+ func() (*gtsmodel.Account, bool) {
+ return a.cache.GetByUsernameDomain(username, domain)
+ },
+ func(account *gtsmodel.Account) error {
+ q := a.newAccountQ(account).Where("account.username = ?", username)
+
+ if domain != "" {
+ q = q.Where("account.domain = ?", domain)
+ } else {
+ q = q.Where("account.domain IS NULL")
+ }
+
+ return q.Scan(ctx)
+ },
+ )
+}
+
func (a *accountDB) getAccount(ctx context.Context, cacheGet func() (*gtsmodel.Account, bool), dbQuery func(*gtsmodel.Account) error) (*gtsmodel.Account, db.Error) {
// Attempt to fetch cached account
account, cached := cacheGet()