diff options
| author | haturatu <taro@eyes4you.org> | 2025-10-12 17:04:07 +0900 |
|---|---|---|
| committer | haturatu <taro@eyes4you.org> | 2025-10-12 17:04:07 +0900 |
| commit | 957dc75eddf69ccf26bd387828b9e205a5425f30 (patch) | |
| tree | 15a3f5581dded804a383c1d42e5b7d4b967da11e /models/user.go | |
| parent | 10c90d8654b94916bf0a4ffb8263e512a8e6be04 (diff) | |
add(api): api endpoint authorized Bearer token
Diffstat (limited to 'models/user.go')
| -rw-r--r-- | models/user.go | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/models/user.go b/models/user.go index c5ecdd7..f2b4e22 100644 --- a/models/user.go +++ b/models/user.go @@ -2,25 +2,12 @@ package models import ( "auth-proxy/database" + "auth-proxy/types" "database/sql" - "time" "golang.org/x/crypto/bcrypt" ) -// User represents a user in the database -type User struct { - ID int64 `json:"id"` - Username string `json:"username"` - PasswordHash string `json:"-"` - Role string `json:"role"` - IsActive bool `json:"is_active"` - FailedLogins int `json:"failed_logins"` - LastLoginAt sql.NullTime `json:"last_login_at"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` -} - // HashPassword generates a bcrypt hash of the password func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) @@ -34,7 +21,7 @@ func CheckPasswordHash(password, hash string) bool { } // CreateUser creates a new user in the database -func CreateUser(username, password, role string) (*User, error) { +func CreateUser(username, password, role string) (*types.User, error) { passwordHash, err := HashPassword(password) if err != nil { return nil, err @@ -45,7 +32,7 @@ func CreateUser(username, password, role string) (*User, error) { if err != nil { return nil, err } - defer stmt.Close() + defer stmt.Close() //nolint:errcheck _, err = stmt.Exec(username, passwordHash, role) if err != nil { @@ -59,8 +46,8 @@ func CreateUser(username, password, role string) (*User, error) { const baseSelectQuery = "SELECT id, username, password_hash, role, is_active, failed_logins, last_login_at, created_at, updated_at FROM users" // scanUser scans a row into a User struct -func scanUser(row *sql.Row) (*User, error) { - user := &User{} +func scanUser(row *sql.Row) (*types.User, error) { + user := &types.User{} err := row.Scan(&user.ID, &user.Username, &user.PasswordHash, &user.Role, &user.IsActive, &user.FailedLogins, &user.LastLoginAt, &user.CreatedAt, &user.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -72,30 +59,30 @@ func scanUser(row *sql.Row) (*User, error) { } // GetUserByUsername retrieves a user by their username -func GetUserByUsername(username string) (*User, error) { +func GetUserByUsername(username string) (*types.User, error) { query := database.Rebind(baseSelectQuery + " WHERE username = ?") row := database.DB.QueryRow(query, username) return scanUser(row) } // GetUserByID retrieves a user by their ID -func GetUserByID(id int64) (*User, error) { +func GetUserByID(id int64) (*types.User, error) { query := database.Rebind(baseSelectQuery + " WHERE id = ?") row := database.DB.QueryRow(query, id) return scanUser(row) } // GetAllUsers retrieves all users from the database -func GetAllUsers() ([]User, error) { +func GetAllUsers() ([]types.User, error) { rows, err := database.DB.Query(baseSelectQuery) if err != nil { return nil, err } - defer rows.Close() + defer rows.Close() //nolint:errcheck - var users []User + var users []types.User for rows.Next() { - var user User + var user types.User if err := rows.Scan(&user.ID, &user.Username, &user.PasswordHash, &user.Role, &user.IsActive, &user.FailedLogins, &user.LastLoginAt, &user.CreatedAt, &user.UpdatedAt); err != nil { return nil, err } @@ -144,4 +131,4 @@ func SetUserActiveStatus(id int64, isActive bool) error { query := database.Rebind("UPDATE users SET is_active = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?") _, err := database.DB.Exec(query, isActive, id) return err -}
\ No newline at end of file +} |
