mirror of
https://github.com/wisplite/raster.git
synced 2026-05-01 06:32:44 -05:00
add basic auth with uuid-based access tokens
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user