Esempio n. 1
0
        /// <summary>
        /// 新建用户
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private async Task <ResponseBase> AddUser(SaveUserRequest request)
        {
            if (await _sysUserBll.ExistSysUserByAccount(request.Account))
            {
                return(new ResponseBase().GetResponseError(StatusCode.User40002, "用户帐号已存在"));
            }
            var userRole = _sysUserRoleBll.GetSysUserRole(request.UserRoleId);

            if (userRole == null)
            {
                return(new ResponseBase().GetResponseError(StatusCode.UserRole30001, "角色不存在"));
            }
            var user = new SysUser()
            {
                NickName       = request.NickName,
                AuthorityValue = string.Empty,
                Account        = request.Account,
                UserRoleId     = request.UserRoleId,
                DataFlag       = (int)DataFlagEnum.Normal,
                DataLimitArea  = string.Empty,
                DataLimitShop  = string.Empty,
                LastLoginTime  = null,
                StatusFlag     = request.StatusFlag,
                Pwd            = CryptogramHelper.Encrypt3DES(request.Password),
                DataLimitType  = (int)DataLimitTypeEnum.Area
            };
            await _sysUserBll.AddUser(user);

            return(ResponseBase.Success());
        }
Esempio n. 2
0
        public void UserCreateTest()
        {
            var aa = CryptogramHelper.DESEncrypt("e10adc3949ba59abbe56e057f20f883e", "12345678");

            var str = AppSettingsHelper.GetString("LogDirectory");

            Console.Write(aa);
        }
Esempio n. 3
0
 /// <summary>
 /// url解密
 /// </summary>
 /// <param name="this"></param>
 /// <returns></returns>
 public static string UrlDecode(this string @this)
 {
     if (string.IsNullOrWhiteSpace(@this))
     {
         return(string.Empty);
     }
     return(CryptogramHelper.Decrypt3DES(HttpUtility.UrlDecode(@this).Replace(" ", "+")));
 }
Esempio n. 4
0
 protected LoginUserView GetLoginUser(HttpContext httpContext)
 {
     if (httpContext.Request.Headers.ContainsKey("Token"))
     {
         string token    = httpContext.Request.Headers["Token"];
         var    userJson = CryptogramHelper.DESDecrypt(token, DateTime.Now.ToString("yyyyMMdd"));
         return(userJson.JsonDeserialize <LoginUserView>());
     }
     return(new LoginUserView());
 }
Esempio n. 5
0
        /// <summary>
        /// url加密
        /// </summary>
        /// <param name="this"></param>
        /// <returns></returns>
        public static string UrlEncode(this object @this)
        {
            var str = @this.ToString().Trim();

            if (string.IsNullOrWhiteSpace(str))
            {
                return(string.Empty);
            }
            return(HttpUtility.UrlEncode(CryptogramHelper.Encrypt3DES(str)));
        }
Esempio n. 6
0
        public ActionResult <object> ModifySysUserByPwd(string userPwd, string newPwd)
        {
            var userLogin = GetLoginUser(HttpContext);
            var user      = _repository.GetSysUserById(userLogin.UserId);

            if (CryptogramHelper.GetMd5Hash(userPwd) == user.UserPwd)
            {
                user.UserPwd = CryptogramHelper.GetMd5Hash(newPwd);
                return(_repository.ModifySysUser(user).ResponseSuccessFailure());
            }
            return(false.ResponseDataError("旧密码错误"));
        }
Esempio n. 7
0
        public ActionResult <object> Login(string username, string password)
        {
            if (username.IsNullOrWhiteSpace() || password.IsNullOrWhiteSpace())
            {
                return(false.ResponseDataError("参数为空"));
            }
            var user = _repository.GetSysUserByName(username);

            if (user == null)
            {
                return(false.ResponseDataError("账号或密码错误"));
            }
            if (CryptogramHelper.GetMd5Hash(password) != user.UserPwd)
            {
                if (user.IsLock && user.ModifyTime.Date == DateTime.Now.Date)
                {
                    return(false.ResponseUnknown("账户错误次数过多,请明天在尝试"));
                }
                if (user.ModifyTime.Date != DateTime.Now.Date)
                {
                    user.ErrorCount = 0;
                    user.IsLock     = false;
                }
                user.ErrorCount += 1;
                user.ModifyTime  = DateTime.Now;    //修改时间
                if (user.ErrorCount >= 5)
                {
                    user.IsLock = true;
                }
                _repository.ModifySysUserAsync(user); //异步更新数据
                return(false.ResponseDataError("账号或密码错误"));
            }

            var roleIds = new List <int> {
                user.RoleId
            };
            var model = new
            {
                token        = SetLoginToken(user, roleIds),
                name         = user.UserName,
                avatar       = AppSettingsHelper.GetString("LoginUserAvatarUrl", "#"),
                introduction = user.UserCode,
                roles        = roleIds.GetStringJoin(",")
            };

            user.ErrorCount = 0;
            user.IsLock     = false;
            user.ModifyTime = DateTime.Now;                                                     //修改时间
            _repository.ModifySysUserAsync(user);                                               //异步更新数据
            _cache.Set(model.token.GetHashCode(), model.token, DateTimeOffset.Now.AddHours(1)); //缓存数据1小时
            return(model.ResponseSuccess());
        }
Esempio n. 8
0
        /// <summary>
        /// 重置用户密码
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <ResponseBase> ProcessAction(ResetPasswordRequest request)
        {
            var user = await _sysUserBll.GetSysUser(request.UserId);

            if (user == null)
            {
                return(new ResponseBase().GetResponseError(StatusCode.User40001, "用户不存在"));
            }
            var newPwd = CryptogramHelper.Encrypt3DES(request.NewPassword);
            await _sysUserBll.ChangePassword(request.UserId, newPwd);

            return(ResponseBase.Success());
        }
Esempio n. 9
0
        public ActionResult <object> ResetSysUserByPwd(int userId, string pwd)
        {
            var user = _repository.GetSysUser(userId);

            if (user == null)
            {
                return(false.ResponseDataError());
            }
            user.UserPwd    = CryptogramHelper.GetMd5Hash(pwd);
            user.IsLock     = false;
            user.ErrorCount = 0;
            return(_repository.ModifySysUser(user).ResponseSuccessFailure());
        }
Esempio n. 10
0
        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <ResponseBase> ProcessAction(ChangePasswordRequest request)
        {
            var user = await _sysUserBll.GetSysUser(request.LoginUserId);

            var oldPwd = CryptogramHelper.Encrypt3DES(request.OldPassword);

            if (oldPwd != user.Pwd)
            {
                return(new ResponseBase().GetResponseError(StatusCode.User40004, "旧密码不正确"));
            }
            var newPwd = CryptogramHelper.Encrypt3DES(request.NewPassword);
            await _sysUserBll.ChangePassword(request.LoginUserId, newPwd);

            return(ResponseBase.Success());
        }
Esempio n. 11
0
        protected string SetLoginToken(SysUserEntity user, List <int> roleIds)
        {
            var sessionUser = new LoginUserView
            {
                //OrgId = user.OrgId,
                UserName = user.UserName,
                //UserCode = user.UserCode,
                UserId  = user.UserId,
                RoleIds = roleIds
            };

            //HttpContext.Session.SetString(LoginSessionKey, sessionUser.JsonSerialize());     //存入缓存

            //建议用redis存取加密密钥,和用户登录状态
            //DES加密用户信息给出Token
            return(CryptogramHelper.DESEncrypt(sessionUser.JsonSerialize(), DateTime.Now.ToString("yyyyMMdd")));
        }
Esempio n. 12
0
        /// <summary>
        /// 将参数解密并转成对应的数据类型
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public static T UrlDecode <T>(this string source)
        {
            if (string.IsNullOrEmpty(source))
            {
                return(default(T));
            }
            var decodeStr = CryptogramHelper.Decrypt3DES(UrlHelper.UrlDecode(source).Replace(" ", "+"));

            if (string.IsNullOrEmpty(decodeStr))
            {
                return(default(T));
            }
            try
            {
                return((T)Convert.ChangeType(decodeStr, typeof(T)));
            }
            catch (Exception)
            {
                return(default(T));
            }
        }
Esempio n. 13
0
        /// <summary>
        /// url解密
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="this"></param>
        /// <returns></returns>
        public static T UrlDecode <T>(this string @this)
        {
            if (string.IsNullOrWhiteSpace(@this))
            {
                return(default(T));
            }
            var decodeStr = CryptogramHelper.Decrypt3DES(HttpUtility.UrlDecode(@this).Replace(" ", "+"));

            if (string.IsNullOrEmpty(decodeStr))
            {
                return(default(T));
            }
            try
            {
                return((T)Convert.ChangeType(decodeStr, typeof(T)));
            }
            catch (Exception)
            {
                return(default(T));
            }
        }
Esempio n. 14
0
        /// <summary>
        /// 根据用户id生成token
        /// </summary>
        /// <param name="userId">用户的id</param>
        /// <returns>token内容</returns>
        public static string GetJwt(int userId)
        {
            var now = DateTime.UtcNow;

            var claims = new Claim[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, CryptogramHelper.Encrypt3DES(userId.ToString(), UidKey)),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(JwtRegisteredClaimNames.Iat, now.ToUniversalTime().ToString(),
                          ClaimValueTypes.Integer64),
            };
            var jwt = new JwtSecurityToken(
                claims: claims,
                notBefore: now,
                expires: DateTime.Now.AddMinutes(TokenTimeOut),
                signingCredentials: new SigningCredentials(GetSecretKey(), SecurityAlgorithms.HmacSha256)
                );
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            return(encodedJwt);
        }
Esempio n. 15
0
        /// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="httpContext"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <ResponseBase> ProcessAction(HttpContext httpContext, LoginRequest request)
        {
            var response = new ResponseBase();

            if (!await CheckUserLoginFailedRecord(request.UserAccount))
            {
                return(response.GetResponseError(StatusCode.Login20003, "登录失败次数超过限制"));
            }
            if (string.IsNullOrEmpty(request.UserAccount) || string.IsNullOrEmpty(request.UserPassword))
            {
                return(response.GetResponseBadRequest());
            }
            var pwd  = CryptogramHelper.Encrypt3DES(request.UserPassword);
            var user = await _sysUserBll.GetSysUser(request.UserAccount, pwd);

            if (user == null)
            {
                await _sysUserBll.AddUserLoginFailedRecord(request.UserAccount, SystemConfig.UserLoginConfig.LoginFailedMaxCount, SystemConfig.UserLoginConfig.LoginFailedTimeOut);

                return(response.GetResponseError(StatusCode.Login20001, "帐号或密码错误"));
            }
            if (user.StatusFlag == (int)UserStatusFlagEnum.Disable)
            {
                return(response.GetResponseError(StatusCode.Login20002, "帐号被禁用"));
            }
            var loginView = await GetLoginView(user);

            var userRole = await _sysUserRoleBll.GetSysUserRole(user.UserRoleId);

            AppTicket.SetAppTicket(httpContext, user, userRole);
            await _sysUserBll.UpdateUserLastLoginTime(user.UserId, DateTime.Now);

            await _sysUserBll.RemoveUserLoginFailedRecord(request.UserAccount);

            AddUserLoginLog(user);
            return(response.GetResponseSuccess(loginView));
        }
Esempio n. 16
0
        /// <summary>
        /// jwt token解密获取用户标识
        /// </summary>
        /// <param name="token">待验证的token</param>
        /// <returns>验证后的用户id,当用户id为0或者产生异常则表示Token验证失败</returns>
        public static int JwtValidate(string token)
        {
            try
            {
                var           tokenHandler = new JwtSecurityTokenHandler();
                var           jwtToken     = tokenHandler.ReadJwtToken(token);
                SecurityToken secretToken  = null;
                var           tokenValidationParameters = new TokenValidationParameters
                {
                    // The signing key must match!
                    ValidateIssuerSigningKey = true,
                    ValidateAudience         = false,
                    ValidateIssuer           = false,
                    IssuerSigningKeys        = new List <SecurityKey> {
                        GetSecretKey()
                    },
                    TokenDecryptionKey = GetSecretKey(),

                    // Validate the token expiry
                    ValidateLifetime = true,
                };
                var value       = tokenHandler.ValidateToken(token, tokenValidationParameters, out secretToken);
                var userIdClaim = jwtToken.Claims.FirstOrDefault(p => p.Type == JwtRegisteredClaimNames.Sub);
                int userId      = 0;
                if (!string.IsNullOrEmpty(userIdClaim.Value))
                {
                    Int32.TryParse(CryptogramHelper.Decrypt3DES(userIdClaim.Value, UidKey), out userId);
                }
                return(userId);
            }
            catch (SecurityTokenValidationException ex)
            {
                Log.Write($"Token校验不通过,token:{token}", MessageType.Error, typeof(JwtHelper), ex);
                return(0);
            }
        }
Esempio n. 17
0
 /// <summary>
 /// url加密
 /// </summary>
 /// <param name="source"></param>
 /// <returns></returns>
 public static string UrlEncode(this string source)
 {
     return(UrlHelper.UrlEncode(CryptogramHelper.Encrypt3DES(source)));
 }
Esempio n. 18
0
 /// <summary>
 /// url解密
 /// </summary>
 /// <param name="source"></param>
 /// <returns></returns>
 public static string UrlDecode(this string source)
 {
     return(CryptogramHelper.Decrypt3DES(UrlHelper.UrlDecode(source).Replace(" ", "+")));
 }
Esempio n. 19
0
        public async Task <dynamic> ProcessRequest(Request request)
        {
            request.isValid = true;
            var errorModel = new ErrorModel();


            try
            {
                var val = await _messageService.GetErrorMessage("ECord1");

                Logger.InformationLog($"In TransactionService.ProcessRequest, Process Request Start");

                var merchantInfoResult = await _paymentService.GetMerchantInfo(errorModel, request.MerchantInfo.MerchantKey, request.MerchantInfo.IpAddress, Convert.ToInt32(request.MerchantInfo.ProcessorId));

                if (errorModel.validationFailedMsg.Count > 0 || (errorModel.errors != null && errorModel.errors.Count > 0))
                {
                    GatewayResult Result = BuildValidationOrErrorFailedStatusReturnObject(errorModel, request.MerchantInfo.TransactionType);
                    return(Result);
                }

                Logger.InformationLog($"In TransactionController.ProcessRequest, GetMerchantInfo: " + JsonConvert.SerializeObject(merchantInfoResult));

                //If creditCardCryptogram is Not Null
                if (!string.IsNullOrEmpty(request.CreditCardCryptogram) && string.IsNullOrEmpty(request.CardNumber))
                {
                    var creditCardFromCryptogramResult = await _paymentService.GetCreditCardFromCryptogram(new PaymentDataFromCryptogramInput()
                    {
                        Cryptogram      = request.CreditCardCryptogram,
                        TransactionType = Convert.ToString(request.MerchantInfo.TransactionType)
                    });

                    if (creditCardFromCryptogramResult.Message != null)
                    {
                        request.CardNumber    = creditCardFromCryptogramResult.CardNumber;
                        request.CardExpMonth  = Convert.ToInt32(creditCardFromCryptogramResult.CardExpMonth);
                        request.CardExpYear   = Convert.ToInt32(creditCardFromCryptogramResult.CardExpYear);
                        request.CVV           = Convert.ToInt32(creditCardFromCryptogramResult.CardSecurityCode);
                        request.ConvFeeAmount = Convert.ToDecimal(creditCardFromCryptogramResult.FeeAmount);
                    }
                }

                //If token number is null then call tokenizer to generate token number
                if (string.IsNullOrEmpty(request.CreditCardToken) && !string.IsNullOrEmpty(request.CardNumber))
                {
                    request.CreditCardToken = _paymentService.GetTokenFromCreditCard(request.CardNumber);
                }

                var oldToken = request.CreditCardToken;

                //Check null values and MagData is empty
                var isNullProperties = (!string.IsNullOrEmpty(request.CreditCardToken) && request.CardExpMonth != null &&
                                        request.CardExpYear != null && string.IsNullOrEmpty(request.MagData));
                var process = new Process();
                if (isNullProperties)
                {
                    request.isValid  = false;
                    process.ExpMonth = request.CardExpMonth;
                    process.ExpYear  = request.CardExpYear;
                    process.CardType = CreditCardHelper.GetCreditCardType(request.CardNumber ?? _paymentService.GetCreditCardNumberFromToken(request.CreditCardToken));
                    process.Token    = request.CreditCardToken;

                    //GetUpdatedCardDetails
                    process = await _paymentService.GetUpdatedCardDetails(process);

                    //Re asign the expMonth, expYear and token
                    request.CardExpMonth    = process.ExpMonth;
                    request.CardExpYear     = process.ExpYear;
                    request.CreditCardToken = process.Token;
                }

                process = ValidateExpMonthAndYear(errorModel, process);

                if (errorModel.validationFailedMsg.Count > 0 || (errorModel.errors != null && errorModel.errors.Count > 0))
                {
                    GatewayResult Result = BuildValidationOrErrorFailedStatusReturnObject(errorModel, request.MerchantInfo.TransactionType);
                    return(Result);
                }

                ValidateExtensions.ValidateIpAddress(merchantInfoResult.IpAddress, errorModel);

                if (merchantInfoResult.AccountType == IndustryTypesEnum.ach.ToString())
                {
                    errorModel.errors.Add(string.Format("Invalid Account Type For Transaction ('{0}')", merchantInfoResult.AccountType));
                    return(null);
                }
                var ValidateHelper = new ValidateHelper();

                var orderId = new ValidateHelper().ValidateOrderIdAndGenerateNewOrderIdIfNeededAsync(request, merchantInfoResult, errorModel);

                process = await _paymentService.ValidateInitAndBuildProcessObject(request, merchantInfoResult, errorModel, process);

                if (!request.isValid)
                {
                    errorModel.validationFailedMsg.Add(new ValidationFailedMsg()
                    {
                        Key = "", Message = ""
                    });                                                                                      //On Hold
                }

                if (errorModel.errors.Count > 0 || errorModel.validationFailedMsg.Count > 0)
                {
                    GatewayResult Result = BuildValidationOrErrorFailedStatusReturnObject(errorModel, request.MerchantInfo.TransactionType);
                    return(Result);
                }

                if (!string.IsNullOrWhiteSpace(oldToken) && !string.IsNullOrWhiteSpace(process.Token))
                {
                    if (!oldToken.Equals(process.Token))
                    {
                        process.CardNumber = _paymentService.GenerateCardNumberUsingToken(process.Token.Trim());
                    }
                }

                if (process != null && request.OtherFields != null && request.OtherFields.Count > 0)
                {
                    _paymentService.ValidateAndAddCustomFields(process, request.OtherFields /*, info.processor*/);// On Hold
                }
                if (!string.IsNullOrWhiteSpace(request.CreditCardCryptogram))
                {
                    request.expireCryptogram = CryptogramHelper.ForceExpireCryptogramAsync(_config.GetSection("CryptogramApi").Value, request);
                }
                IndustryTypesEnum industryType = request.MerchantInfo.accountType.ParseEnum <IndustryTypesEnum>();


                return(process);
            }
            catch (Exception ex)
            {
                Logger.ErrorLog($"Exception In  TransactionService.ProcessRequest. exception={ex.Message}, Trace={ex.StackTrace}");
                throw ex;
            }
            finally
            {
                Logger.InformationLog($"Out  TransactionService.ProcessRequest, Process Request End");
            }
        }
Esempio n. 20
0
 /// <summary>
 /// 插入用户
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public bool AddSysUser(SysUserEntity model)
 {
     model.ModifyTime = DateTime.Now;
     model.UserPwd    = CryptogramHelper.GetMd5Hash(model.UserPwd);
     return(_service.Insert(model));
 }