AnthoLume/database/migrations/20240128012356_user_auth_hash.go

64 lines
1.1 KiB
Go
Raw Normal View History

package migrations
import (
"context"
"database/sql"
"fmt"
"github.com/pressly/goose/v3"
"reichard.io/antholume/utils"
)
func init() {
goose.AddMigrationContext(upUserAuthHash, downUserAuthHash)
}
func upUserAuthHash(ctx context.Context, tx *sql.Tx) error {
// Create now column
_, err := tx.Exec("ALTER TABLE users ADD COLUMN auth_hash TEXT")
if err != nil {
return err
}
// Get current users
rows, err := tx.Query("SELECT id FROM users")
if err != nil {
return err
}
// Query existing users
var users []string
for rows.Next() {
var user string
if err := rows.Scan(&user); err != nil {
return err
}
users = append(users, user)
}
// Create auth hash per user
for _, user := range users {
rawAuthHash, err := utils.GenerateToken(64)
if err != nil {
return err
}
authHash := fmt.Sprintf("%x", rawAuthHash)
_, err = tx.Exec("UPDATE users SET auth_hash = ? WHERE id = ?", authHash, user)
if err != nil {
return err
}
}
return nil
}
func downUserAuthHash(ctx context.Context, tx *sql.Tx) error {
// Drop column
_, err := tx.Exec("ALTER users DROP COLUMN auth_hash")
if err != nil {
return err
}
return nil
}