Esempio n. 1
0
        public override async Task <IActionResult> ReLogin(
            Guid sessionId
            )
        {
            string clientIPAddress = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
            RServiceResult <LoggedOnUserModel> res = await _appUserService.ReLogin(sessionId, clientIPAddress);

            if (res.Result == null)
            {
                return(BadRequest(res.ExceptionString));
            }

            var l = res.Result;

            bool keepHistory = false;
            var  kRes        = await _optionsService.GetValueAsync("KeepHistory", l.User.Id);

            if (!string.IsNullOrEmpty(kRes.Result))
            {
                bool.TryParse(kRes.Result, out keepHistory);
            }


            LoggedOnUserModelEx loggedOnUserModelEx = new LoggedOnUserModelEx()
            {
                User          = l.User,
                Token         = l.Token,
                SessionId     = l.SessionId,
                SecurableItem = l.SecurableItem,
                KeepHistory   = keepHistory
            };

            return(Ok(loggedOnUserModelEx));
        }
Esempio n. 2
0
        /// <summary>
        /// if user is logged in adds user token to <paramref name="secureClient"/> and then checks user session and if needs renewal, renews it
        /// </summary>
        /// <param name="secureClient"></param>
        /// <param name="request"></param>
        /// <param name="response"></param>
        /// <returns></returns>
        public static async Task <bool> PrepareClient(HttpClient secureClient, HttpRequest request, HttpResponse response)
        {
            if (string.IsNullOrEmpty(request.Cookies["Token"]) || string.IsNullOrEmpty(request.Cookies["SessionId"]))
            {
                return(false);
            }
            secureClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", request.Cookies["Token"]);
            var r = await secureClient.GetAsync($"{APIRoot.Url}/api/users/checkmysession/?sessionId={request.Cookies["SessionId"]}");

            if (r.StatusCode == HttpStatusCode.OK)
            {
                return(true);
            }
            else
            if (r.StatusCode == HttpStatusCode.Unauthorized)
            {
                var reLoginUrl      = $"{APIRoot.Url}/api/users/relogin/{request.Cookies["SessionId"]}";
                var reLoginResponse = await secureClient.PutAsync(reLoginUrl, null);

                if (reLoginResponse.StatusCode != HttpStatusCode.OK)
                {
                    return(false);
                }

                LoggedOnUserModelEx loggedOnUser = JsonConvert.DeserializeObject <LoggedOnUserModelEx>(await reLoginResponse.Content.ReadAsStringAsync());

                secureClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loggedOnUser.Token);

                var cookieOption = new CookieOptions()
                {
                    Expires = DateTime.Now.AddDays(365),
                };

                response.Cookies.Append("UserId", loggedOnUser.User.Id.ToString(), cookieOption);
                response.Cookies.Append("SessionId", loggedOnUser.SessionId.ToString(), cookieOption);
                response.Cookies.Append("Token", loggedOnUser.Token, cookieOption);
                response.Cookies.Append("Username", loggedOnUser.User.Username, cookieOption);
                response.Cookies.Append("Name", $"{loggedOnUser.User.FirstName} {loggedOnUser.User.SureName}", cookieOption);
                response.Cookies.Append("NickName", $"{loggedOnUser.User.NickName}", cookieOption);

                bool canEditContent = false;
                var  ganjoorEntity  = loggedOnUser.SecurableItem.Where(s => s.ShortName == RMuseumSecurableItem.GanjoorEntityShortName).SingleOrDefault();
                if (ganjoorEntity != null)
                {
                    var op = ganjoorEntity.Operations.Where(o => o.ShortName == SecurableItem.ModifyOperationShortName).SingleOrDefault();
                    if (op != null)
                    {
                        canEditContent = op.Status;
                    }
                }

                response.Cookies.Append("CanEdit", canEditContent.ToString(), cookieOption);


                return(true);
            }
            return(false);
        }
Esempio n. 3
0
        /// <summary>
        /// Login
        /// </summary>
        /// <returns></returns>
        public async Task <IActionResult> OnPostLoginAsync()
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            LoginViewModel.ClientAppName = "GanjooRazor";
            LoginViewModel.Language      = "fa-IR";

            var stringContent = new StringContent(JsonConvert.SerializeObject(LoginViewModel), Encoding.UTF8, "application/json");
            var loginUrl      = $"{APIRoot.Url}/api/users/login";
            var response      = await _httpClient.PostAsync(loginUrl, stringContent);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(Redirect($"/login?redirect={Request.Path}&error={JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync())}"));
            }

            LoggedOnUserModelEx loggedOnUser = JsonConvert.DeserializeObject <LoggedOnUserModelEx>(await response.Content.ReadAsStringAsync());

            var cookieOption = new CookieOptions()
            {
                Expires = DateTime.Now.AddDays(365),
            };

            Response.Cookies.Append("UserId", loggedOnUser.User.Id.ToString(), cookieOption);
            Response.Cookies.Append("SessionId", loggedOnUser.SessionId.ToString(), cookieOption);
            Response.Cookies.Append("Token", loggedOnUser.Token, cookieOption);
            Response.Cookies.Append("Username", loggedOnUser.User.Username, cookieOption);
            Response.Cookies.Append("Name", $"{loggedOnUser.User.FirstName} {loggedOnUser.User.SureName}", cookieOption);
            Response.Cookies.Append("NickName", $"{loggedOnUser.User.NickName}", cookieOption);
            Response.Cookies.Append("KeepHistory", $"{loggedOnUser.KeepHistory}", cookieOption);

            bool canEditContent = false;
            var  ganjoorEntity  = loggedOnUser.SecurableItem.Where(s => s.ShortName == RMuseumSecurableItem.GanjoorEntityShortName).SingleOrDefault();

            if (ganjoorEntity != null)
            {
                var op = ganjoorEntity.Operations.Where(o => o.ShortName == SecurableItem.ModifyOperationShortName).SingleOrDefault();
                if (op != null)
                {
                    canEditContent = op.Status;
                }
            }

            Response.Cookies.Append("CanEdit", canEditContent.ToString(), cookieOption);


            return(Redirect(Request.Path));
        }
Esempio n. 4
0
        public async Task <IActionResult> OnPostPhase3Async()
        {
            LoggedIn               = !string.IsNullOrEmpty(Request.Cookies["Name"]);
            LastError              = "";
            SignupPhase1           = false;
            SignupVerifyEmailPhase = false;
            SignupFinalPhase       = true;

            if (FinalViewModel.Password != FinalViewModel.PasswordConfirmation)
            {
                LastError = "گذرواژه و تکرار آن یکی نیستند.";
                return(Page());
            }

            VerifiedSignUpViewModel postViewModel = new VerifiedSignUpViewModel()
            {
                Email     = FinalViewModel.Email,
                Secret    = FinalViewModel.Secret,
                FirstName = FinalViewModel.FirstName,
                SureName  = FinalViewModel.SureName,
                Password  = FinalViewModel.Password
            };

            var response = await _httpClient.PostAsync($"{APIRoot.Url}/api/users/finalizesignup", new StringContent(JsonConvert.SerializeObject(postViewModel), Encoding.UTF8, "application/json"));

            if (!response.IsSuccessStatusCode)
            {
                LastError = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync());
                return(Page());
            }


            LoginViewModel loginViewModel = new LoginViewModel()
            {
                ClientAppName = "وبگاه گنجور",
                Language      = "fa-IR",
                Username      = postViewModel.Email,
                Password      = postViewModel.Password
            };

            var stringContent = new StringContent(JsonConvert.SerializeObject(loginViewModel), Encoding.UTF8, "application/json");
            var loginUrl      = $"{APIRoot.Url}/api/users/login";

            response = await _httpClient.PostAsync(loginUrl, stringContent);

            if (!response.IsSuccessStatusCode)
            {
                LastError = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync());
                return(Page());
            }

            LoggedOnUserModelEx loggedOnUser = JsonConvert.DeserializeObject <LoggedOnUserModelEx>(await response.Content.ReadAsStringAsync());

            var cookieOption = new CookieOptions()
            {
                Expires = DateTime.Now.AddDays(365),
            };

            Response.Cookies.Append("UserId", loggedOnUser.User.Id.ToString(), cookieOption);
            Response.Cookies.Append("SessionId", loggedOnUser.SessionId.ToString(), cookieOption);
            Response.Cookies.Append("Token", loggedOnUser.Token, cookieOption);
            Response.Cookies.Append("Username", loggedOnUser.User.Username, cookieOption);
            Response.Cookies.Append("Name", $"{loggedOnUser.User.FirstName} {loggedOnUser.User.SureName}", cookieOption);
            Response.Cookies.Append("NickName", $"{loggedOnUser.User.NickName}", cookieOption);
            Response.Cookies.Append("KeepHistory", $"{loggedOnUser.KeepHistory}", cookieOption);

            bool canEditContent = false;
            var  ganjoorEntity  = loggedOnUser.SecurableItem.Where(s => s.ShortName == RMuseumSecurableItem.GanjoorEntityShortName).SingleOrDefault();

            if (ganjoorEntity != null)
            {
                var op = ganjoorEntity.Operations.Where(o => o.ShortName == SecurableItem.ModifyOperationShortName).SingleOrDefault();
                if (op != null)
                {
                    canEditContent = op.Status;
                }
            }

            Response.Cookies.Append("CanEdit", canEditContent.ToString(), cookieOption);



            return(Redirect($"{_configuration["SiteUrl"]}/User"));
        }