diff options
Diffstat (limited to 'models/token.go')
-rw-r--r-- | models/token.go | 69 |
1 files changed, 69 insertions, 0 deletions
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 +} |