diff options
author | Unknwon <joe2010xtmf@163.com> | 2014-11-12 06:48:50 -0500 |
---|---|---|
committer | Unknwon <joe2010xtmf@163.com> | 2014-11-12 06:48:50 -0500 |
commit | 8c9338a5377c60c84cdee1f5781b3de5933bb3b0 (patch) | |
tree | 57de36743bf8b9c8eaa0ff51172180b834354c4d /models | |
parent | 21b9d5fa1f4014b30619d221f5d665509d373147 (diff) | |
download | gitea-8c9338a5377c60c84cdee1f5781b3de5933bb3b0.tar.gz gitea-8c9338a5377c60c84cdee1f5781b3de5933bb3b0.zip |
add personal access token panel #12
Diffstat (limited to 'models')
-rw-r--r-- | models/models.go | 3 | ||||
-rw-r--r-- | models/publickey.go | 6 | ||||
-rw-r--r-- | models/token.go | 69 |
3 files changed, 74 insertions, 4 deletions
diff --git a/models/models.go b/models/models.go index b4f5f0a2db..92a579dfcc 100644 --- a/models/models.go +++ b/models/models.go @@ -39,7 +39,8 @@ var ( ) func init() { - tables = append(tables, new(User), new(PublicKey), new(Follow), new(Oauth2), + tables = append(tables, + new(User), new(PublicKey), new(Follow), new(Oauth2), new(AccessToken), new(Repository), new(Watch), new(Star), new(Action), new(Access), new(Issue), new(Comment), new(Attachment), new(IssueUser), new(Label), new(Milestone), new(Mirror), new(Release), new(LoginSource), new(Webhook), diff --git a/models/publickey.go b/models/publickey.go index 762d7333fa..f5e487fdbb 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -236,10 +236,10 @@ func GetPublicKeyById(keyId int64) (*PublicKey, error) { return key, nil } -// ListPublicKey returns a list of all public keys that user has. -func ListPublicKey(uid int64) ([]*PublicKey, error) { +// ListPublicKeys returns a list of public keys belongs to given user. +func ListPublicKeys(uid int64) ([]*PublicKey, error) { keys := make([]*PublicKey, 0, 5) - err := x.Find(&keys, &PublicKey{OwnerId: uid}) + err := x.Where("owner_id=?", uid).Find(&keys) if err != nil { return nil, err } diff --git a/models/token.go b/models/token.go new file mode 100644 index 0000000000..909d05e072 --- /dev/null +++ b/models/token.go @@ -0,0 +1,69 @@ +// Copyright 2014 The Gogs 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" + "time" + + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/uuid" +) + +var ( + ErrAccessTokenNotExist = errors.New("Access token does not exist") +) + +// AccessToken represents a personal access token. +type AccessToken struct { + Id int64 + Uid int64 + Name string + Sha1 string `xorm:"UNIQUE VARCHAR(40)"` + Created time.Time `xorm:"CREATED"` + Updated time.Time + HasRecentActivity bool `xorm:"-"` + HasUsed bool `xorm:"-"` +} + +// NewAccessToken creates new access token. +func NewAccessToken(t *AccessToken) error { + t.Sha1 = base.EncodeSha1(uuid.NewV4().String()) + _, err := x.Insert(t) + return err +} + +// GetAccessTokenBySha returns access token by given sha1. +func GetAccessTokenBySha(sha string) (*AccessToken, error) { + t := &AccessToken{Sha1: sha} + has, err := x.Get(t) + if err != nil { + return nil, err + } else if !has { + return nil, ErrAccessTokenNotExist + } + return t, nil +} + +// ListAccessTokens returns a list of access tokens belongs to given user. +func ListAccessTokens(uid int64) ([]*AccessToken, error) { + tokens := make([]*AccessToken, 0, 5) + err := x.Where("uid=?", uid).Desc("id").Find(&tokens) + if err != nil { + return nil, err + } + + for _, t := range tokens { + t.HasUsed = t.Updated.After(t.Created) + t.HasRecentActivity = t.Updated.Add(7 * 24 * time.Hour).After(time.Now()) + } + return tokens, nil +} + +// DeleteAccessTokenById deletes access token by given ID. +func DeleteAccessTokenById(id int64) error { + _, err := x.Id(id).Delete(new(AccessToken)) + return err +} |