public async Task <IActionResult> Get()
        {
            try
            {
                var generatedWallet = await _walletGenerator.GenerateWalletAsync();

                if (string.IsNullOrEmpty(generatedWallet.Address) || string.IsNullOrEmpty(generatedWallet.PrivateKey) ||
                    string.IsNullOrEmpty(generatedWallet.PublicKey))
                {
                    throw new Exception("Response lacked one of the fields");
                }

                var storage = new AzureTableStorage <WalletStorageEntity>(_options.Value.ConnectionString, _options.Value.TableName, _logger);


                await storage.InsertAsync(new WalletStorageEntity
                {
                    PartitionKey = "part",
                    RowKey       = generatedWallet.Address,
                    Address      = generatedWallet.Address,
                    PublicKey    = generatedWallet.PublicKey,
                    PrivateKey   = generatedWallet.PrivateKey
                });

                return(Json(new GenerateWalletControllerResponseModel {
                    Address = generatedWallet.Address
                }));
            }
            catch (Exception e)
            {
                await _slackNotifier.Notify(new SlackMessage { Sender = "SolarCoinApi.Facade", Type = "Errors", Message = "Error occured during SolarCoin address generation." });

                await _logger.WriteErrorAsync("Wallet generator", "", "", e);

                int i = 0;
                while (e.InnerException != null)
                {
                    e = e.InnerException;
                    await _logger.WriteErrorAsync("Wallet generator", "", $"InnerException-lvl-{i}", e);

                    i++;
                }
            }

            return(new StatusCodeResult(500));
        }
Example #2
0
 private Task TryWriteErrorToSlack(string component, string message)
 {
     return(_notifier.Notify(new SlackMessage {
         Sender = component, Type = "Errors", Message = message
     }));
 }