예제 #1
0
        public ActionResult LogoutCallback(string returnUrl)
        {
            //Cập nhật trường IsLogin trong bảng Userclient
            var clientDa = new ClientDA();
            var domain   = GetDomain(returnUrl);
            var client   = clientDa.GetByDomain(domain);

            if (client != null)
            {
                if (User != null)
                {
                    var userClientDa = new UserClientDA();
                    var userClient   = userClientDa.GetListByUsernameAndClientId(User.Account, client.Id);
                    if (userClient != null)
                    {
                        userClient.IsLogin = false;
                        userClientDa.Update(userClient);
                    }
                }
            }

            if (string.IsNullOrEmpty(returnUrl))
            {
                Uri    myReferrer = Request.UrlReferrer;
                string actual     = myReferrer.ToString();
                return(Redirect(actual));
            }
            else
            {
                return(Redirect("/account/logincallback?returnUrl=" + returnUrl));
            }
        }
예제 #2
0
        public ActionResult LoginCallback(string returnUrl)
        {
            SystemUserLoginItemExtend item = new SystemUserLoginItemExtend()
            {
                Remember = true, ReturnUrl = returnUrl, Provider = GetDomain(returnUrl)
            };

            if (User != null)
            {
                SystemUserLoginItem user = new SystemUserLoginItem();
                user.UserName = User.Account;
                user.Provider = GetDomain(returnUrl);
                #region Xử lý nếu User đã đăng xuất tại client
                var clientDA = new ClientDA();
                var client   = clientDA.GetByDomain(user.Provider); //lấy ra client mà user đang sử dụng
                if (client != null)
                {
                    var userClientDa = new UserClientDA();
                    var userClient   = userClientDa.GetListByUsernameAndClientId(User.Account, client.Id);
                    if (userClient != null) //check nếu user có account của client đấy không
                    {
                        if (userClient.IsLogin == false)
                        {
                            ViewBag.ReturnUrl = returnUrl;
                            return(View(item));
                        }
                    }
                    else
                    {
                        return(Redirect(returnUrl));
                    }
                }
                #endregion
                if (!string.IsNullOrEmpty(returnUrl))
                {
                    return(Redirect(string.Format("{0}{1}{2}", returnUrl, "?data=", HttpUtility.UrlEncode(GetReturnData(user)))));
                }
                else
                {
                    return(Redirect(ConfigurationManager.AppSettings["DefaultReturnUrl"]));
                }
            }

            ViewBag.ReturnUrl = returnUrl;
            return(View(item));
        }
예제 #3
0
        public JsonResult Logincallback(SystemUserLoginItemExtend user)
        {
            try {
                //Nếu như user chưa đăng nhập bất cứ phần mềm nào = đã logout tất cả phần mềm và SSO đã bị logout thì bật tất cả các
                var flag = (User == null);//SSO bị logout
                if (FormsAuthentication.CookiesSupported)
                {
                    if (ModelState.IsValid)
                    {
                        if (user.SSOType == "Global")
                        {
                            user.UserName = user.UserName.ToLower();
                            var error = SystemAuthenticate.Login(user);
                            if (error == SystemCommon.Error.LoginSuccess)
                            {
                                //Check OTP
                                var userInfo  = userDA.GetListByUsername(user.UserName).FirstOrDefault();
                                var secretkey = ConfigurationManager.AppSettings["OTPSecretKey"] + userInfo.OtpPrivateKey;
                                if (!GoogleTOTP.IsVaLid(secretkey, user.OTP))
                                {
                                    objMsg.Error = true;
                                    objMsg.Title = getMessageError(SystemCommon.Error.InfoIncorrect);
                                    //xóa cookie (check OTP phải xử lý sau khi login, vì login xử lý ở dll,nên nếu OTP ko chính xác thì phải xóa cookie
                                    FormsAuthentication.SignOut();
                                    return(Json(objMsg));
                                }

                                var userClientDA = new UserClientDA();
                                if (flag) //(*)
                                {
                                    var lstUserClient = userClientDA.GetListByUsername(user.UserName);
                                    if (lstUserClient.Count(m => m.IsLogin) == 0)
                                    {
                                        foreach (var item in lstUserClient)
                                        {
                                            item.IsLogin = true;
                                            userClientDA.Update(item);
                                        }
                                    }
                                }
                                else //(**)
                                {
                                    var clientDA   = new ClientDA();
                                    var domain     = GetDomain(user.ReturnUrl);
                                    var client     = clientDA.GetByDomain(domain);
                                    var userClient = userClientDA.GetListByUsernameAndClientId(user.UserName, client.Id);
                                    if (userClient != null)
                                    {
                                        userClient.IsLogin = true;
                                        userClientDA.Update(userClient);
                                    }
                                }

                                if (string.IsNullOrEmpty(user.ReturnUrl))
                                {
                                    objMsg.Title = ConfigurationManager.AppSettings["DefaultReturnUrl"];
                                }
                                else
                                {
                                    objMsg.Title = string.Format("{0}{1}{2}", user.ReturnUrl, "?data=", HttpUtility.UrlEncode(GetReturnData(user)));
                                }
                            }
                            else
                            {
                                objMsg.Title = getMessageError(error);
                                objMsg.Error = true;
                            }
                        }
                        else
                        {
                            var url = ConfigurationManager.AppSettings["SSOVN"];
                            user.SecretKey = Security.CreateKey();
                            var ssoVNResponse = JsonConvert.DeserializeObject <Message>(HttpUtils.MakePostRequest(url, JsonConvert.SerializeObject(user), "application/json"));
                            objMsg = ssoVNResponse;
                        }
                    }
                    else
                    {
                        objMsg.Error = true;
                        objMsg.Title = string.Join("</br>", ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(m => m.ErrorMessage));
                    }
                }
            }
            catch (Exception ex)
            {
                objMsg.Error = true;
                objMsg.Title = ex.Message;
            }
            return(Json(objMsg));
        }