2014-11-12 14:48:50 +03:00
// 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 (
"time"
2016-02-21 02:13:12 +03:00
gouuid "github.com/satori/go.uuid"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/base"
2014-11-12 14:48:50 +03:00
)
// AccessToken represents a personal access token.
type AccessToken struct {
2016-03-10 03:53:30 +03:00
ID int64 ` xorm:"pk autoincr" `
UID int64 ` xorm:"INDEX" `
Name string
Sha1 string ` xorm:"UNIQUE VARCHAR(40)" `
Created time . Time ` xorm:"-" `
2017-09-13 08:18:22 +03:00
CreatedUnix int64 ` xorm:"INDEX created" `
2017-10-01 19:52:35 +03:00
Updated time . Time ` xorm:"-" `
2017-09-13 08:18:22 +03:00
UpdatedUnix int64 ` xorm:"INDEX updated" `
2017-01-06 18:14:33 +03:00
HasRecentActivity bool ` xorm:"-" `
HasUsed bool ` xorm:"-" `
2014-11-12 14:48:50 +03:00
}
2017-10-01 19:52:35 +03:00
// AfterLoad is invoked from XORM after setting the values of all fields of this object.
func ( t * AccessToken ) AfterLoad ( ) {
t . Created = time . Unix ( t . CreatedUnix , 0 ) . Local ( )
t . Updated = time . Unix ( t . UpdatedUnix , 0 ) . Local ( )
t . HasUsed = t . Updated . After ( t . Created )
t . HasRecentActivity = t . Updated . Add ( 7 * 24 * time . Hour ) . After ( time . Now ( ) )
2016-03-10 03:53:30 +03:00
}
2014-11-12 14:48:50 +03:00
// NewAccessToken creates new access token.
func NewAccessToken ( t * AccessToken ) error {
2016-02-21 02:13:12 +03:00
t . Sha1 = base . EncodeSha1 ( gouuid . NewV4 ( ) . String ( ) )
2014-11-12 14:48:50 +03:00
_ , err := x . Insert ( t )
return err
}
2015-08-19 01:22:33 +03:00
// GetAccessTokenBySHA returns access token by given sha1.
func GetAccessTokenBySHA ( sha string ) ( * AccessToken , error ) {
2016-06-27 12:02:39 +03:00
if sha == "" {
return nil , ErrAccessTokenEmpty { }
}
2014-11-12 14:48:50 +03:00
t := & AccessToken { Sha1 : sha }
has , err := x . Get ( t )
if err != nil {
return nil , err
} else if ! has {
2015-09-02 09:40:15 +03:00
return nil , ErrAccessTokenNotExist { sha }
2014-11-12 14:48:50 +03:00
}
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 )
2016-11-10 18:16:32 +03:00
return tokens , x .
Where ( "uid=?" , uid ) .
Desc ( "id" ) .
Find ( & tokens )
2014-11-12 14:48:50 +03:00
}
2016-01-06 22:41:42 +03:00
// UpdateAccessToken updates information of access token.
func UpdateAccessToken ( t * AccessToken ) error {
2017-10-05 07:43:04 +03:00
_ , err := x . ID ( t . ID ) . AllCols ( ) . Update ( t )
2015-08-19 01:22:33 +03:00
return err
}
2015-08-18 22:36:16 +03:00
// DeleteAccessTokenByID deletes access token by given ID.
2016-12-15 11:49:06 +03:00
func DeleteAccessTokenByID ( id , userID int64 ) error {
2017-10-05 07:43:04 +03:00
cnt , err := x . ID ( id ) . Delete ( & AccessToken {
2016-12-15 11:49:06 +03:00
UID : userID ,
} )
if err != nil {
return err
} else if cnt != 1 {
return ErrAccessTokenNotExist { }
}
return nil
2014-11-12 14:48:50 +03:00
}