public SessionMiddleware(
     RequestDelegate next,
     SessionManagerService sessionManager)
 {
     _next           = next;
     _sessionManager = sessionManager;
 }
        public void WhenUserExistsInActiveUsersAndLastActivityIsAfter10MinsThenReturnFalse()
        {
            var lastActivityDate = new DateTime(2016, 9, 10, 10, 0, 0);
            var sessionService   = new SessionManagerService(Mock.Of <IActiveUsers>(u => u.Users == new Dictionary <string, DateTime>
            {
                { "userTest", lastActivityDate }
            } && u["userTest"] == lastActivityDate), Mock.Of <IUtcDateTimeProvider>(d => d.UtcDateTimeNow == new DateTime(2016, 9, 10, 10, 10, 1)));

            sessionService.IsUserActive("userTest").Should().BeFalse();
        }
        public CommonApiResponse Get([FromBody] GetSessionRequest request, [FromServices] SessionManagerService sessionManager)
        {
            var merchant = (Merchant)HttpContext.Items["Merchant"];

            var session = sessionManager.Get(request.SessionId);

            if (session == null || session.MerchantId != merchant.Id)
            {
                throw new OuterException(InnerError.SessionNotFound);
            }

            return(new GetSessionResponse {
                SessionId = session.ExternalId, Amount = session.Amount, Currency = session.Currency
            });
        }
示例#4
0
        public CommonApiResponse After3Ds(Submit3Ds submit3Ds,
                                          [FromServices] SessionManagerService sessionManager,
                                          [FromServices] OperationManagerService operationManager,
                                          [FromServices] PaymentSystemContext dbContext)
        {
            var merchant = (Merchant)HttpContext.Items["Merchant"];

            var operation3ds = dbContext.Operation3ds.Include(x => x.Operation).FirstOrDefault(x => x.LocalMd == submit3Ds.MD);

            if (operation3ds == null || operation3ds.Operation.OperationStatus != OperationStatus.AdditionalAuth)
            {
                return new DebitResponse {
                           Error = new ApiError(InnerError.CommonError)
                }
            }
            ;

            var session = dbContext.Session.Include(x => x.Operation).First(x => x.Id == operation3ds.Operation.SessionId);

            if (session.MerchantId != merchant.Id)
            {
                return new DebitResponse {
                           Error = new ApiError(InnerError.CommonError)
                }
            }
            ;

            var possibility = operationManager.CheckPaymentPossibility(session, operation3ds.Operation);

            if (possibility != PaymentPossibility.PaymentAllowed)
            {
                return new DebitResponse {
                           Error = new ApiError(InnerError.CommonError)
                }
            }
            ;

            var result = operationManager.Deposit(session, operation3ds, submit3Ds);

            return(new DebitResponse {
                Status = result.OperationStatus
            });
        }
    }
}
        public CommonApiResponse Start([FromBody] StartSessionRequest request, [FromServices] SessionManagerService sessionManager)
        {
            var merchant = (Merchant)HttpContext.Items["Merchant"];

            var session = sessionManager.Create(merchant, new SessionCreateRequest
            {
                Amount           = request.Amount,
                Currency         = request.Currency,
                FormKey          = request.FormKey,
                FormLanguage     = request.FormLanguage,
                OrderDescription = request.OrderDescription,
                OrderId          = request.OrderId,
                SessionType      = request.SessionType
            });

            return(new StartSessionResponse {
                SessionId = session.ExternalId
            });
        }
示例#6
0
        public ContentResult Pay(string Id,
                                 [FromServices] SessionManagerService sessionManager,
                                 [FromServices] OperationManagerService operationManager,
                                 [FromServices] FormManagerService formManager,
                                 [FromServices] PaymentSystemContext dbContext,
                                 [FromServices] FormDataCryptService cryptService)
        {
            try
            {
                var session = sessionManager.Get(Id);
                if (session.SessionType != SessionType.OneStep && session.SessionType != SessionType.TwoStep)
                {
                    return(base.Content(formManager.GetErrorForm()));
                }
                var result     = operationManager.CheckPaymentPossibility(session);
                var dictionary = new Dictionary <string, string>();
                switch (result)
                {
                case PaymentPossibility.LimitExceeded:
                case PaymentPossibility.SessionExpired:
                    return(base.Content(formManager.GetErrorForm()));

                case PaymentPossibility.AlreadyPaid:
                    return(base.Content(formManager.GetSuccessForm()));

                default:
                    var generationTime = DateTime.UtcNow;
                    session.LastFormGenerationTime = generationTime;
                    session.TryCount++;
                    dbContext.SaveChanges();
                    var formSign = new FormSign {
                        GenerationTime = generationTime, SessionId = session.Id
                    };
                    dictionary.Add("sessionId", session.ExternalId);
                    dictionary.Add("code", cryptService.Crypt(formSign));
                    return(base.Content(formManager.GetPaymentForm(dictionary)));
                }
            }
            catch (Exception)
            {
                return(base.Content(formManager.GetErrorForm()));
            }
        }
        public CommonApiResponse Hold(DebitRequest request, [FromServices] SessionManagerService sessionManager, [FromServices] OperationManagerService operationManager)
        {
            var merchant = (Merchant)HttpContext.Items["Merchant"];

            var session = sessionManager.Create(merchant, new SessionCreateRequest
            {
                Amount           = request.Amount,
                Currency         = request.Currency,
                OrderDescription = request.OrderDescription,
                OrderId          = request.OrderId,
                SessionType      = SessionType.TwoStep
            });

            var paymentData = new PaymentData(request.Pan, request.Year, request.Month, request.Cvv);

            var result = operationManager.Hold(merchant, session, paymentData);

            return(new DebitResponse {
                Status = result.OperationStatus, Auth = result.AdditionalAuth
            });
        }
        public CommonApiResponse Hold(ChargeRequest request, [FromServices] SessionManagerService sessionManager, [FromServices] OperationManagerService operationManager)
        {
            var merchant = (Merchant)HttpContext.Items["Merchant"];

            var session = sessionManager.GetByOrderId(merchant, request.OrderId);

            if (session == null)
            {
                return new CommonApiResponse
                       {
                           Error = new ApiError(InnerError.SessionNotFound)
                       }
            }
            ;

            var result = operationManager.Charge(merchant, session, null, request.Amount);

            return(new DebitResponse {
                Status = result.OperationStatus, Auth = result.AdditionalAuth
            });
        }
    }
        public void WhenUserDoesntExistInActiveUserDictionaryThenReturnFalse()
        {
            var sessionService = new SessionManagerService(Mock.Of <IActiveUsers>(u => u.Users == new Dictionary <string, DateTime>()), Mock.Of <IUtcDateTimeProvider>());

            sessionService.IsUserActive("userTest").Should().BeFalse();
        }