summaryrefslogtreecommitdiffstats
path: root/services/externalaccount
diff options
context:
space:
mode:
Diffstat (limited to 'services/externalaccount')
-rw-r--r--services/externalaccount/link.go29
-rw-r--r--services/externalaccount/user.go26
2 files changed, 50 insertions, 5 deletions
diff --git a/services/externalaccount/link.go b/services/externalaccount/link.go
new file mode 100644
index 0000000000..e71a37090f
--- /dev/null
+++ b/services/externalaccount/link.go
@@ -0,0 +1,29 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package externalaccount
+
+import (
+ "fmt"
+
+ user_model "code.gitea.io/gitea/models/user"
+ "github.com/markbates/goth"
+)
+
+// Store represents a thing that stores things
+type Store interface {
+ Get(interface{}) interface{}
+ Set(interface{}, interface{}) error
+ Release() error
+}
+
+// LinkAccountFromStore links the provided user with a stored external user
+func LinkAccountFromStore(store Store, user *user_model.User) error {
+ gothUser := store.Get("linkAccountGothUser")
+ if gothUser == nil {
+ return fmt.Errorf("not in LinkAccount session")
+ }
+
+ return LinkAccountToUser(user, gothUser.(goth.User))
+}
diff --git a/services/externalaccount/user.go b/services/externalaccount/user.go
index f7280e90e4..8fd0680a1f 100644
--- a/services/externalaccount/user.go
+++ b/services/externalaccount/user.go
@@ -15,14 +15,12 @@ import (
"github.com/markbates/goth"
)
-// LinkAccountToUser link the gothUser to the user
-func LinkAccountToUser(user *user_model.User, gothUser goth.User) error {
+func toExternalLoginUser(user *user_model.User, gothUser goth.User) (*user_model.ExternalLoginUser, error) {
loginSource, err := login.GetActiveOAuth2LoginSourceByName(gothUser.Provider)
if err != nil {
- return err
+ return nil, err
}
-
- externalLoginUser := &user_model.ExternalLoginUser{
+ return &user_model.ExternalLoginUser{
ExternalID: gothUser.UserID,
UserID: user.ID,
LoginSourceID: loginSource.ID,
@@ -40,6 +38,14 @@ func LinkAccountToUser(user *user_model.User, gothUser goth.User) error {
AccessTokenSecret: gothUser.AccessTokenSecret,
RefreshToken: gothUser.RefreshToken,
ExpiresAt: gothUser.ExpiresAt,
+ }, nil
+}
+
+// LinkAccountToUser link the gothUser to the user
+func LinkAccountToUser(user *user_model.User, gothUser goth.User) error {
+ externalLoginUser, err := toExternalLoginUser(user, gothUser)
+ if err != nil {
+ return err
}
if err := user_model.LinkExternalToUser(user, externalLoginUser); err != nil {
@@ -62,3 +68,13 @@ func LinkAccountToUser(user *user_model.User, gothUser goth.User) error {
return nil
}
+
+// UpdateExternalUser updates external user's information
+func UpdateExternalUser(user *user_model.User, gothUser goth.User) error {
+ externalLoginUser, err := toExternalLoginUser(user, gothUser)
+ if err != nil {
+ return err
+ }
+
+ return user_model.UpdateExternalUserByExternalID(externalLoginUser)
+}