Skip to content

Instantly share code, notes, and snippets.

@timbaev
Last active January 28, 2019 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timbaev/a54299a2942d48549e6c1b2d80416499 to your computer and use it in GitHub Desktop.
Save timbaev/a54299a2942d48549e6c1b2d80416499 to your computer and use it in GitHub Desktop.
func refreshToken(request: Request, refreshTokenDto: RefreshTokenDto) throws -> Future<AccessDto> {
let refreshTokenModel = RefreshToken
.query(on: request)
.filter(\.token == refreshTokenDto.refreshToken)
.first()
.unwrap(or: Abort(.unauthorized))
return refreshTokenModel.flatMap { refreshTokenModel in
if refreshTokenModel.expiredAt > Date() {
return refreshTokenModel.user.get(on: request).flatMap { user in
let accessToken = try TokenHelpers.createAccessToken(from: user)
let refreshToken = TokenHelpers.createRefreshToken()
let expiredAt = try TokenHelpers.expiredDate(of: accessToken)
refreshTokenModel.token = refreshToken
refreshTokenModel.updateExpiredDate()
let accessDto = AccessDto(refreshToken: refreshToken, accessToken: accessToken, expiredAt: expiredAt)
return refreshTokenModel.save(on: request).transform(to: accessDto)
}
} else {
return refreshTokenModel.delete(on: request).thenThrowing {
throw Abort(.unauthorized)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment