public async Task <ActionResult <PolicyQuoteViewModelGet> > GetPolicyQuote()
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            logger.LogInformation($"Get PolicyQuote for user { ((identity == null) ? "/" : identity.ToString())} ...");
            FeeQuote feeQuote = feeQuoteRepository.GetCurrentFeeQuoteByIdentity(identity);


            if (feeQuote == null)
            {
                logger.LogInformation($"There are no active policyQuotes.");

                return(NotFound());
            }

            var policyQuoteViewModelGet = new PolicyQuoteViewModelGet(feeQuote, callbackIPAddressesArray)
            {
                Timestamp = clock.UtcNow(),
            };

            return(await FillFeeQuoteViewModelWithInfo(policyQuoteViewModelGet));
        }
Пример #2
0
        public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxsAsync(
            SubmitTransactionViewModel[] data,
            [FromQuery]
            string defaultCallbackUrl,
            [FromQuery]
            string defaultCallbackToken,
            [FromQuery]
            string defaultCallbackEncryption,
            [FromQuery]
            bool defaultMerkleProof,
            [FromQuery]
            bool defaultDsCheck)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            var domainModel = data.Select(x =>
                                          x.ToDomainModel(defaultCallbackUrl, defaultCallbackToken, defaultCallbackEncryption, defaultMerkleProof, defaultDsCheck)).ToArray();

            var result =
                new SubmitTransactionsResponseViewModel(
                    await mapi.SubmitTransactionsAsync(domainModel,
                                                       identity));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
Пример #3
0
        public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxsRawAsync(
            [FromQuery] string callbackUrl,
            [FromQuery] string callbackEncryption,
            [FromQuery] string callbackToken,
            [FromQuery] bool merkleProof,
            [FromQuery] bool dsCheck
            )
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }
            // callbackUrl is validated as part of domainObject - no special validation here
            byte[] data;
            using (var ms = new MemoryStream())
            {
                await Request.Body.CopyToAsync(ms);

                data = ms.ToArray();
            }

            byte[][] transactionAsBytes;
            try
            {
                // This is not very efficient, since we will reparse bytes into NBitcoin.Transaction later again
                transactionAsBytes = HelperTools.ParseTransactionsIntoBytes(data);
            }
            catch (Exception)
            {
                var problemDetail = ProblemDetailsFactory.CreateProblemDetails(HttpContext, (int)HttpStatusCode.BadRequest);
                problemDetail.Title = "Unable to parse incoming stream of transactions";
                return(BadRequest(problemDetail));
            }

            var request = transactionAsBytes.Select(

                t =>
                new SubmitTransaction
            {
                RawTx              = t,
                CallbackUrl        = callbackUrl,
                CallbackEncryption = callbackEncryption,
                CallbackToken      = callbackToken,
                MerkleProof        = merkleProof,
                DsCheck            = dsCheck
            }).ToArray();

            var result =
                new SubmitTransactionsResponseViewModel(
                    await mapi.SubmitTransactionsAsync(request, identity));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
        public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxAsync(SubmitTransactionViewModel data)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            var domainModel = data.ToDomainModel(null, null, null, false, null, false);

            var result =
                new SubmitTransactionResponseViewModel(
                    await mapi.SubmitTransactionAsync(domainModel, identity));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
        public async Task <ActionResult <QueryTransactionStatusResponseViewModel> > QueryTransactionStatus(string id)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out _))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }
            if (!uint256.TryParse(id, out _))
            {
                var problemDetail = ProblemDetailsFactory.CreateProblemDetails(HttpContext, (int)HttpStatusCode.BadRequest);
                problemDetail.Title = "Invalid format of TransactionId";
                return(BadRequest(problemDetail));
            }

            var result =
                new QueryTransactionStatusResponseViewModel(
                    await mapi.QueryTransaction(id));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
        public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxsAsync(
            SubmitTransactionViewModel[] data,
            [FromQuery]
            string defaultCallbackUrl,
            [FromQuery]
            string defaultCallbackToken,
            [FromQuery]
            string defaultCallbackEncryption,
            [FromQuery]
            bool defaultMerkleProof,
            [FromQuery]
            string defaultMerkleFormat,
            [FromQuery]
            bool defaultDsCheck)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            var domainModel = data.Select(x =>
                                          x.ToDomainModel(defaultCallbackUrl, defaultCallbackToken, defaultCallbackEncryption, defaultMerkleProof, defaultMerkleFormat, defaultDsCheck)).ToArray();

            SubmitTransactionsResponseViewModel result;

            try
            {
                result =
                    new SubmitTransactionsResponseViewModel(
                        await mapi.SubmitTransactionsAsync(domainModel,
                                                           identity));
            }
            catch (BadRequestException ex)
            {
                logger.LogError($"Error while submiting transactions. {ex.Message}.");
                var problemDetail = ProblemDetailsFactory.CreateProblemDetails(HttpContext, (int)HttpStatusCode.BadRequest);
                problemDetail.Title = ex.Message;
                return(BadRequest(problemDetail));
            }

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
        public async Task <ActionResult <SubmitTransactionResponseViewModel> > SubmitTxRawAsync(
            [FromQuery]
            string callbackUrl,
            [FromQuery]
            string callbackToken,
            [FromQuery]
            string callbackEncryption,
            [FromQuery]
            bool merkleProof,
            [FromQuery]
            string merkleFormat,
            [FromQuery]
            bool dsCheck)
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            byte[] data;
            using (var ms = new MemoryStream())
            {
                await Request.Body.CopyToAsync(ms);

                data = ms.ToArray();
            }

            var request = new SubmitTransaction
            {
                RawTx              = data,
                CallbackUrl        = callbackUrl,
                CallbackToken      = callbackToken,
                CallbackEncryption = callbackEncryption,
                MerkleProof        = merkleProof,
                MerkleFormat       = merkleFormat,
                DsCheck            = dsCheck
            };

            var result = new SubmitTransactionResponseViewModel(await mapi.SubmitTransactionAsync(request, identity));

            return(await SignIfRequiredAsync(result, result.MinerId));
        }
Пример #8
0
    public async Task GetBySchemeAsync_should_filter_by_scheme_casing(DbContextOptions <ConfigurationDbContext> options)
    {
        using (var context = new ConfigurationDbContext(options))
        {
            var idp = new OidcProvider
            {
                Scheme = "SCHEME3", Type = "oidc"
            };
            context.IdentityProviders.Add(idp.ToEntity());
            context.SaveChanges();
        }

        using (var context = new ConfigurationDbContext(options))
        {
            var store = new IdentityProviderStore(context, FakeLogger <IdentityProviderStore> .Create(), new NoneCancellationTokenProvider());
            var item  = await store.GetBySchemeAsync("scheme3");

            item.Should().BeNull();
        }
    }
Пример #9
0
        public async Task <ActionResult <FeeQuoteViewModelGet> > GetFeeQuote()
        {
            if (!IdentityProviderStore.GetUserAndIssuer(User, Request.Headers, out var identity))
            {
                return(Unauthorized("Incorrectly formatted token"));
            }

            logger.LogInformation($"Get FeeQuote for user { ((identity == null) ? "/" : identity.ToString() )} ...");
            FeeQuote feeQuote = feeQuoteRepository.GetCurrentFeeQuoteByIdentity(identity);


            if (feeQuote == null)
            {
                logger.LogInformation($"There are no active feeQuotes.");

                return(NotFound());
            }

            var feeQuoteViewModelGet = new FeeQuoteViewModelGet(feeQuote)
            {
                Timestamp = clock.UtcNow(),
            };

            feeQuoteViewModelGet.ExpiryTime = feeQuoteViewModelGet.Timestamp.Add(TimeSpan.FromMinutes(quoteExpiryMinutes));

            var info = blockChainInfo.GetInfo();

            feeQuoteViewModelGet.MinerId = await minerId.GetCurrentMinerIdAsync();

            feeQuoteViewModelGet.CurrentHighestBlockHash   = info.BestBlockHash;
            feeQuoteViewModelGet.CurrentHighestBlockHeight = info.BestBlockHeight;

            logger.LogInformation($"Returning feeQuote with ExpiryTime: {feeQuoteViewModelGet.ExpiryTime}.");

            return(await SignIfRequiredAsync(feeQuoteViewModelGet, feeQuoteViewModelGet.MinerId));
        }