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)); }
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> > 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)); }