linters:
- staticcheck
text: "svc.IsAnInteractiveSession is deprecated: Use IsWindowsService instead."
+ - path: models/user/openid.go
+ linters:
+ - golint
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
)
func assertUserDeleted(t *testing.T, userID int64) {
unittest.AssertNotExistsBean(t, &models.User{ID: userID})
- unittest.AssertNotExistsBean(t, &models.Follow{UserID: userID})
- unittest.AssertNotExistsBean(t, &models.Follow{FollowID: userID})
+ unittest.AssertNotExistsBean(t, &user_model.Follow{UserID: userID})
+ unittest.AssertNotExistsBean(t, &user_model.Follow{FollowID: userID})
unittest.AssertNotExistsBean(t, &models.Repository{OwnerID: userID})
unittest.AssertNotExistsBean(t, &models.Access{UserID: userID})
unittest.AssertNotExistsBean(t, &models.OrgUser{UID: userID})
return fmt.Sprintf("user is inactive [uid: %d, name: %s]", err.UID, err.Name)
}
-// ErrOpenIDAlreadyUsed represents a "OpenIDAlreadyUsed" kind of error.
-type ErrOpenIDAlreadyUsed struct {
- OpenID string
-}
-
-// IsErrOpenIDAlreadyUsed checks if an error is a ErrOpenIDAlreadyUsed.
-func IsErrOpenIDAlreadyUsed(err error) bool {
- _, ok := err.(ErrOpenIDAlreadyUsed)
- return ok
-}
-
-func (err ErrOpenIDAlreadyUsed) Error() string {
- return fmt.Sprintf("OpenID already in use [oid: %s]", err.OpenID)
-}
-
// ErrUserOwnRepos represents a "UserOwnRepos" kind of error.
type ErrUserOwnRepos struct {
UID int64
import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/login"
+ user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/models/webhook"
"code.gitea.io/gitea/modules/setting"
)
stats.Counter.Comment, _ = e.Count(new(Comment))
stats.Counter.Oauth = 0
- stats.Counter.Follow, _ = e.Count(new(Follow))
+ stats.Counter.Follow, _ = e.Count(new(user_model.Follow))
stats.Counter.Mirror, _ = e.Count(new(Mirror))
stats.Counter.Release, _ = e.Count(new(Release))
stats.Counter.LoginSource = login.CountSources()
"code.gitea.io/gitea/models/login"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/auth/openid"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
// IsFollowing returns true if user is following followID.
func (u *User) IsFollowing(followID int64) bool {
- return IsFollowing(u.ID, followID)
+ return user_model.IsFollowing(u.ID, followID)
}
// GetFollowing returns range of user's following.
}
// If they follow - they see each over
- follower := IsFollowing(u.ID, viewer.ID)
+ follower := user_model.IsFollowing(u.ID, viewer.ID)
if follower {
return true
}
&Access{UserID: u.ID},
&Watch{UserID: u.ID},
&Star{UID: u.ID},
- &Follow{UserID: u.ID},
- &Follow{FollowID: u.ID},
+ &user_model.Follow{UserID: u.ID},
+ &user_model.Follow{FollowID: u.ID},
&Action{UserID: u.ID},
&IssueUser{UID: u.ID},
&user_model.EmailAddress{UID: u.ID},
- &UserOpenID{UID: u.ID},
+ &user_model.UserOpenID{UID: u.ID},
&Reaction{UserID: u.ID},
&TeamUser{UID: u.ID},
&Collaboration{UserID: u.ID},
}
}
}
+
+// GetUserByOpenID returns the user object by given OpenID if exists.
+func GetUserByOpenID(uri string) (*User, error) {
+ if len(uri) == 0 {
+ return nil, ErrUserNotExist{0, uri, 0}
+ }
+
+ uri, err := openid.Normalize(uri)
+ if err != nil {
+ return nil, err
+ }
+
+ log.Trace("Normalized OpenID URI: " + uri)
+
+ // Otherwise, check in openid table
+ oid := &user_model.UserOpenID{}
+ has, err := db.GetEngine(db.DefaultContext).Where("uri=?", uri).Get(oid)
+ if err != nil {
+ return nil, err
+ }
+ if has {
+ return GetUserByID(oid.UID)
+ }
+
+ return nil, ErrUserNotExist{0, uri, 0}
+}
--- /dev/null
+// Copyright 2017 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 user
+
+import (
+ "code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/modules/timeutil"
+)
+
+// Follow represents relations of user and his/her followers.
+type Follow struct {
+ ID int64 `xorm:"pk autoincr"`
+ UserID int64 `xorm:"UNIQUE(follow)"`
+ FollowID int64 `xorm:"UNIQUE(follow)"`
+ CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
+}
+
+func init() {
+ db.RegisterModel(new(Follow))
+}
+
+// IsFollowing returns true if user is following followID.
+func IsFollowing(userID, followID int64) bool {
+ has, _ := db.GetEngine(db.DefaultContext).Get(&Follow{UserID: userID, FollowID: followID})
+ return has
+}
+
+// FollowUser marks someone be another's follower.
+func FollowUser(userID, followID int64) (err error) {
+ if userID == followID || IsFollowing(userID, followID) {
+ return nil
+ }
+
+ sess := db.NewSession(db.DefaultContext)
+ defer sess.Close()
+ if err = sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err = sess.Insert(&Follow{UserID: userID, FollowID: followID}); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers + 1 WHERE id = ?", followID); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_following = num_following + 1 WHERE id = ?", userID); err != nil {
+ return err
+ }
+ return sess.Commit()
+}
+
+// UnfollowUser unmarks someone as another's follower.
+func UnfollowUser(userID, followID int64) (err error) {
+ if userID == followID || !IsFollowing(userID, followID) {
+ return nil
+ }
+
+ sess := db.NewSession(db.DefaultContext)
+ defer sess.Close()
+ if err = sess.Begin(); err != nil {
+ return err
+ }
+
+ if _, err = sess.Delete(&Follow{UserID: userID, FollowID: followID}); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers - 1 WHERE id = ?", followID); err != nil {
+ return err
+ }
+
+ if _, err = sess.Exec("UPDATE `user` SET num_following = num_following - 1 WHERE id = ?", userID); err != nil {
+ return err
+ }
+ return sess.Commit()
+}
--- /dev/null
+// Copyright 2020 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 user
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestIsFollowing(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ assert.True(t, IsFollowing(4, 2))
+ assert.False(t, IsFollowing(2, 4))
+ assert.False(t, IsFollowing(5, unittest.NonexistentID))
+ assert.False(t, IsFollowing(unittest.NonexistentID, 5))
+ assert.False(t, IsFollowing(unittest.NonexistentID, unittest.NonexistentID))
+}
unittest.MainTest(m, filepath.Join("..", ".."),
"email_address.yml",
"user_redirect.yml",
+ "follow.yml",
+ "user_open_id.yml",
)
}
--- /dev/null
+// Copyright 2017 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 user
+
+import (
+ "errors"
+ "fmt"
+
+ "code.gitea.io/gitea/models/db"
+)
+
+// ErrOpenIDNotExist openid is not known
+var ErrOpenIDNotExist = errors.New("OpenID is unknown")
+
+// UserOpenID is the list of all OpenID identities of a user.
+// Since this is a middle table, name it OpenID is not suitable, so we ignore the lint here
+type UserOpenID struct { //revive:disable-line:exported
+ ID int64 `xorm:"pk autoincr"`
+ UID int64 `xorm:"INDEX NOT NULL"`
+ URI string `xorm:"UNIQUE NOT NULL"`
+ Show bool `xorm:"DEFAULT false"`
+}
+
+func init() {
+ db.RegisterModel(new(UserOpenID))
+}
+
+// GetUserOpenIDs returns all openid addresses that belongs to given user.
+func GetUserOpenIDs(uid int64) ([]*UserOpenID, error) {
+ openids := make([]*UserOpenID, 0, 5)
+ if err := db.GetEngine(db.DefaultContext).
+ Where("uid=?", uid).
+ Asc("id").
+ Find(&openids); err != nil {
+ return nil, err
+ }
+
+ return openids, nil
+}
+
+// isOpenIDUsed returns true if the openid has been used.
+func isOpenIDUsed(e db.Engine, uri string) (bool, error) {
+ if len(uri) == 0 {
+ return true, nil
+ }
+
+ return e.Get(&UserOpenID{URI: uri})
+}
+
+// ErrOpenIDAlreadyUsed represents a "OpenIDAlreadyUsed" kind of error.
+type ErrOpenIDAlreadyUsed struct {
+ OpenID string
+}
+
+// IsErrOpenIDAlreadyUsed checks if an error is a ErrOpenIDAlreadyUsed.
+func IsErrOpenIDAlreadyUsed(err error) bool {
+ _, ok := err.(ErrOpenIDAlreadyUsed)
+ return ok
+}
+
+func (err ErrOpenIDAlreadyUsed) Error() string {
+ return fmt.Sprintf("OpenID already in use [oid: %s]", err.OpenID)
+}
+
+// NOTE: make sure openid.URI is normalized already
+func addUserOpenID(e db.Engine, openid *UserOpenID) error {
+ used, err := isOpenIDUsed(e, openid.URI)
+ if err != nil {
+ return err
+ } else if used {
+ return ErrOpenIDAlreadyUsed{openid.URI}
+ }
+
+ _, err = e.Insert(openid)
+ return err
+}
+
+// AddUserOpenID adds an pre-verified/normalized OpenID URI to given user.
+func AddUserOpenID(openid *UserOpenID) error {
+ return addUserOpenID(db.GetEngine(db.DefaultContext), openid)
+}
+
+// DeleteUserOpenID deletes an openid address of given user.
+func DeleteUserOpenID(openid *UserOpenID) (err error) {
+ var deleted int64
+ // ask to check UID
+ address := UserOpenID{
+ UID: openid.UID,
+ }
+ if openid.ID > 0 {
+ deleted, err = db.GetEngine(db.DefaultContext).ID(openid.ID).Delete(&address)
+ } else {
+ deleted, err = db.GetEngine(db.DefaultContext).
+ Where("openid=?", openid.URI).
+ Delete(&address)
+ }
+
+ if err != nil {
+ return err
+ } else if deleted != 1 {
+ return ErrOpenIDNotExist
+ }
+ return nil
+}
+
+// ToggleUserOpenIDVisibility toggles visibility of an openid address of given user.
+func ToggleUserOpenIDVisibility(id int64) (err error) {
+ _, err = db.GetEngine(db.DefaultContext).Exec("update `user_open_id` set `show` = not `show` where `id` = ?", id)
+ return err
+}
--- /dev/null
+// Copyright 2017 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 user
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGetUserOpenIDs(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ oids, err := GetUserOpenIDs(int64(1))
+ if assert.NoError(t, err) && assert.Len(t, oids, 2) {
+ assert.Equal(t, "https://user1.domain1.tld/", oids[0].URI)
+ assert.False(t, oids[0].Show)
+ assert.Equal(t, "http://user1.domain2.tld/", oids[1].URI)
+ assert.True(t, oids[1].Show)
+ }
+
+ oids, err = GetUserOpenIDs(int64(2))
+ if assert.NoError(t, err) && assert.Len(t, oids, 1) {
+ assert.Equal(t, "https://domain1.tld/user2/", oids[0].URI)
+ assert.True(t, oids[0].Show)
+ }
+}
+
+func TestToggleUserOpenIDVisibility(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ oids, err := GetUserOpenIDs(int64(2))
+ if !assert.NoError(t, err) || !assert.Len(t, oids, 1) {
+ return
+ }
+ assert.True(t, oids[0].Show)
+
+ err = ToggleUserOpenIDVisibility(oids[0].ID)
+ if !assert.NoError(t, err) {
+ return
+ }
+
+ oids, err = GetUserOpenIDs(int64(2))
+ if !assert.NoError(t, err) || !assert.Len(t, oids, 1) {
+ return
+ }
+ assert.False(t, oids[0].Show)
+ err = ToggleUserOpenIDVisibility(oids[0].ID)
+ if !assert.NoError(t, err) {
+ return
+ }
+
+ oids, err = GetUserOpenIDs(int64(2))
+ if !assert.NoError(t, err) {
+ return
+ }
+ if assert.Len(t, oids, 1) {
+ assert.True(t, oids[0].Show)
+ }
+}
+++ /dev/null
-// Copyright 2017 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 models
-
-import (
- "code.gitea.io/gitea/models/db"
- "code.gitea.io/gitea/modules/timeutil"
-)
-
-// Follow represents relations of user and his/her followers.
-type Follow struct {
- ID int64 `xorm:"pk autoincr"`
- UserID int64 `xorm:"UNIQUE(follow)"`
- FollowID int64 `xorm:"UNIQUE(follow)"`
- CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
-}
-
-func init() {
- db.RegisterModel(new(Follow))
-}
-
-// IsFollowing returns true if user is following followID.
-func IsFollowing(userID, followID int64) bool {
- has, _ := db.GetEngine(db.DefaultContext).Get(&Follow{UserID: userID, FollowID: followID})
- return has
-}
-
-// FollowUser marks someone be another's follower.
-func FollowUser(userID, followID int64) (err error) {
- if userID == followID || IsFollowing(userID, followID) {
- return nil
- }
-
- sess := db.NewSession(db.DefaultContext)
- defer sess.Close()
- if err = sess.Begin(); err != nil {
- return err
- }
-
- if _, err = sess.Insert(&Follow{UserID: userID, FollowID: followID}); err != nil {
- return err
- }
-
- if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers + 1 WHERE id = ?", followID); err != nil {
- return err
- }
-
- if _, err = sess.Exec("UPDATE `user` SET num_following = num_following + 1 WHERE id = ?", userID); err != nil {
- return err
- }
- return sess.Commit()
-}
-
-// UnfollowUser unmarks someone as another's follower.
-func UnfollowUser(userID, followID int64) (err error) {
- if userID == followID || !IsFollowing(userID, followID) {
- return nil
- }
-
- sess := db.NewSession(db.DefaultContext)
- defer sess.Close()
- if err = sess.Begin(); err != nil {
- return err
- }
-
- if _, err = sess.Delete(&Follow{UserID: userID, FollowID: followID}); err != nil {
- return err
- }
-
- if _, err = sess.Exec("UPDATE `user` SET num_followers = num_followers - 1 WHERE id = ?", followID); err != nil {
- return err
- }
-
- if _, err = sess.Exec("UPDATE `user` SET num_following = num_following - 1 WHERE id = ?", userID); err != nil {
- return err
- }
- return sess.Commit()
-}
+++ /dev/null
-// Copyright 2020 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 models
-
-import (
- "testing"
-
- "code.gitea.io/gitea/models/unittest"
- "github.com/stretchr/testify/assert"
-)
-
-func TestIsFollowing(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
- assert.True(t, IsFollowing(4, 2))
- assert.False(t, IsFollowing(2, 4))
- assert.False(t, IsFollowing(5, unittest.NonexistentID))
- assert.False(t, IsFollowing(unittest.NonexistentID, 5))
- assert.False(t, IsFollowing(unittest.NonexistentID, unittest.NonexistentID))
-}
-
-func TestFollowUser(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
-
- testSuccess := func(followerID, followedID int64) {
- assert.NoError(t, FollowUser(followerID, followedID))
- unittest.AssertExistsAndLoadBean(t, &Follow{UserID: followerID, FollowID: followedID})
- }
- testSuccess(4, 2)
- testSuccess(5, 2)
-
- assert.NoError(t, FollowUser(2, 2))
-
- unittest.CheckConsistencyFor(t, &User{})
-}
-
-func TestUnfollowUser(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
-
- testSuccess := func(followerID, followedID int64) {
- assert.NoError(t, UnfollowUser(followerID, followedID))
- unittest.AssertNotExistsBean(t, &Follow{UserID: followerID, FollowID: followedID})
- }
- testSuccess(4, 2)
- testSuccess(5, 2)
- testSuccess(2, 2)
-
- unittest.CheckConsistencyFor(t, &User{})
-}
+++ /dev/null
-// Copyright 2017 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 models
-
-import (
- "errors"
-
- "code.gitea.io/gitea/models/db"
- "code.gitea.io/gitea/modules/auth/openid"
- "code.gitea.io/gitea/modules/log"
-)
-
-// ErrOpenIDNotExist openid is not known
-var ErrOpenIDNotExist = errors.New("OpenID is unknown")
-
-// UserOpenID is the list of all OpenID identities of a user.
-type UserOpenID struct {
- ID int64 `xorm:"pk autoincr"`
- UID int64 `xorm:"INDEX NOT NULL"`
- URI string `xorm:"UNIQUE NOT NULL"`
- Show bool `xorm:"DEFAULT false"`
-}
-
-func init() {
- db.RegisterModel(new(UserOpenID))
-}
-
-// GetUserOpenIDs returns all openid addresses that belongs to given user.
-func GetUserOpenIDs(uid int64) ([]*UserOpenID, error) {
- openids := make([]*UserOpenID, 0, 5)
- if err := db.GetEngine(db.DefaultContext).
- Where("uid=?", uid).
- Asc("id").
- Find(&openids); err != nil {
- return nil, err
- }
-
- return openids, nil
-}
-
-// isOpenIDUsed returns true if the openid has been used.
-func isOpenIDUsed(e db.Engine, uri string) (bool, error) {
- if len(uri) == 0 {
- return true, nil
- }
-
- return e.Get(&UserOpenID{URI: uri})
-}
-
-// NOTE: make sure openid.URI is normalized already
-func addUserOpenID(e db.Engine, openid *UserOpenID) error {
- used, err := isOpenIDUsed(e, openid.URI)
- if err != nil {
- return err
- } else if used {
- return ErrOpenIDAlreadyUsed{openid.URI}
- }
-
- _, err = e.Insert(openid)
- return err
-}
-
-// AddUserOpenID adds an pre-verified/normalized OpenID URI to given user.
-func AddUserOpenID(openid *UserOpenID) error {
- return addUserOpenID(db.GetEngine(db.DefaultContext), openid)
-}
-
-// DeleteUserOpenID deletes an openid address of given user.
-func DeleteUserOpenID(openid *UserOpenID) (err error) {
- var deleted int64
- // ask to check UID
- address := UserOpenID{
- UID: openid.UID,
- }
- if openid.ID > 0 {
- deleted, err = db.GetEngine(db.DefaultContext).ID(openid.ID).Delete(&address)
- } else {
- deleted, err = db.GetEngine(db.DefaultContext).
- Where("openid=?", openid.URI).
- Delete(&address)
- }
-
- if err != nil {
- return err
- } else if deleted != 1 {
- return ErrOpenIDNotExist
- }
- return nil
-}
-
-// ToggleUserOpenIDVisibility toggles visibility of an openid address of given user.
-func ToggleUserOpenIDVisibility(id int64) (err error) {
- _, err = db.GetEngine(db.DefaultContext).Exec("update `user_open_id` set `show` = not `show` where `id` = ?", id)
- return err
-}
-
-// GetUserByOpenID returns the user object by given OpenID if exists.
-func GetUserByOpenID(uri string) (*User, error) {
- if len(uri) == 0 {
- return nil, ErrUserNotExist{0, uri, 0}
- }
-
- uri, err := openid.Normalize(uri)
- if err != nil {
- return nil, err
- }
-
- log.Trace("Normalized OpenID URI: " + uri)
-
- // Otherwise, check in openid table
- oid := &UserOpenID{}
- has, err := db.GetEngine(db.DefaultContext).Where("uri=?", uri).Get(oid)
- if err != nil {
- return nil, err
- }
- if has {
- return GetUserByID(oid.UID)
- }
-
- return nil, ErrUserNotExist{0, uri, 0}
-}
+++ /dev/null
-// Copyright 2017 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 models
-
-import (
- "testing"
-
- "code.gitea.io/gitea/models/unittest"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestGetUserOpenIDs(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
-
- oids, err := GetUserOpenIDs(int64(1))
- if assert.NoError(t, err) && assert.Len(t, oids, 2) {
- assert.Equal(t, "https://user1.domain1.tld/", oids[0].URI)
- assert.False(t, oids[0].Show)
- assert.Equal(t, "http://user1.domain2.tld/", oids[1].URI)
- assert.True(t, oids[1].Show)
- }
-
- oids, err = GetUserOpenIDs(int64(2))
- if assert.NoError(t, err) && assert.Len(t, oids, 1) {
- assert.Equal(t, "https://domain1.tld/user2/", oids[0].URI)
- assert.True(t, oids[0].Show)
- }
-}
-
-func TestGetUserByOpenID(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
-
- _, err := GetUserByOpenID("https://unknown")
- if assert.Error(t, err) {
- assert.True(t, IsErrUserNotExist(err))
- }
-
- user, err := GetUserByOpenID("https://user1.domain1.tld")
- if assert.NoError(t, err) {
- assert.Equal(t, int64(1), user.ID)
- }
-
- user, err = GetUserByOpenID("https://domain1.tld/user2/")
- if assert.NoError(t, err) {
- assert.Equal(t, int64(2), user.ID)
- }
-}
-
-func TestToggleUserOpenIDVisibility(t *testing.T) {
- assert.NoError(t, unittest.PrepareTestDatabase())
- oids, err := GetUserOpenIDs(int64(2))
- if !assert.NoError(t, err) || !assert.Len(t, oids, 1) {
- return
- }
- assert.True(t, oids[0].Show)
-
- err = ToggleUserOpenIDVisibility(oids[0].ID)
- if !assert.NoError(t, err) {
- return
- }
-
- oids, err = GetUserOpenIDs(int64(2))
- if !assert.NoError(t, err) || !assert.Len(t, oids, 1) {
- return
- }
- assert.False(t, oids[0].Show)
- err = ToggleUserOpenIDVisibility(oids[0].ID)
- if !assert.NoError(t, err) {
- return
- }
-
- oids, err = GetUserOpenIDs(int64(2))
- if !assert.NoError(t, err) {
- return
- }
- if assert.Len(t, oids, 1) {
- assert.True(t, oids[0].Show)
- }
-}
RedirectUserID: user.ID,
})
}
+
+func TestFollowUser(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ testSuccess := func(followerID, followedID int64) {
+ assert.NoError(t, user_model.FollowUser(followerID, followedID))
+ unittest.AssertExistsAndLoadBean(t, &user_model.Follow{UserID: followerID, FollowID: followedID})
+ }
+ testSuccess(4, 2)
+ testSuccess(5, 2)
+
+ assert.NoError(t, user_model.FollowUser(2, 2))
+
+ unittest.CheckConsistencyFor(t, &User{})
+}
+
+func TestUnfollowUser(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ testSuccess := func(followerID, followedID int64) {
+ assert.NoError(t, user_model.UnfollowUser(followerID, followedID))
+ unittest.AssertNotExistsBean(t, &user_model.Follow{UserID: followerID, FollowID: followedID})
+ }
+ testSuccess(4, 2)
+ testSuccess(5, 2)
+ testSuccess(2, 2)
+
+ unittest.CheckConsistencyFor(t, &User{})
+}
+
+func TestGetUserByOpenID(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ _, err := GetUserByOpenID("https://unknown")
+ if assert.Error(t, err) {
+ assert.True(t, IsErrUserNotExist(err))
+ }
+
+ user, err := GetUserByOpenID("https://user1.domain1.tld")
+ if assert.NoError(t, err) {
+ assert.Equal(t, int64(1), user.ID)
+ }
+
+ user, err = GetUserByOpenID("https://domain1.tld/user2/")
+ if assert.NoError(t, err) {
+ assert.Equal(t, int64(2), user.ID)
+ }
+}
"net/http"
"code.gitea.io/gitea/models"
+ user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/convert"
api "code.gitea.io/gitea/modules/structs"
if ctx.Written() {
return
}
- if err := models.FollowUser(ctx.User.ID, target.ID); err != nil {
+ if err := user_model.FollowUser(ctx.User.ID, target.ID); err != nil {
ctx.Error(http.StatusInternalServerError, "FollowUser", err)
return
}
if ctx.Written() {
return
}
- if err := models.UnfollowUser(ctx.User.ID, target.ID); err != nil {
+ if err := user_model.UnfollowUser(ctx.User.ID, target.ID); err != nil {
ctx.Error(http.StatusInternalServerError, "UnfollowUser", err)
return
}
"net/url"
"code.gitea.io/gitea/models"
+ user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/auth/openid"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
}
// add OpenID for the user
- userOID := &models.UserOpenID{UID: u.ID, URI: oid}
- if err = models.AddUserOpenID(userOID); err != nil {
- if models.IsErrOpenIDAlreadyUsed(err) {
+ userOID := &user_model.UserOpenID{UID: u.ID, URI: oid}
+ if err = user_model.AddUserOpenID(userOID); err != nil {
+ if user_model.IsErrOpenIDAlreadyUsed(err) {
ctx.RenderWithErr(ctx.Tr("form.openid_been_used", oid), tplConnectOID, &form)
return
}
}
// add OpenID for the user
- userOID := &models.UserOpenID{UID: u.ID, URI: oid}
- if err = models.AddUserOpenID(userOID); err != nil {
- if models.IsErrOpenIDAlreadyUsed(err) {
+ userOID := &user_model.UserOpenID{UID: u.ID, URI: oid}
+ if err = user_model.AddUserOpenID(userOID); err != nil {
+ if user_model.IsErrOpenIDAlreadyUsed(err) {
ctx.RenderWithErr(ctx.Tr("form.openid_been_used", oid), tplSignUpOID, &form)
return
}
}
// Show OpenID URIs
- openIDs, err := models.GetUserOpenIDs(ctxUser.ID)
+ openIDs, err := user_model.GetUserOpenIDs(ctxUser.ID)
if err != nil {
ctx.ServerError("GetUserOpenIDs", err)
return
var err error
switch ctx.Params(":action") {
case "follow":
- err = models.FollowUser(ctx.User.ID, u.ID)
+ err = user_model.FollowUser(ctx.User.ID, u.ID)
case "unfollow":
- err = models.UnfollowUser(ctx.User.ID, u.ID)
+ err = user_model.UnfollowUser(ctx.User.ID, u.ID)
}
if err != nil {
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/login"
+ user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting"
}
ctx.Data["AccountLinks"] = sources
- openid, err := models.GetUserOpenIDs(ctx.User.ID)
+ openid, err := user_model.GetUserOpenIDs(ctx.User.ID)
if err != nil {
ctx.ServerError("GetUserOpenIDs", err)
return
import (
"net/http"
- "code.gitea.io/gitea/models"
+ user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/auth/openid"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
form.Openid = id
log.Trace("Normalized id: " + id)
- oids, err := models.GetUserOpenIDs(ctx.User.ID)
+ oids, err := user_model.GetUserOpenIDs(ctx.User.ID)
if err != nil {
ctx.ServerError("GetUserOpenIDs", err)
return
log.Trace("Verified ID: " + id)
- oid := &models.UserOpenID{UID: ctx.User.ID, URI: id}
- if err = models.AddUserOpenID(oid); err != nil {
- if models.IsErrOpenIDAlreadyUsed(err) {
+ oid := &user_model.UserOpenID{UID: ctx.User.ID, URI: id}
+ if err = user_model.AddUserOpenID(oid); err != nil {
+ if user_model.IsErrOpenIDAlreadyUsed(err) {
ctx.RenderWithErr(ctx.Tr("form.openid_been_used", id), tplSettingsSecurity, &forms.AddOpenIDForm{Openid: id})
return
}
// DeleteOpenID response for delete user's openid
func DeleteOpenID(ctx *context.Context) {
- if err := models.DeleteUserOpenID(&models.UserOpenID{ID: ctx.FormInt64("id"), UID: ctx.User.ID}); err != nil {
+ if err := user_model.DeleteUserOpenID(&user_model.UserOpenID{ID: ctx.FormInt64("id"), UID: ctx.User.ID}); err != nil {
ctx.ServerError("DeleteUserOpenID", err)
return
}
// ToggleOpenIDVisibility response for toggle visibility of user's openid
func ToggleOpenIDVisibility(ctx *context.Context) {
- if err := models.ToggleUserOpenIDVisibility(ctx.FormInt64("id")); err != nil {
+ if err := user_model.ToggleUserOpenIDVisibility(ctx.FormInt64("id")); err != nil {
ctx.ServerError("ToggleUserOpenIDVisibility", err)
return
}