//--------------------------------------------------------------------------------------------- public static async Task <User> GetUserForRequestHeaderTokenAsync(ApiController controller, ITokenStore tokenStore, IUserStore userStore, ILogger log) { if (controller.Request?.Headers?.Contains("auth") == false) { log.LogDebug("No token provided."); throw new AuthenticationException("No token provided."); } string auth = controller.Request?.Headers?.GetValues("auth").FirstOrDefault(); if (Guid.TryParse(auth, out Guid userToken) == false) { log.LogDebug($"Invalid token format \"{auth}\"."); throw new AuthenticationException("Invalid user token format."); } Token token = await tokenStore.GetExistingValidTokenByGuidAsync(userToken); if (token == null) { log.LogDebug($"Token not found \"{auth}\"."); throw new AuthenticationException("User token not found, it may have expired."); } User user = await userStore.GetUserAsync(token); if (user == null) { log.LogError($"User not found, but valid token exists: {token}"); throw new InternalServerException(); } log.LogDebug($"Found user \"{user.Username}\" for token {token}."); return(user); }