62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"time"
|
|
|
|
"arimelody-web/model"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
const TOKEN_LEN = 32
|
|
|
|
func CreateToken(db *sqlx.DB, accountID string, userAgent string) (*model.Token, error) {
|
|
tokenString := GenerateAlnumString(TOKEN_LEN)
|
|
|
|
token := model.Token{
|
|
Token: string(tokenString),
|
|
AccountID: accountID,
|
|
UserAgent: userAgent,
|
|
CreatedAt: time.Now(),
|
|
ExpiresAt: time.Now().Add(time.Hour * 24),
|
|
}
|
|
|
|
_, err := db.Exec("INSERT INTO token " +
|
|
"(token, account, user_agent, created_at, expires_at) VALUES " +
|
|
"($1, $2, $3, $4, $5)",
|
|
token.Token,
|
|
token.AccountID,
|
|
token.UserAgent,
|
|
token.CreatedAt,
|
|
token.ExpiresAt,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &token, nil
|
|
}
|
|
|
|
func GetToken(db *sqlx.DB, token_str string) (*model.Token, error) {
|
|
token := model.Token{}
|
|
err := db.Get(&token, "SELECT * FROM token WHERE token=$1", token_str)
|
|
return &token, err
|
|
}
|
|
|
|
func GetAllTokensForAccount(db *sqlx.DB, accountID string) ([]model.Token, error) {
|
|
tokens := []model.Token{}
|
|
err := db.Select(&tokens, "SELECT * FROM token WHERE account=$1 AND expires_at>current_timestamp", accountID)
|
|
return tokens, err
|
|
}
|
|
|
|
func DeleteAllTokensForAccount(db *sqlx.DB, accountID string) error {
|
|
_, err := db.Exec("DELETE FROM token WHERE account=$1", accountID)
|
|
return err
|
|
}
|
|
|
|
func DeleteToken(db *sqlx.DB, token string) error {
|
|
_, err := db.Exec("DELETE FROM token WHERE token=$1", token)
|
|
return err
|
|
}
|
|
|