public async Task <TokenPairDto> RefreshExpiredTokens(TokenPairDto tokens, DateTime now) { if (string.IsNullOrWhiteSpace(tokens.AccessToken) || string.IsNullOrWhiteSpace(tokens.RefreshToken)) { throw new BadRequestException("Refresh token can't be null"); } var claims = tokens.AccessToken.ParseClaimsFromJwt(); var idClaim = claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value; if (string.IsNullOrWhiteSpace(idClaim) || !int.TryParse(idClaim, out var _)) { throw new BadRequestException("Invalid access token"); } var userId = int.Parse(idClaim); var previousRefreshToken = await mediator.Send(new LoadRefreshTokenQuery(userId)); if (previousRefreshToken is null || previousRefreshToken.Token != tokens.RefreshToken || previousRefreshToken.ExpireAt < now) { throw new BadRequestException("Invalid refresh token"); } return(await GenerateTokens(userId, claims, now)); }
public async Task <ActionResult <TokenPairDto> > RefreshExpiredTokens([FromBody] TokenPairDto tokens) { try { return(Ok(await accountService.RefreshExpiredTokens(tokens))); } catch (System.Exception) { return(Unauthorized()); } }
public async Task <IHttpActionResult> SetFCMToken(TokenPairDto tokenPairDto) { if (ModelState.IsValid) { Session session = await db.Sessions.SingleOrDefaultAsync(QueryHelper.GetSessionObjectValidationQuery(tokenPairDto.Session)); if (session != null) { session.FCMToken = tokenPairDto.Token; db.SaveChanges(); return(Ok()); } return(NotFound()); } return(BadRequest()); }
public Task <TokenPairDto> RefreshExpiredTokens(TokenPairDto tokens) { return(jwtAuthenticationService.RefreshExpiredTokens(tokens, DateTime.Now)); }