Skip to content

Commit b8af23c

Browse files
adelowo6543
authored andcommitted
make sure duplicate token names cannot be used
1 parent ef89e75 commit b8af23c

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

models/token.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ func GetAccessTokenBySHA(token string) (*AccessToken, error) {
7777
return nil, ErrAccessTokenNotExist{token}
7878
}
7979

80+
// AccessTokenByNameExists checks if a token name has been used already
81+
// by a user.
82+
func AccessTokenByNameExists(token *AccessToken) bool {
83+
exists, _ := x.Get(token)
84+
return exists
85+
}
86+
8087
// ListAccessTokens returns a list of access tokens belongs to given user.
8188
func ListAccessTokens(uid int64, listOptions ListOptions) ([]*AccessToken, error) {
8289
sess := x.

models/token_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,36 @@ func TestNewAccessToken(t *testing.T) {
2727
assert.Error(t, NewAccessToken(invalidToken))
2828
}
2929

30+
func TestAccessTokenByNameExists(t *testing.T) {
31+
32+
name := "Token Gitea"
33+
34+
assert.NoError(t, PrepareTestDatabase())
35+
token := &AccessToken{
36+
UID: 3,
37+
Name: name,
38+
}
39+
40+
// Check to make sure it doesn't exists already
41+
assert.False(t, AccessTokenByNameExists(token))
42+
43+
// Save it to the database
44+
assert.NoError(t, NewAccessToken(token))
45+
AssertExistsAndLoadBean(t, token)
46+
47+
// This token must be found by name in the DB now
48+
assert.True(t, AccessTokenByNameExists(token))
49+
50+
user4Token := &AccessToken{
51+
UID: 4,
52+
Name: name,
53+
}
54+
55+
// Name matches but different user ID, this shouldn't exists in the
56+
// database
57+
assert.False(t, AccessTokenByNameExists(user4Token))
58+
}
59+
3060
func TestGetAccessTokenBySHA(t *testing.T) {
3161
assert.NoError(t, PrepareTestDatabase())
3262
token, err := GetAccessTokenBySHA("d2c6c1ba3890b309189a8e618c72a162e4efbf36")

options/locale/locale_en-US.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ new_token_desc = Applications using a token have full access to your account.
516516
token_name = Token Name
517517
generate_token = Generate Token
518518
generate_token_success = Your new token has been generated. Copy it now as it will not be shown again.
519+
generate_token_name_duplicate = <strong>%s</strong> has been used as an application name already. Please use a new one.
519520
delete_token = Delete
520521
access_token_deletion = Delete Access Token
521522
access_token_deletion_desc = Deleting a token will revoke access to your account for applications using it. Continue?

routers/user/setting/applications.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ func ApplicationsPost(ctx *context.Context, form auth.NewAccessTokenForm) {
4343
UID: ctx.User.ID,
4444
Name: form.Name,
4545
}
46+
47+
if models.AccessTokenByNameExists(t) {
48+
ctx.Flash.Error(ctx.Tr("settings.generate_token_name_duplicate", t.Name))
49+
ctx.Redirect(setting.AppSubURL + "/user/settings/applications")
50+
return
51+
}
52+
4653
if err := models.NewAccessToken(t); err != nil {
4754
ctx.ServerError("NewAccessToken", err)
4855
return

0 commit comments

Comments
 (0)