Convert registration to async
This commit is contained in:
@ -32,18 +32,28 @@ final class SQLiteDatabase {
|
||||
self.mailConfiguration = mail
|
||||
}
|
||||
|
||||
func registerPlayer(named name: PlayerName, hash: PasswordHash, in database: Database) -> EventLoopFuture<SessionToken> {
|
||||
User.query(on: database).filter(\.$name == name).first()
|
||||
.guard({ $0 == nil }, else: Abort(.conflict)).flatMap { _ in
|
||||
let user = User(name: name, hash: hash)
|
||||
return user.create(on: database).map {
|
||||
// Create a new token and store it for the user
|
||||
let token = SessionToken.newToken()
|
||||
self.sessionTokenForPlayer[name] = token
|
||||
self.playerNameForToken[token] = name
|
||||
return token
|
||||
}
|
||||
func registerPlayer(named name: PlayerName, hash: PasswordHash, email: String?, in database: Database) async throws -> SessionToken {
|
||||
if let email {
|
||||
let user = try await User
|
||||
.query(on: database)
|
||||
.filter(\.$recoveryEmail == email)
|
||||
.first()
|
||||
if user != nil {
|
||||
throw Abort(.conflict)
|
||||
}
|
||||
}
|
||||
if try await User.query(on: database).filter(\.$name == name).first() != nil {
|
||||
throw Abort(.conflict)
|
||||
}
|
||||
let user = User(name: name, hash: hash, email: email)
|
||||
try await user.create(on: database)
|
||||
|
||||
// Create a new token and store it for the user
|
||||
let token = SessionToken.newToken()
|
||||
self.sessionTokenForPlayer[name] = token
|
||||
self.playerNameForToken[token] = name
|
||||
return token
|
||||
}
|
||||
}
|
||||
|
||||
private func sendEmail(name: PlayerName, email: String, token: String) {
|
||||
|
Reference in New Issue
Block a user