Ejemplo n.º 1
0
        public async Task <ActionResult <DecisionResponse> > TokenProvisioning(DecisionRequest model, CancellationToken ct)
        {
            var response = new DecisionResponse
            {
                AcctId          = model.AcctId,
                BusinessAcctId  = model.BusinessAcctId,
                Last4CardNumber = model.Last4CardNumber
            };

            var settings = await _responseSettingsStorage
                           .Get(model.BusinessAcctId, model.AcctId, ct);

            if (settings == null)
            {
                await SaveTokenProvisioning(model, 404, 0, null);

                return(NotFound());
            }

            if (!SecretsAreEqual(settings.SharedSecret))
            {
                await SaveTokenProvisioning(model, 403, 0, null);

                return(StatusCode(403, "SharedSecret in Authorization header doesn't match the one configured"));
            }

            await Task
            .Delay(settings.DelayMls, ct);

            var customResult = GetCustomResult(settings.StatusCode);

            if (customResult != null)
            {
                await SaveTokenProvisioning(model, settings.StatusCode, settings.DelayMls, null);

                return(customResult);
            }

            response.Contacts = settings.ContactsJson.DeserializeTo <List <ContactItem> >();

            await SaveTokenProvisioning(model, settings.StatusCode, settings.DelayMls, response);

            return(response);
        }
        public async Task <ActionResult <ResponseSettingsModel> > GetSettings(int businessId, int cardholderId, CancellationToken ct)
        {
            var entity = await _responseSettingsStorage
                         .Get(businessId, cardholderId, ct);

            if (entity == null)
            {
                return(NotFound());
            }

            return(new ResponseSettingsModel
            {
                SharedSecret = entity.SharedSecret,
                StatusCode = entity.StatusCode,
                TimeoutMls = entity.DelayMls,
                Contacts = entity.ContactsJson.DeserializeTo <List <ContactItem> >()
            });
        }