2021-05-09 22:08:10 +02:00
|
|
|
package bolt
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/ansible-semaphore/semaphore/db"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var globalTokenObject = db.ObjectProperties{
|
|
|
|
TableName: "token",
|
|
|
|
}
|
|
|
|
|
|
|
|
type globalToken struct {
|
|
|
|
ID string `db:"id" json:"id"`
|
|
|
|
UserID int `db:"user_id" json:"user_id"`
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (d *BoltDb) CreateSession(session db.Session) (db.Session, error) {
|
|
|
|
newSession, err := d.createObject(session.UserID, db.SessionObject, session)
|
|
|
|
if err != nil {
|
|
|
|
return db.Session{}, err
|
|
|
|
}
|
|
|
|
return newSession.(db.Session), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) CreateAPIToken(token db.APIToken) (db.APIToken, error) {
|
|
|
|
// create token in bucket "token_<user id>"
|
|
|
|
newToken, err := d.createObject(token.UserID, db.TokenObject, token)
|
|
|
|
if err != nil {
|
|
|
|
return db.APIToken{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// create token in bucket "token"
|
|
|
|
_, err = d.createObject(0, globalTokenObject, globalToken{ID: token.ID, UserID: token.UserID})
|
|
|
|
if err != nil {
|
|
|
|
return db.APIToken{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return newToken.(db.APIToken), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) GetAPIToken(tokenID string) (token db.APIToken, err error) {
|
2021-05-13 00:56:31 +02:00
|
|
|
var t globalToken
|
|
|
|
err = d.getObject(0, globalTokenObject, strObjectID(tokenID), &t)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = d.getObject(t.UserID, db.TokenObject, strObjectID(tokenID), &token)
|
2021-05-09 22:08:10 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) ExpireAPIToken(userID int, tokenID string) (err error) {
|
|
|
|
var token db.APIToken
|
|
|
|
err = d.getObject(userID, db.TokenObject, strObjectID(tokenID), &token)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
token.Expired = true
|
|
|
|
err = d.updateObject(userID, db.TokenObject, token)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) GetSession(userID int, sessionID int) (session db.Session, err error) {
|
|
|
|
err = d.getObject(userID, db.SessionObject, intObjectID(sessionID), &session)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) ExpireSession(userID int, sessionID int) (err error) {
|
|
|
|
var session db.Session
|
|
|
|
err = d.getObject(userID, db.SessionObject, intObjectID(sessionID), &session)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
session.Expired = true
|
|
|
|
err = d.updateObject(userID, db.SessionObject, session)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) TouchSession(userID int, sessionID int) (err error) {
|
|
|
|
var session db.Session
|
|
|
|
err = d.getObject(userID, db.SessionObject, intObjectID(sessionID), &session)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
session.LastActive = time.Now()
|
|
|
|
err = d.updateObject(userID, db.SessionObject, session)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *BoltDb) GetAPITokens(userID int) (tokens []db.APIToken, err error) {
|
2021-05-13 15:49:32 +02:00
|
|
|
err = d.getObjects(userID, db.SessionObject, db.RetrieveQueryParams{}, nil, &tokens)
|
2021-05-09 22:08:10 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|