add basic auth with uuid-based access tokens

This commit is contained in:
wisplite
2025-08-27 02:42:48 -05:00
parent 8263f9c50a
commit 362d61eb48
6 changed files with 123 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
package services
import (
"time"
"github.com/google/uuid"
"github.com/wisplite/raster/internal/db"
"github.com/wisplite/raster/internal/models"
)
func CreateAccessToken(userID string) (models.AccessToken, error) {
token := uuid.New().String()
expires := time.Now().Add(time.Hour * 24 * 30)
accessToken := models.AccessToken{
Token: token,
UserID: userID,
Expires: expires,
}
result := db.GetDB().Create(&accessToken)
if result.Error != nil {
return models.AccessToken{}, result.Error
}
return accessToken, nil
}
+44
View File
@@ -0,0 +1,44 @@
package services
import (
"log"
"github.com/wisplite/raster/internal/db"
"github.com/wisplite/raster/internal/models"
"golang.org/x/crypto/bcrypt"
)
func CreateUser(username string, password string) error {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
log.Fatal("failed to hash password: ", err)
return err
}
user := models.User{
Username: username,
Password: string(hashedPassword),
IsAdmin: false,
}
result := db.GetDB().Create(&user)
if result.Error != nil {
return result.Error
}
return nil
}
func Login(username string, password string) (models.AccessToken, error) {
user := models.User{}
result := db.GetDB().First(&user, "username = ?", username)
if result.Error != nil {
return models.AccessToken{}, result.Error
}
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
if err != nil {
return models.AccessToken{}, err
}
accessToken, err := CreateAccessToken(user.ID)
if err != nil {
return models.AccessToken{}, err
}
return accessToken, nil
}