public async Task <ActionResult <ApiResponse <UserDetail> > > GetUserDetail() { try { AuthenticationHeaderValue authHeader; AuthenticationHeaderValue.TryParse(Request.Headers["Authorization"], out authHeader); if (authHeader is null) { return(NotFound(RequestResponse.NotFound("Invalid request."))); } var result = await firebaseAuthService.GetUser(authHeader.Parameter); var userPropertiesResult = await firebaseDbService.GetUserProperties(result.UserId); if (userPropertiesResult != null) { result.IsMfaEnabled = userPropertiesResult.IsMfaEnabled; } return(Ok(new ApiResponse <UserDetail>(result))); } catch (Exception) { return(BadRequest(RequestResponse.BadRequest("An error occured while trying to get your details."))); } }
protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { if (!Request.Headers.ContainsKey("Authorization")) { return(AuthenticateResult.Fail("Missing Authorization Header")); } var authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]); if (!authHeader.Scheme.Equals("token", StringComparison.InvariantCultureIgnoreCase)) { return(AuthenticateResult.Fail("Invalid Authorization Scheme")); } try { var user = await firebaseAuthService.GetUser(authHeader.Parameter); if (!string.IsNullOrWhiteSpace(user?.Email) && !string.IsNullOrWhiteSpace(user?.UserId)) { var claims = new[] { new Claim(ClaimTypes.NameIdentifier, user.Email), new Claim(ClaimTypes.Name, user.Email), new Claim(CustomClaims.USER_ID, user.UserId.ToString()) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); } else { return(AuthenticateResult.Fail("error - invalid token provided")); } } catch (Exception ex) { return(AuthenticateResult.Fail("An error occurred during verification")); } }