Skip to content

Instantly share code, notes, and snippets.

@mdr
Created July 19, 2018 11:13
Show Gist options
  • Save mdr/5d9403714d8e70678c24e09f05277f36 to your computer and use it in GitHub Desktop.
Save mdr/5d9403714d8e70678c24e09f05277f36 to your computer and use it in GitHub Desktop.
package gems.user.service
import com.google.inject.ImplementedBy
import com.google.inject.Inject
import gems.user.dao.UserDao
import gems.user.dao.entity.User
import gems.user.service.dto.Credentials
import gems.user.service.session.Session
import gems.user.service.session.SessionManager
@ImplementedBy(DefaultAuthenticationService::class)
interface AuthenticationService {
fun login(credentials: Credentials, sessionManager: SessionManager): Boolean
fun logout(sessionManager: SessionManager)
}
class DefaultAuthenticationService @Inject constructor(private val userDao: UserDao) :
AuthenticationService {
override fun login(credentials: Credentials, sessionManager: SessionManager): Boolean {
val user = userDao.findByEmail(credentials.email)
if (user == null) {
return false
}
if (authenticate(user, credentials)) {
sessionManager.beginSession(Session(user.id))
return true
} else {
return false
}
}
private fun authenticate(user: User, credentials: Credentials) = doesPasswordMatchHash(credentials.password, user.passwordHash)
override fun logout(sessionManager: SessionManager) = sessionManager.endSession()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment