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 }