/// <summary> /// /// </summary> /// <param name="userAppId"></param> /// <param name="User"></param> /// <returns></returns> public static async Task ValidateClaims(string userAppId, IPrincipal User) { try { if (userAppId != null) { using (var db = new ZapContext()) { var us = await db.Users .Where(u => u.AppId == userAppId) .Select(u => new { u.Settings.ColorTheme, u.ProfileImage.Version, u.AppId, }) .FirstOrDefaultAsync().ConfigureAwait(true); if (us != null) { User.AddUpdateClaim("ColorTheme", us.ColorTheme ?? "light"); User.AddUpdateClaim("ProfileImageVersion", us.Version.ToString(CultureInfo.InvariantCulture)); User.AddUpdateClaim("UserAppId", us.AppId); } } } } catch (Exception) { //TODO: handle (or fix test for HttpContext.Current.GetOwinContext().Authentication mocking) } }
//public static async Task<JObject> CallPostApi(string Uri, Object model, ClaimsIdentity claimsIdentity) //{ // try // { // using (var client = new HttpClient()) // { // client.DefaultRequestHeaders.Accept.Clear(); // client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // var access_token = claimsIdentity.FindFirst("access_token"); // if (access_token != null) // { // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(claimsIdentity.FindFirst("token_type").Value, access_token.Value); // } // var response = await client.PostAsJsonAsync(BaseUrl + Uri, model); // if (response.StatusCode == HttpStatusCode.OK) // { // var responseJson = JObject.Parse(response.Content.ReadAsStringAsync().Result); // if (responseJson.GetValue("StatusCode").ToObject<int>() == (int)HttpStatusCode.OK) // { // return responseJson; // } // else // { // var error = responseJson.GetValue("Result").ToObject<Error>(); // return error; // } // } // else // return null; // } // } // catch (Exception ex) // { // return null; // } //} public static async Task <JObject> CallApi(string Uri, IPrincipal User, object model = null, bool GetRequest = false, bool isMultipart = false, MultipartFormDataContent multipartContent = null, params string[] parameters) { try { HttpResponseMessage response; string paramString = parameters.Count() > 0 ? "?" : String.Empty; bool RefreshTokenAttempted = false; using (client = new HttpClient()) { foreach (var param in parameters) { paramString += param + "&"; } paramString = paramString.TrimEnd('&'); callAgain : var claimsIdentity = (ClaimsIdentity)User.Identity; var access_token = claimsIdentity.FindFirst("access_token"); if (access_token != null) { if (isMultipart) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(claimsIdentity.FindFirst("token_type").Value, access_token.Value); } else { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(claimsIdentity.FindFirst("token_type").Value, access_token.Value); } } if (isMultipart) { response = await client.PostAsync(BaseUrl + Uri, multipartContent); } else { if (GetRequest) { response = await client.GetAsync(BaseUrl + Uri + paramString); } else { response = await client.PostAsJsonAsync(BaseUrl + Uri, model); } } if (response.StatusCode == HttpStatusCode.OK) { var responseJson = JObject.Parse(response.Content.ReadAsStringAsync().Result); if (responseJson.GetValue("statusCode").ToObject <int>() == (int)HttpStatusCode.OK) { return(responseJson); } else { var error = responseJson.GetValue("result").ToObject <Error>(); return(error); } } else if (response.StatusCode == HttpStatusCode.Unauthorized && RefreshTokenAttempted == false) { RefreshTokenAttempted = true; var refreshResponse = await RefreshAccessToken(claimsIdentity.FindFirst("refresh_token").Value); var tokenModel = refreshResponse.ToObject <Token>(); if (tokenModel != null) { User.AddUpdateClaim("access_token", tokenModel.access_token); User.AddUpdateClaim("token_type", tokenModel.token_type); User.AddUpdateClaim("expires_in", tokenModel.expires_in); User.AddUpdateClaim("refresh_token", tokenModel.refresh_token); if (isMultipart) { return(JObject.Parse("{\"message\":\"UnAuthorized\"}")); } else { goto callAgain; } } else { return(null); } } else if (response.StatusCode == HttpStatusCode.Unauthorized) { return(null); } else { return(null); } } } catch (Exception ex) { return(null); } }