Example #1
0
        /// <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)
            }
        }
Example #2
0
        //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);
            }
        }