Пример #1
0
        //[EnableCors(origins: "*", headers: "*", methods: "*")]
        public HttpResponseMessage UpdateCookie()
        {
            SSOReturnResult ret = new SSOReturnResult();
            SSOUserStatus   us  = new SSOUserStatus();

            string             req      = SSOHTTPRequestService.getDataInRequest(Request);
            SSOCookieInfor     ci       = SSOHTTPRequestService.getDataFromString <SSOCookieInfor>(req);
            SSOUserLoginInfors oldValue = null;

            if (ci != null && ci.Token != null && UserManagerService.CheckRequestAuthentication(ci.Token, out oldValue))
            {
                oldValue.UserCookie.Expires = ci.Expires;
                UserManagerService.UsersLoggedIn.AddOrUpdate(ci.Token, oldValue,
                                                             (key, existingVal) =>
                {
                    existingVal.UserCookie.Expires = oldValue.UserCookie.Expires;
                    return(existingVal);
                });

                ret.ReturnCode = HttpStatusCode.OK;
                ret.Message    = "Cập nhật thành công";
            }
            else
            {
                ret.ReturnCode = HttpStatusCode.BadRequest;
                ret.Message    = "Dữ liệu cập nhật không hợp lệ";
            }

            return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK));
        }
Пример #2
0
        //Kiểm tra request đã được xác thực chưa
        //false: request is not authenticated
        //true: request is authenticated
        //Xóa thông tin user đăng nhập nếu cần
        public static bool CheckRequestAuthentication(string Token, out SSOUserLoginInfors Us)
        {
            Us = null;
            SSOLoginMessage Tm;

            if (Token != null && !Token.Equals(""))
            {
                if (UsersLoggedIn.TryGetValue(Token, out Us))
                {
                    //xử lý khi cookie quá hạn
                    if (SSOHTTPRequestService.CheckExpired(Us.UserCookie))
                    {
                        if (UsersLoggedIn.TryRemove(Token, out Us))
                        {
                            Tm         = new SSOLoginMessage();
                            Tm.Token   = Token;
                            Tm.User    = Us.User.TENDANGNHAP;
                            Tm.Message = "Phiên làm việc đã kết thúc, vui lòng đăng nhập lại";
                            Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                            TokenMessage.AddOrUpdate(Token, Tm,
                                                     (key, existingVal) =>
                            {
                                existingVal = Tm;
                                return(existingVal);
                            });
                        }
                        UserToken.TryRemove(Us.User.TENDANGNHAP, out Token);
                        return(false);
                    }

                    //xử lý khi token quá hạn
                    if (SSOHTTPRequestService.CheckExpired(Us))
                    {
                        if (UsersLoggedIn.TryRemove(Token, out Us))
                        {
                            Tm         = new SSOLoginMessage();
                            Tm.Token   = Token;
                            Tm.User    = Us.User.TENDANGNHAP;
                            Tm.Message = "Token hết hạn, vui lòng đăng nhập lại";
                            Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                            TokenMessage.AddOrUpdate(Token, Tm,
                                                     (key, existingVal) =>
                            {
                                existingVal = Tm;
                                return(existingVal);
                            });
                        }
                        UserToken.TryRemove(Us.User.TENDANGNHAP, out Token);
                        return(false);
                    }

                    return(true);
                }
            }

            return(false);
        }
Пример #3
0
        //[EnableCors(origins: "*", headers: "*", methods: "*")]
        public HttpResponseMessage getUserStatus()
        {
            SSOUserStatus      us = new SSOUserStatus();
            SSOUserLoginInfors Us = null;

            string req = SSOHTTPRequestService.getDataInRequest(Request);
            string dt  = SSOHTTPRequestService.getDataFromString <string>(req);

            us.UserLoggedIn = UserManagerService.CheckRequestAuthentication(dt, out Us);

            return(SSOHTTPRequestService.CreateResponseMessage(us, HttpStatusCode.OK));
        }
Пример #4
0
        private static void CheckAndReleaseData(SSOUserLoginInfors Us)
        {
            Us = null;
            SSOLoginMessage Tm;
            string          Token = "";

            //xử lý khi cookie quá hạn
            if (SSOHTTPRequestService.CheckExpired(Us.UserCookie))
            {
                if (UsersLoggedIn.TryRemove(Us.Token, out Us))
                {
                    Tm         = new SSOLoginMessage();
                    Tm.Token   = Us.Token;
                    Tm.User    = Us.User.TENDANGNHAP;
                    Tm.Message = "Phiên làm việc đã kết thúc, vui lòng đăng nhập lại";
                    Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                    TokenMessage.AddOrUpdate(Us.Token, Tm,
                                             (key, existingVal) =>
                    {
                        existingVal = Tm;
                        return(existingVal);
                    });
                }
                UserToken.TryRemove(Us.User.TENDANGNHAP, out Token);
            }

            //xử lý khi token quá hạn
            if (SSOHTTPRequestService.CheckExpired(Us))
            {
                if (UsersLoggedIn.TryRemove(Us.Token, out Us))
                {
                    Tm         = new SSOLoginMessage();
                    Tm.Token   = Us.Token;
                    Tm.User    = Us.User.TENDANGNHAP;
                    Tm.Message = "Token hết hạn, vui lòng đăng nhập lại";
                    Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                    TokenMessage.AddOrUpdate(Us.Token, Tm,
                                             (key, existingVal) =>
                    {
                        existingVal = Tm;
                        return(existingVal);
                    });
                }
                UserToken.TryRemove(Us.User.TENDANGNHAP, out Token);
            }
        }
Пример #5
0
        private static void CheckAccountLoginAndAdd(SSOUserLoginInfors Us)
        {
            string             Token;
            SSOLoginMessage    Tm;
            SSOUserLoginInfors oldValue;

            //nếu đây là login từ máy khác
            if (UserToken.ContainsKey(Us.User.TENDANGNHAP))
            {
                //remove token cũ
                if (UserToken.TryRemove(Us.User.TENDANGNHAP, out Token))
                {
                    if (UsersLoggedIn.TryRemove(Token, out oldValue))
                    {
                        Tm         = new SSOLoginMessage();
                        Tm.Token   = Token;
                        Tm.User    = Us.User.TENDANGNHAP;
                        Tm.Message = "Tài khoản vừa được đăng nhập ở một vị trí khác";
                        Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                        TokenMessage.AddOrUpdate(Token, Tm,
                                                 (key, existingVal) =>
                        {
                            existingVal = Tm;
                            return(existingVal);
                        });
                    }
                }
            }

            //cập nhật lại thông tin token mới theo user
            UserToken.AddOrUpdate(Us.User.TENDANGNHAP, Us.Token,
                                  (key, existingVal) =>
            {
                existingVal = Us.Token;
                return(existingVal);
            });

            //cập nhật lại toàn bộ thông tin user đang đăng nhập
            UsersLoggedIn.AddOrUpdate(Us.Token, Us,
                                      (key, existingVal) =>
            {
                existingVal = Us;
                return(existingVal);
            });
        }
Пример #6
0
        //[EnableCors(origins: "*", headers: "*", methods: "*")]
        public HttpResponseMessage LogoutUser(string Token)
        {
            SSOUserLoginInfors Us = null;

            if (UserManagerService.CheckRequestAuthentication(Token, out Us))
            {
                var                  context = new HttpContextWrapper(HttpContext.Current);
                HttpRequestBase      request = context.Request;
                SSOHttpRequestParams par     = SSOHTTPRequestService.GetRequestParams(request);
                //var app = HttpContext.Current.ApplicationInstance as HttpApplication;
                UserManagerService.LogoutUser(par, SSOConstants.Cookie.AUTH_COOKIE, null);
            }

            SSOReturnResult ret = new SSOReturnResult();

            ret.ReturnCode = HttpStatusCode.OK;
            ret.Message    = "Logout thành công";

            return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK));
        }
        // GET: Authenticate
        public ActionResult Login()
        {
            SSOLoginMessage    tm = null;
            SSOUserLoginInfors ui = null;
            string             tk = null;
            var par = SSOHTTPRequestService.GetRequestParams(Request);

            ViewBag.ReturnUrl = par == null ? "" : (par.ReturnUrl == null ? "" : par.ReturnUrl);
            if (par != null && par.Token != null && !par.Token.Equals(""))
            {
                if (UserManagerService.TokenMessage.TryRemove(par.Token, out tm))
                {
                    ViewBag.TB = tm.Message;
                }

                if (UserManagerService.UsersLoggedIn.TryRemove(par.Token, out ui))
                {
                    UserManagerService.UserToken.TryRemove(ui.User.TENDANGNHAP, out tk);
                }
            }
            return(View());
        }
Пример #8
0
        //[EnableCors(origins: "*", headers: "*", methods: "*")]
        public HttpResponseMessage getUserInfors()
        {
            SSOUserLoginInfors Us = null, ret = null;

            string req                 = SSOHTTPRequestService.getDataInRequest(Request);
            SSOHtTokenRequestData Data = SSOHTTPRequestService.getDataFromString <SSOHtTokenRequestData>(req);
            bool check                 = false;

            if (UserManagerService.CheckRequestAuthentication(Data.Token, out Us))
            {
                if (Data.isTokenFromCookie || Us.FirstTimeToken)
                {
                    ret = AutoMapper.Mapper.Map <SSOUserLoginInfors, SSOUserLoginInfors>(Us);
                    ret.SuccessGetData = true;
                    ret.ThongBao       = "Lấy dữ liệu thành công";
                    ret.UserCookie     = null;
                    ret.FirstTimeToken = false;
                    Us.FirstTimeToken  = false;
                    UserManagerService.UsersLoggedIn.AddOrUpdate(Us.Token, Us,
                                                                 (key, existingVal) =>
                    {
                        existingVal.FirstTimeToken = Us.FirstTimeToken;
                        return(existingVal);
                    });
                    check = true;
                }
            }

            if (!check)
            {
                ret = new SSOUserLoginInfors();
                ret.SuccessGetData = false;
                ret.ThongBao       = "Yêu cầu không hợp lệ";
            }

            return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK));
        }
Пример #9
0
        /// <summary>
        /// Authenticates user from the system
        /// </summary>
        /// <param name="UserName"></param>
        /// <param name="Password"></param>
        /// <returns>UserLoginInfors if authenticate success, if not success, return null</returns>
        public static SSOUserLoginInfors AuthenticateUser(string UserName, string Password, ref string thongBao)
        {
            SSOUserLoginInfors Us   = null;
            HT_NGUOIDUNG       user = null;

            thongBao = "";
            if (UserName != null && UserName != "")
            {
                using (MPLISEntities db = new MPLISEntities())
                {
                    user = db.HT_NGUOIDUNG.Where(c => c.TENDANGNHAP.ToUpper().Equals(UserName.ToUpper()) && c.MATKHAU.Equals(Password)).FirstOrDefault();
                    if (user == null)
                    {
                        thongBao = "Người dùng hoặc mật khẩu không đúng";
                    }
                    else
                    {
                        if (user.CHOPHEPSUDUNG == "1")
                        {
                            if (user.THOIDIEMMATKHAUCOHIEULUC != null && user.THOIDIEMMATKHAUHETHIEULUC != null)
                            {
                                // Xac dinh khoang thoi gian ma Nguoi dung duoc phep truy cap he thong
                                //var nguoiDung = db.HT_NGUOIDUNG.Where(p => p.NGUOIDUNGID == user.NGUOIDUNGID).FirstOrDefault();
                                if (user.THOIDIEMMATKHAUCOHIEULUC != null && user.THOIDIEMMATKHAUHETHIEULUC != null)
                                {
                                    if (DateTime.Compare(DateTime.Parse(DateTime.Now.ToString()), DateTime.Parse(user.THOIDIEMMATKHAUCOHIEULUC.ToString())) >= 0)
                                    {
                                        if (DateTime.Compare(DateTime.Parse(DateTime.Now.ToString()), DateTime.Parse(user.THOIDIEMMATKHAUHETHIEULUC.ToString())) > 0)
                                        {
                                            thongBao = "Tài khoản đã hêt hạn tham gia hệ thống";
                                            user     = null;
                                        }
                                    }
                                    else
                                    {
                                        thongBao = "Tài khoản chưa đến thời điểm tham gia hệ thống";
                                        user     = null;
                                    }
                                }
                                else
                                {
                                    thongBao = "Tài khoản chưa xác định được thời gian tham gia hệ thống";
                                    user     = null;
                                }
                            }
                        }
                        else
                        {
                            thongBao = "Tài khoản đã bị khóa";
                            user     = null;
                        }
                    }
                }
            }

            if (user != null) //xác thực thành công, thêm thông tin xác thực người dùng vào danh sách người dùng đã xác thực để quản lý
            {
                Us = GetUserInfor(user);
                HttpCookie      aCookie = new HttpCookie(SSOConstants.Cookie.AUTH_COOKIE);//("VILISUserLoginInfo");
                SSOCookieValues cv      = new SSOCookieValues();
                cv.UserName  = user.TENDANGNHAP;
                cv.Token     = Us.Token;
                cv.LastVisit = DateTime.Now;
                string retString  = JsonConvert.SerializeObject(cv);
                string encrString = Utility.Encrypt(retString, true, Config.SECURITY_KEY);
                aCookie.Value   = encrString;
                aCookie.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES);
                Us.UserCookie   = aCookie;

                CheckAccountLoginAndAdd(Us);
            }

            return(Us);
        }
Пример #10
0
        /// <summary>
        /// Get user informations from database
        /// </summary>
        /// <param name="UniqueId"></param>
        /// <returns>UserLoginInfors for user input</returns>
        private static SSOUserLoginInfors GetUserInfor(HT_NGUOIDUNG user)
        {
            if (user == null)
            {
                return(null);
            }
            SSOUserLoginInfors Us = new SSOUserLoginInfors();
            SSOHcTinh          sTinh;
            SSOHcHuyen         sHuyen;
            SSOHcXa            sXa;
            SSOHtQuyen         sQuyen;
            Hashtable          cXa = new Hashtable(), cHuyen = new Hashtable();
            string             tenQuyen = "";

            using (MPLISEntities db = new MPLISEntities())
            {
                //Lấy thông tin tổ chức của người dùng
                var TcInf = (from tcnd in db.HT_TOCHUC_NGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID))
                             select new
                {
                    tcnd,
                    tc = db.HT_TOCHUC.Where(i => i.TOCHUCID.Equals(tcnd.TOCHUCID)).FirstOrDefault()
                }).FirstOrDefault();
                if (TcInf != null && TcInf.tc != null)
                {
                    Us.ToChucNguoiDung = Mapper.Map <HT_TOCHUC_NGUOIDUNG, SSOHtToChucNguoiDung>(TcInf.tcnd);
                    Us.ToChuc          = Mapper.Map <HT_TOCHUC, SSOHtToChuc>(TcInf.tc);

                    #region "Lấy các thông tin liên quan tổ chức"
                    #region "KVHC - tổ chức"
                    switch (Us.ToChuc.CAPTOCHUC)
                    {
                    case 1:         //cấp trung ương - do nothing
                        break;

                    case 2:         //cấp tỉnh - lấy toàn bộ cây hành chính cấp tỉnh
                                    //lấy tỉnh
                        var hcT = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(Us.ToChuc.DONVIHANHCHINHID))
                                   select t).FirstOrDefault();
                        if (hcT != null)
                        {
                            sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT);
                            Us.ToChucKVHC.Add(sTinh.TINHID, sTinh);
                            //lấy huyện theo tỉnh
                            var hcH = (from h in db.HC_HUYEN
                                       where h.MAKVHC.StartsWith(sTinh.MAKVHC)
                                       select h).ToList();
                            if (hcH != null)
                            {
                                foreach (var it in hcH)
                                {
                                    sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(it);
                                    Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen);
                                }

                                //lấy xã theo tỉnh
                                var hcXa = (from x in db.HC_DMKVHC
                                            where x.MAKVHC.StartsWith(sTinh.MAKVHC)
                                            select x).ToList();
                                if (hcH != null)
                                {
                                    foreach (var it in hcXa)
                                    {
                                        sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(it);
                                        if (!Us.ToChucKVHC.Contains(sXa.KVHCID))
                                        {
                                            Us.ToChucKVHC.Add(sXa.KVHCID, sXa);
                                        }
                                    }
                                }
                            }
                        }
                        break;

                    case 3:         //cấp huyện
                                    //lấy huyện
                        var hcHuyen = (from t in db.HC_HUYEN.Where(i => i.HUYENID.Equals(Us.ToChuc.DONVIHANHCHINHID))
                                       select t).FirstOrDefault();
                        if (hcHuyen != null)
                        {
                            sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(hcHuyen);
                            Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen);

                            //lấy tỉnh của huyện
                            var hcT1 = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(sHuyen.TINHID))
                                        select t).FirstOrDefault();
                            if (hcT1 != null)
                            {
                                sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT1);
                                if (!Us.ToChucKVHC.Contains(sTinh.TINHID))
                                {
                                    Us.ToChucKVHC.Add(sTinh.TINHID, sTinh);
                                }
                            }

                            //lấy xã theo huyện
                            var hcXa = (from xa in db.HC_DMKVHC.Where(i => i.HUYENID.Equals(hcHuyen.HUYENID))
                                        select xa).ToList();
                            if (hcXa != null)
                            {
                                foreach (var it in hcXa)
                                {
                                    sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(it);
                                    if (!Us.ToChucKVHC.Contains(sXa.KVHCID))
                                    {
                                        Us.ToChucKVHC.Add(sXa.KVHCID, sXa);
                                    }
                                }
                            }
                        }
                        break;

                    default:        //cấp xã
                        var hcXa1 = (from t in db.HC_DMKVHC.Where(i => i.KVHCID.Equals(Us.ToChuc.DONVIHANHCHINHID))
                                     select t).FirstOrDefault();
                        if (hcXa1 != null)
                        {
                            sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(hcXa1);
                            if (!Us.ToChucKVHC.Contains(sXa.KVHCID))
                            {
                                Us.ToChucKVHC.Add(sXa.KVHCID, sXa);
                            }
                            //lấy huyện
                            var hcHuyen1 = (from t in db.HC_HUYEN.Where(i => i.HUYENID.Equals(sXa.HUYENID))
                                            select t).FirstOrDefault();
                            if (hcHuyen1 != null)
                            {
                                sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(hcHuyen1);
                                if (!Us.ToChucKVHC.Contains(sHuyen.HUYENID))
                                {
                                    Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen);
                                }
                                //lấy tỉnh
                                var hcT1 = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(sHuyen.TINHID))
                                            select t).FirstOrDefault();
                                if (hcT1 != null)
                                {
                                    sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT1);
                                    if (!Us.ToChucKVHC.Contains(sTinh.TINHID))
                                    {
                                        Us.ToChucKVHC.Add(sTinh.TINHID, sTinh);
                                    }
                                }
                            }
                        }
                        break;
                    }
                    #endregion

                    #region "Quyền/Menu - tổ chức"
                    //lấy danh sách nhóm chức năng của tổ chức
                    var ncn = (from tcncn in db.HT_TOCHUC_NHOMCHUCNANG.Where(i => i.TOCHUCID.Equals(Us.ToChuc.TOCHUCID))
                               select new
                    {
                        tcncn,
                        ncn = db.HT_NHOMCHUCNANG.Where(i => i.NHOMCHUCNANGID.Equals(tcncn.NHOMCHUCNANGID)).FirstOrDefault()
                    }).ToList();
                    if (ncn != null && ncn.Count > 0)
                    {
                        List <string> NCNIds = new List <string>();
                        foreach (var it in ncn)
                        {
                            if (it.ncn != null)
                            {
                                NCNIds.Add(it.ncn.NHOMCHUCNANGID);
                            }
                        }

                        if (NCNIds.Count > 0)
                        {
                            #region "Quyền - tổ chức"
                            //lấy danh sách chức năng theo danh sách nhóm chức năng của tổ chức
                            var dscn = (from cnncn in db.HT_CHUCNANG_NHOMCHUCNANG.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID))
                                        select new
                            {
                                cnncn,
                                cn = db.HT_CHUCNANG.Where(i => i.CHUCNANGID.Equals(cnncn.CHUCNANGID)).FirstOrDefault(),
                            }).ToList();
                            if (dscn != null && dscn.Count > 0)
                            {
                                List <string> CNIds = new List <string>();
                                foreach (var it in dscn)
                                {
                                    if (it.cn != null)
                                    {
                                        CNIds.Add(it.cn.CHUCNANGID);
                                    }
                                }
                                if (CNIds.Count > 0)
                                {
                                    //lấy danh sách quyền theo danh sách chức năng của tổ chức
                                    var dsq = (from q in db.HT_QUYEN.Where(i => CNIds.Contains(i.CHUCNANGID))
                                               select q).ToList();
                                    if (dsq != null && dsq.Count > 0)
                                    {
                                        foreach (var it in dsq)
                                        {
                                            sQuyen = Mapper.Map <HT_QUYEN, SSOHtQuyen>(it);
                                            if (!Us.ToChucQuyen.Contains(it.QUYENID))
                                            {
                                                Us.ToChucQuyen.Add(it.QUYENID, sQuyen);
                                            }
                                        }
                                    }
                                }
                            }
                            #endregion

                            #region "Menu - Tổ chức"
                            //Lấy danh sách ứng dụng được chọn
                            var dsUD = (from ud in db.HT_UNGDUNG
                                        select ud).ToList();
                            SSOHtUngDung ud1;
                            foreach (var ud in dsUD)
                            {
                                ud1 = Mapper.Map <HT_UNGDUNG, SSOHtUngDung>(ud);
                                Us.AllUngDung.Add(ud1.UNGDUNGID, ud1);
                            }

                            var dsmn1 = (from ncnmn in db.HT_NHOMCHUCNANG_MENU.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID))
                                         select new
                            {
                                ncnmn,
                                mn = db.HT_MENU.Where(i => i.MENUID.Equals(ncnmn.MENUID)).Where(i => i.CHOPHEPSUDUNG.Equals("1")).FirstOrDefault(),
                            }).OrderBy(i => i.mn.UNGDUNGID).OrderBy(i => i.mn.MAMENU);

                            //lấy danh sách chức năng theo danh sách nhóm chức năng của tổ chức
                            var dsmn = (from ncnmn in db.HT_NHOMCHUCNANG_MENU.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID))
                                        select new
                            {
                                ncnmn,
                                mn = db.HT_MENU.Where(i => i.MENUID.Equals(ncnmn.MENUID)).Where(i => i.CHOPHEPSUDUNG.Equals("1")).FirstOrDefault(),
                            }).OrderBy(i => i.mn.UNGDUNGID).OrderBy(i => i.mn.MAMENU).ToList();
                            if (dsmn != null && dsmn.Count > 0)
                            {
                                //tách riêng menu theo ứng dụng
                                List <SSOHtMenu> UDMenu;
                                SSOHtMenu        it;
                                Hashtable        umid = new Hashtable();

                                for (int i = 0; i < dsmn.Count; i++)
                                {
                                    if (dsmn[i].mn != null)
                                    {
                                        if (!umid.Contains(dsmn[i].mn.MENUID))
                                        {
                                            if (Us.ToChucMenu.Contains(dsmn[i].mn.UNGDUNGID))
                                            {
                                                UDMenu = (List <SSOHtMenu>)Us.ToChucMenu[dsmn[i].mn.UNGDUNGID];
                                                it     = Mapper.Map <HT_MENU, SSOHtMenu>(dsmn[i].mn);
                                                UDMenu.Add(it);
                                            }
                                            else
                                            {
                                                UDMenu = new List <SSOHtMenu>();
                                                it     = Mapper.Map <HT_MENU, SSOHtMenu>(dsmn[i].mn);
                                                UDMenu.Add(it);
                                                Us.ToChucMenu.Add(dsmn[i].mn.UNGDUNGID, UDMenu);
                                            }
                                            umid.Add(dsmn[i].mn.MENUID, dsmn[i].mn.MENUID);
                                            if (!Us.DSUngDung.Contains(dsmn[i].mn.UNGDUNGID))
                                            {
                                                ud1 = (SSOHtUngDung)Us.AllUngDung[dsmn[i].mn.UNGDUNGID];
                                                Us.DSUngDung.Add(ud1.UNGDUNGID, ud1);
                                            }
                                        }
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    #endregion
                    #endregion
                }

                #region "Lấy các thông tin liên quan user"
                #region "Xã - người dùng"
                var hcXND = (from t in db.HT_XA_NGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID))
                             select new
                {
                    t,
                    xa = db.HC_DMKVHC.Where(i => i.KVHCID.Equals(t.XAID)).FirstOrDefault()
                }).OrderBy(i => i.xa.MAKVHC).ToList();

                if (hcXND != null && hcXND.Count > 0)
                {
                    foreach (var it in hcXND)
                    {
                        //cấu hình xã cho người dùng không được vượt cấp của tổ chức - chỉ lấy xã mà tổ chức của người dùng có quyền
                        if (it.xa != null && !cXa.Contains(it.xa.KVHCID) && Us.ToChucKVHC.Contains(it.xa.KVHCID))
                        {
                            Us.NguoiDungXa.Add(Mapper.Map <HC_DMKVHC, SSOHcXa>(it.xa));
                            cXa.Add(it.xa.KVHCID, it.xa.KVHCID);
                            if (!cHuyen.Contains(it.xa.HUYENID) && Us.ToChucKVHC.Contains(it.xa.HUYENID))
                            {
                                sHuyen = (SSOHcHuyen)Us.ToChucKVHC[it.xa.HUYENID];
                                Us.NguoiDungHuyen.Add(sHuyen);
                                cHuyen.Add(it.xa.HUYENID, it.xa.HUYENID);
                            }
                        }
                    }
                }
                #endregion

                #region "Quyền - người dùng"
                var qnd = (from t in db.HT_NGUOIDUNG_QUYEN.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID))
                           select new
                {
                    t,
                    q = db.HT_QUYEN.Where(i => i.QUYENID.Equals(t.QUYENID)).FirstOrDefault()
                }).ToList();
                if (qnd != null && qnd.Count > 0)
                {
                    foreach (var it in qnd)
                    {
                        sQuyen   = Mapper.Map <HT_QUYEN, SSOHtQuyen>(it.q);
                        tenQuyen = (it.q.CONTROLLERNAME == null ? "" : it.q.CONTROLLERNAME) + "_" + (it.q.ACTIONNAME == null ? "" : it.q.ACTIONNAME);
                        if (it.q != null && !Us.NguoiDungQuyen.Contains(tenQuyen))
                        {
                            Us.NguoiDungQuyen.Add(tenQuyen, sQuyen);
                        }
                    }
                }
                #endregion

                //có thể vứt đống này đi vì không dùng
                //#region "Cấu hình người dùng"
                //var chnd = (from t in db.HT_CAUHINHNGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID))
                //            select t).ToList();
                //if (chnd != null && chnd.Count > 0)
                //{
                //    foreach (var it in chnd)
                //    {
                //        if (!Us.CauHinhNguoiDung.Contains(it.TENCAUHINH)) Us.CauHinhNguoiDung.Add(it.TENCAUHINH, it);
                //    }
                //}
                //#endregion
                #endregion

                Us.Token        = Utility.GetGuidHash();
                Us.User         = Mapper.Map <HT_NGUOIDUNG, SSOHtNguoiDung>(user);
                Us.TokenExpires = DateTime.Now.AddHours(Config.AUTH_TOKEN_TIMEOUT_IN_HOURS);

                //cập nhật lại DONVIHANHCHINHID nếu cần
                if (Us.User.DONVIHANHCHINHID == null)
                {
                    if (Us.NguoiDungXa.Count > 0)
                    {
                        string message = "";
                        Us.User.DONVIHANHCHINHID = Us.NguoiDungXa[0].KVHCID;
                        UpdateUser(Us.User, out message);
                    }
                }
            }

            return(Us);
        }
Пример #11
0
        public ActionResult Login(FormCollection ketNoiForm)
        {
            string thongBao = "";
            // Lay gia tri tu trang html
            string username       = ketNoiForm["txtemail"].Trim();
            string password       = ketNoiForm["txtpassword"];
            string ghiNhoTaikhoan = ketNoiForm["chkGhiNhoTaikhoan"];
            string ReturnUrl      = ketNoiForm["txtReturnUrl"];
            // mã hóa password
            var    sha = SHA256.Create();
            string aa  = "";

            if (password != null && username != null)
            {
                var computedHash = sha.ComputeHash(Encoding.Unicode.GetBytes(password));
                aa = Convert.ToBase64String(computedHash).ToString();
                // Kiem tra Mat Khau co duoc lay ra tu nut ghi nho mat khau
                if (password.Length > 15)
                {
                    if (password.Substring(0, 15) == "H1@iN9inhmpl8i6")
                    {
                        if (password.Length >= 45)
                        {
                            aa = password.Substring(30, 15) + password.Substring(15, 15) + password.Substring(45);
                        }
                    }
                }

                SSOUserLoginInfors Us = UserManagerService.AuthenticateUser(username, aa, ref thongBao);
                if (Us != null)
                {
                    if (Us.ToChuc == null)
                    {
                        thongBao = "Tổ chức của người dùng không tồn tại. Vui lòng liên hệ với Admin";
                    }
                    else
                    {
                        if (ghiNhoTaikhoan != null)
                        {
                            Response.Cookies["userName"].Value        = username;
                            Response.Cookies["userName"].Expires      = DateTime.Now.AddDays(10);
                            Response.Cookies["passNguoiDung"].Value   = aa.Substring(15, 15) + aa.Substring(0, 15) + aa.Substring(30);
                            Response.Cookies["passNguoiDung"].Expires = DateTime.Now.AddDays(10);
                        }
                        //Session["RequestParams"] = par;
                        //var par = (SSOHttpRequestParams)Session["RequestParams"];// SSOHTTPRequestService.GetRequestParams(Request);
                        string redirectUrl = UriUtil.RemoveParameter(ReturnUrl, SSOConstants.UrlParams.TOKEN);
                        redirectUrl  = Utility.GetAppendedQueryString(redirectUrl, SSOConstants.UrlParams.TOKEN, Us.Token);
                        redirectUrl += "&NGUOIDUNGID=" + Us.User.NGUOIDUNGID;
                        //System.Web.HttpContext.Current.Response.Redirect("");
                        HttpCookie aCookie = new HttpCookie(SSOConstants.Cookie.AUTH_COOKIE);//("VILISUserLoginInfo");
                        aCookie.Value = Us.UserCookie.Value;
                        //đặt timeout của cookie bằng với giá trị timeout của token
                        aCookie.Expires = DateTime.Now.AddHours(Config.AUTH_TOKEN_TIMEOUT_IN_HOURS);
                        Response.Cookies.Add(aCookie);
                        return(Redirect(redirectUrl));
                    }
                }
                else
                {
                    ViewBag.ReturnUrl = ReturnUrl;
                    ViewBag.TB        = thongBao;
                }
            }
            return(View());
        }
Пример #12
0
 /// <summary>
 /// Determines whether the Token is expired or not
 /// </summary>
 /// <param name="expirytime"></param>
 /// <returns></returns>
 public static bool CheckExpired(SSOUserLoginInfors Us)
 {
     return(Us.TokenExpires.CompareTo(DateTime.Now) < 0);
 }
Пример #13
0
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication app     = (HttpApplication)sender;
            var             request = app.Request;

            //với post request thì không cần kiểm tra - phục vụ login POST request
            if (request.HttpMethod == "POST")
            {
                return;
            }

            //nếu là request tới wep api service thì tự động bỏ qua kiểm tra, tiếp tục xử lý
            if (request.Url.AbsolutePath.Contains("/api/"))
            {
                return;
            }

            //Lấy thông tin xác thực từ request
            SSOHttpRequestParams par = SSOHTTPRequestService.GetRequestParams(request);

            //ngừng xử lý request do không xác định được return url sau khi xác thực
            if (par == null || par.ReturnUrl == null || par.ReturnUrl.Equals(""))
            {
                Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": ngừng xử lý request do không xác định được return url sau khi xác thực");
                Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + JsonConvert.SerializeObject(par));
                app.CompleteRequest();
                return;
            }

            //Chỉ xử lý cho login, logout request, nếu không phải thì ngừng xử lý
            if (par.Action == null || !(par.Action.Equals(SSOConstants.ParamValues.LOGIN) || par.Action.Equals(SSOConstants.ParamValues.LOGOUT)))
            {
                Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": Chỉ xử lý cho login, logout request, nếu không phải thì ngừng xử lý");
                app.CompleteRequest();
                return;
            }

            //Logout
            if (par.Action.Equals(SSOConstants.ParamValues.LOGOUT))
            {
                Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": Logout request");
                UserManagerService.LogoutUser(par, SSOConstants.Cookie.AUTH_COOKIE, app);
                //Redirect user to default page
                SSOHTTPRequestService.Redirect(par.ReturnUrl, "", app);
                app.CompleteRequest();
                return;
            }

            //Nếu là post back thì tiếp tục xử lý như bình thường - dùng cho login page post back
            //if (HttpContext.Current.Request.HttpMethod == "POST") return;

            //Session["RequestParams"] = par;

            //Yêu cầu login hoặc chưa xác thực, tiếp tục xử lý xác thực như bình thường
            if (par.Token == null || par.Token.Equals(""))
            {
                return;
            }

            //Xử lý cho trường hợp request đã xác thực, gửi lại token và redirect người dùng về trang yêu cầu
            //Nếu chưa xác thực, mở trang login phục vụ xác thực trước khi redirect tới trang yêu cầu
            SSOUserLoginInfors Us = null;

            if (UserManagerService.CheckRequestAuthentication(par.Token, out Us))
            {
                Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + ": đã xác thực, ngừng xử lý");
                app.Response.Cookies.Add(Us.UserCookie);
                Us.FirstTimeToken = true;
                UserManagerService.UsersLoggedIn.AddOrUpdate(Us.Token, Us,
                                                             (key, existingVal) =>
                {
                    existingVal.FirstTimeToken = Us.FirstTimeToken;
                    return(existingVal);
                });
                SSOHTTPRequestService.Redirect(par.ReturnUrl, par.Token, app);
                app.CompleteRequest();
            }
        }