aboutsummaryrefslogtreecommitdiff
path: root/internal/db/users.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/users.go')
-rw-r--r--internal/db/users.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/internal/db/users.go b/internal/db/users.go
index 65326a95..80b124ea 100644
--- a/internal/db/users.go
+++ b/internal/db/users.go
@@ -70,6 +70,9 @@ type UsersStore interface {
// GetByUsername returns the user with given username. It returns
// ErrUserNotExist when not found.
GetByUsername(ctx context.Context, username string) (*User, error)
+ // GetByKeyID returns the owner of given public key ID. It returns
+ // ErrUserNotExist when not found.
+ GetByKeyID(ctx context.Context, keyID int64) (*User, error)
// HasForkedRepository returns true if the user has forked given repository.
HasForkedRepository(ctx context.Context, userID, repoID int64) bool
// IsUsernameUsed returns true if the given username has been used other than
@@ -484,6 +487,22 @@ func (db *users) GetByUsername(ctx context.Context, username string) (*User, err
return user, nil
}
+func (db *users) GetByKeyID(ctx context.Context, keyID int64) (*User, error) {
+ user := new(User)
+ err := db.WithContext(ctx).
+ Joins(dbutil.Quote("JOIN public_key ON public_key.owner_id = %s.id", "user")).
+ Where("public_key.id = ?", keyID).
+ First(user).
+ Error
+ if err != nil {
+ if err == gorm.ErrRecordNotFound {
+ return nil, ErrUserNotExist{args: errutil.Args{"keyID": keyID}}
+ }
+ return nil, err
+ }
+ return user, nil
+}
+
func (db *users) HasForkedRepository(ctx context.Context, userID, repoID int64) bool {
var count int64
db.WithContext(ctx).Model(new(Repository)).Where("owner_id = ? AND fork_id = ?", userID, repoID).Count(&count)