Skip to content

Instantly share code, notes, and snippets.

@mathias21
Created July 28, 2020 21:31
Show Gist options
  • Save mathias21/81c42bc4baf6dacf56a8300e8df14f4e to your computer and use it in GitHub Desktop.
Save mathias21/81c42bc4baf6dacf56a8300e8df14f4e to your computer and use it in GitHub Desktop.
KtorEasy controller layer
class RegistrationControllerImp : BaseController(), RegistrationController, KoinComponent {
private val userApi by inject<UserApi>()
private val passwordManager by inject<PasswordManagerContract>()
private val tokenProvider by inject<TokenProvider>()
override suspend fun createUser(postUser: PostUserBody): ResponseUser {
val user = dbQuery {
userApi.getUserByUsername(postUser.username)?.let {
throw InvalidUserException("User is already taken")
}
userApi.createUser(postUser) ?: throw UnknownError("Internal server error")
}
return user.toResponseUser()
}
override suspend fun authenticate(credentials: LoginCredentials) = dbQuery {
userApi.getUserByUsername(credentials.username)?.let { user ->
if (passwordManager.validatePassword(credentials.password, user.password)) {
val credentialsResponse = tokenProvider.createTokens(user)
LoginTokenResponse(credentialsResponse)
} else {
throw AuthenticationException("Wrong credentials")
}
} ?: throw AuthenticationException("Wrong credentials")
}
override suspend fun refreshToken(credentials: RefreshBody) = dbQuery {
tokenProvider.verifyToken(credentials.refreshToken)?.let {
userApi.getUserById(it)?.let {
val credentialsResponse = tokenProvider.createTokens(it)
LoginTokenResponse(credentialsResponse)
} ?: throw AuthenticationException("Wrong credentials")
} ?: throw AuthenticationException("Wrong credentials")
}
}
interface RegistrationController {
suspend fun createUser(postUser: PostUserBody): ResponseUser
suspend fun authenticate(credentials: LoginCredentials): LoginTokenResponse
suspend fun refreshToken(credentials: RefreshBody): LoginTokenResponse
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment