edit auth
This commit is contained in:
parent
7762e1de89
commit
2c63c8af89
@ -4,7 +4,7 @@ import doobie.Read
|
||||
import doobie.util.meta.Meta
|
||||
import java.util.UUID
|
||||
|
||||
case class User(id: UUID, login: String, passwordHash: String) derives Read
|
||||
case class User(id: UUID, login: String, passwordHash: String, isBlocked: Boolean, isDeleted: Boolean) derives Read
|
||||
|
||||
object User {
|
||||
implicit val uuidMeta: Meta[UUID] = Meta[String].timap(UUID.fromString)(_.toString)
|
||||
|
||||
@ -12,7 +12,7 @@ trait UserRepository {
|
||||
|
||||
class UserRepositoryImpl(transactor: Transactor[IO]) extends UserRepository {
|
||||
override def findByLogin(login: String): IO[Option[User]] = {
|
||||
sql"SELECT id, login, password_hash as passwordHash FROM users WHERE login = $login"
|
||||
sql"SELECT id, login, password_hash as passwordHash, is_blocked as isBlocked, is_deleted as isDeleted FROM users WHERE login = $login"
|
||||
.query[User]
|
||||
.option
|
||||
.transact(transactor)
|
||||
|
||||
@ -8,11 +8,17 @@ class AuthService(userRepository: UserRepository) {
|
||||
|
||||
def login(request: LoginRequest): IO[Either[String, LoginResponse]] = {
|
||||
userRepository.findByLogin(request.login).map {
|
||||
case Some(user) if user.passwordHash == request.password =>
|
||||
case Some(user) if user.passwordHash != request.password =>
|
||||
Left("Invalid login or password")
|
||||
case Some(user) if user.isBlocked =>
|
||||
Left("User account is disabled")
|
||||
case Some(user) if user.isDeleted =>
|
||||
Left("User account is deleted")
|
||||
case Some(user) =>
|
||||
// TODO: Implement proper password hashing (e.g., with bcrypt)
|
||||
// TODO: Implement real token generation
|
||||
Right(LoginResponse(accessToken = "fake-access-token", refreshToken = "fake-refresh-token"))
|
||||
case _ =>
|
||||
case None =>
|
||||
Left("Invalid login or password")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user