Esempio n. 1
0
        public void Authentication_HrApi_Pass_Return200()
        {
            //Arrage
            string empid    = "TEST";
            string password = "******";

            HttpCallResult httpCallResult = new HttpCallResult
            {
                StatusCode    = "200",
                FaultInfo     = null,
                ReturnContent = "[{\"NAME_AC\": \"ESURENA RACHEL DOMINGUEZ\",\"Z_SITE_ID\": \"WIH\",\"status\": true}]"
            };

            _restfulApiClient.Post(Arg.Any <string>(), Arg.Any <Dictionary <string, string> >(), Arg.Any <string>()).Returns(httpCallResult);

            HrIdentityResponse expectedResponse = new HrIdentityResponse
            {
                Name_Ac   = "ESURENA RACHEL DOMINGUEZ",
                Z_Site_ID = "WIH",
                Status    = true
            };

            //Act
            HrIdentityResponse actualResponse = _targetObj.Authentication(empid, password);

            //Assert
            Assert.AreEqual(expectedResponse.Name_Ac, actualResponse.Name_Ac);
            Assert.AreEqual(expectedResponse.Z_Site_ID, actualResponse.Z_Site_ID);
            Assert.AreEqual(expectedResponse.Status, actualResponse.Status);
        }
Esempio n. 2
0
        public void Authentication_HrApi_Fail_Return_Not200()
        {
            //Arrage
            string empid    = "TEST";
            string password = "******";

            HttpCallResult httpCallResult = new HttpCallResult
            {
                StatusCode    = "401",
                FaultInfo     = null,
                ReturnContent = ""
            };

            _restfulApiClient.Post(Arg.Any <string>(), Arg.Any <Dictionary <string, string> >(), Arg.Any <string>()).Returns(httpCallResult);

            HrIdentityResponse expectedResponse = new HrIdentityResponse
            {
                Name_Ac   = "",
                Z_Site_ID = "",
                Status    = false
            };

            //Act
            HrIdentityResponse actualResponse = _targetObj.Authentication(empid, password);

            //Assert
            Assert.AreEqual(expectedResponse.Name_Ac, actualResponse.Name_Ac);
            Assert.AreEqual(expectedResponse.Z_Site_ID, actualResponse.Z_Site_ID);
            Assert.AreEqual(expectedResponse.Status, actualResponse.Status);
        }
Esempio n. 3
0
        public TResult <LoginViewModel> Login(string userId, string password)
        {
            bool isPass = false;
            HrIdentityResponse hrResponse = null;

            try
            {
                #region  Use AD service to auth & HR API Identity

                //AD 驗證先 結果為fasle 再call HR API
                if (_authService.ValidateByAd(userId, password))
                {
                    isPass = true;
                }
                else
                {
                    hrResponse = _authService.IdentityByHr(userId, password);
                    isPass     = hrResponse.Status;
                }

                //AD 認證 和 HR API 其中一個沒過 回傳失敗
                if (!isPass)
                {
                    return(TResult <LoginViewModel> .Fail(new LoginViewModel
                    {
                        IsLogin = isPass,
                        IsAdmin = false,
                        IsMember = false,
                    }, FaultInfoRcConstants.LOGIN_FAIL, "Account/Password error."));
                }

                #endregion

                List <string> uID = new List <string> {
                    userId.ToLower().Trim()
                };

                List <MdsAdUserData> mdsAdUserData = _authService.GetMdsAdUser(uID);

                //檢查是否為 Admin 權限
                List <WisGroupUser> wisGroupUser = _authService.CheckIsAdminOrMember(userId);

                //DB 目前狀況可能會有查到同一個工號 會有雙重身份 admin 和 apadmin
                //雙重身分 只要有找到 Admin 就是管理者
                if (wisGroupUser.Any(p => p.GroupID == "admin"))
                {
                    //為Admin 管理者可使用後台 APP List
                    return(TResult <LoginViewModel> .OK(new LoginViewModel
                    {
                        UID = mdsAdUserData.Count > 0 ? mdsAdUserData.FirstOrDefault().Uid : "",
                        //沒AD 名子資訊就取 HR 名子資訊  格式: Ting Chen/WHQ/Wistron
                        Name = mdsAdUserData.Count > 0 ? mdsAdUserData.FirstOrDefault().Name : hrResponse != null ? $"{hrResponse.Name_Ac.Trim()}{"/"}{hrResponse.Z_Site_ID}{"/Wistron"}" : "",
                        IsLogin = isPass,
                        IsAdmin = true,
                        IsMember = false,
                    }, "is login successful!"));
                }
                else
                {
                    //為一般 使用者只能使用 下載app 版本裝到手機上
                    return(TResult <LoginViewModel> .OK(new LoginViewModel
                    {
                        UID = mdsAdUserData.Count > 0 ? mdsAdUserData.FirstOrDefault().Uid : "",
                        //沒AD 名子資訊就取 HR 名子資訊  格式: Ting Chen/WHQ/Wistron
                        Name = mdsAdUserData.Count > 0 ? mdsAdUserData.FirstOrDefault().Name : hrResponse != null ? $"{hrResponse.Name_Ac.Trim()}{"/"}{hrResponse.Z_Site_ID}{"/Wistron"}" : "",
                        IsLogin = isPass,
                        IsAdmin = false,
                        IsMember = true,
                    }, "is login successful!"));
                }
            }
            catch (Exception ex)
            {
                //考慮到PassWord和OA密碼一致,不記錄PassWord
                LogHelper.WriteException(ex, MethodBase.GetCurrentMethod(), userId);
                return(TResult <LoginViewModel> .Fail(new LoginViewModel
                {
                    IsLogin = false,
                    IsAdmin = false,
                    IsMember = false,
                }, FaultInfoRcConstants.LOGIN_FAIL, "System error."));
            }
        }