package services import ( "lokideploy/models" "lokideploy/utils" ) type AuthService struct{} func NewAuthService() *AuthService { return &AuthService{} } func (s *AuthService) Login(username, password string) (*models.User, string, error) { db := models.GetDB() db.RLock() defer db.RUnlock() for i := range db.Users { if db.Users[i].Username == username { if !utils.VerifyPassword(password, db.Users[i].Password) { return nil, "", utils.ErrInvalidCredentials } token, err := utils.GenerateToken(db.Users[i].ID, db.Users[i].Username, db.Users[i].Role) if err != nil { return nil, "", err } return &db.Users[i], token, nil } } return nil, "", utils.ErrInvalidCredentials } func (s *AuthService) Register(username, password, nickname, role string) (*models.User, error) { hash, err := utils.HashPassword(password) if err != nil { return nil, err } user := &models.User{ ID: models.GetDB().NextID("users"), Username: username, Password: hash, Nickname: nickname, Role: role, } if err := models.GetDB().CreateUser(user); err != nil { return nil, err } return user, nil } func (s *AuthService) GetUserByID(id uint) (*models.User, error) { db := models.GetDB() db.RLock() defer db.RUnlock() for i := range db.Users { if db.Users[i].ID == id { u := db.Users[i] return &u, nil } } return nil, utils.ErrNotFound } func (s *AuthService) ChangePassword(userID uint, oldPassword, newPassword string) error { db := models.GetDB() db.Lock() defer db.Unlock() for i := range db.Users { if db.Users[i].ID == userID { if !utils.VerifyPassword(oldPassword, db.Users[i].Password) { return utils.ErrInvalidCredentials } hash, err := utils.HashPassword(newPassword) if err != nil { return err } db.Users[i].Password = hash go db.Save() return nil } } return utils.ErrNotFound }