Beispiel #1
0
        private static void Init()
        {
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

            Console.WriteLine($"Environment: {environment}");

            var builder = new ConfigurationBuilder()
                          .AddJsonFile($"appsettings.{environment}.json", true, true)
                          .AddEnvironmentVariables();

            IConfigurationRoot Configuration = builder.Build();

            // Retrieve configuration from sections
            ApplicationSettings.ConnectionString          = Configuration.GetSection("ApplicationSettings:ConnectionString")?.Value;
            ApplicationSettings.DatabaseId                = Configuration.GetSection("ApplicationSettings:DatabaseId")?.Value;
            ApplicationSettings.UserCollection            = Configuration.GetSection("ApplicationSettings:UserCollection")?.Value;
            ApplicationSettings.RabbitMQUsername          = Configuration.GetSection("ApplicationSettings:RabbitMQUsername")?.Value;
            ApplicationSettings.RabbitMQPassword          = Configuration.GetSection("ApplicationSettings:RabbitMQPassword")?.Value;
            ApplicationSettings.RabbitMQHostname          = Configuration.GetSection("ApplicationSettings:RabbitMQHostname")?.Value;
            ApplicationSettings.RabbitMQPort              = Convert.ToInt16(Configuration.GetSection("ApplicationSettings:RabbitMQPort")?.Value);
            ApplicationSettings.UserRegistrationQueueName = Configuration.GetSection("ApplicationSettings:UserRegistrationQueueName")?.Value;
            ApplicationSettings.KeyVaultCertificateName   = Configuration.GetSection("ApplicationSettings:KeyVaultCertificateName")?.Value;
            ApplicationSettings.KeyVaultClientId          = Configuration.GetSection("ApplicationSettings:KeyVaultClientId")?.Value;
            ApplicationSettings.KeyVaultClientSecret      = Configuration.GetSection("ApplicationSettings:KeyVaultClientSecret")?.Value;
            ApplicationSettings.KeyVaultIdentifier        = Configuration.GetSection("ApplicationSettings:KeyVaultIdentifier")?.Value;
            ApplicationSettings.KeyVaultEncryptionKey     = Configuration.GetSection("ApplicationSettings:KeyVaultEncryptionKey")?.Value;
            ApplicationSettings.SendGridAPIKey            = Configuration.GetSection("ApplicationSettings:SendGridAPIKey")?.Value;

            mongoDBConnectionInfo = new MongoDBConnectionInfo()
            {
                ConnectionString = ApplicationSettings.ConnectionString,
                DatabaseId       = ApplicationSettings.DatabaseId,
                UserCollection   = ApplicationSettings.UserCollection
            };

            keyVaultConnectionInfo = new KeyVaultConnectionInfo()
            {
                CertificateName    = ApplicationSettings.KeyVaultCertificateName,
                ClientId           = ApplicationSettings.KeyVaultClientId,
                ClientSecret       = ApplicationSettings.KeyVaultClientSecret,
                KeyVaultIdentifier = ApplicationSettings.KeyVaultIdentifier
            };

            using (KeyVaultHelper keyVaultHelper = new KeyVaultHelper(keyVaultConnectionInfo))
            {
                secret = keyVaultHelper.GetVaultKeyAsync(ApplicationSettings.KeyVaultEncryptionKey).Result;
            }

            using (BlockchainHelper blockchainHelper = new BlockchainHelper())
            {
                wordlist = blockchainHelper.ReadMnemonic();
            }
        }
        private static void Init()
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile($"appsettings.json", true, true)
                          .AddEnvironmentVariables();

            IConfigurationRoot Configuration = builder.Build();

            // Retrieve configuration from sections
            Settings.ConnectionString          = Configuration.GetSection("ConnectionString")?.Value;
            Settings.DatabaseId                = Configuration.GetSection("DatabaseId")?.Value;
            Settings.UserCollection            = Configuration.GetSection("UserCollection")?.Value;
            Settings.RabbitMQUsername          = Configuration.GetSection("RabbitMQUsername")?.Value;
            Settings.RabbitMQPassword          = Configuration.GetSection("RabbitMQPassword")?.Value;
            Settings.RabbitMQHostname          = Configuration.GetSection("RabbitMQHostname")?.Value;
            Settings.RabbitMQPort              = Convert.ToInt16(Configuration.GetSection("RabbitMQPort")?.Value);
            Settings.UserRegistrationQueueName = Configuration.GetSection("UserRegistrationQueueName")?.Value;
            Settings.KeyVaultCertificateName   = Configuration.GetSection("KeyVaultCertificateName")?.Value;
            Settings.KeyVaultClientId          = Configuration.GetSection("KeyVaultClientId")?.Value;
            Settings.KeyVaultClientSecret      = Configuration.GetSection("KeyVaultClientSecret")?.Value;
            Settings.KeyVaultIdentifier        = Configuration.GetSection("KeyVaultIdentifier")?.Value;
            Settings.KeyVaultEncryptionKey     = Configuration.GetSection("KeyVaultEncryptionKey")?.Value;
            Settings.SendGridAPIKey            = Configuration.GetSection("SendGridAPIKey")?.Value;

            mongoDBConnectionInfo = new MongoDBConnectionInfo()
            {
                ConnectionString = Settings.ConnectionString,
                DatabaseId       = Settings.DatabaseId,
                UserCollection   = Settings.UserCollection
            };

            keyVaultConnectionInfo = new KeyVaultConnectionInfo()
            {
                CertificateName    = Settings.KeyVaultCertificateName,
                ClientId           = Settings.KeyVaultClientId,
                ClientSecret       = Settings.KeyVaultClientSecret,
                KeyVaultIdentifier = Settings.KeyVaultIdentifier
            };

            using (KeyVaultHelper keyVaultHelper = new KeyVaultHelper(keyVaultConnectionInfo))
            {
                secret = keyVaultHelper.GetVaultKeyAsync(Settings.KeyVaultEncryptionKey).Result;
            }

            using (BlockchainHelper blockchainHelper = new BlockchainHelper())
            {
                wordlist = blockchainHelper.ReadMnemonic();
            }
        }
        private static void Init()
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddJsonFile("secrets/appsettings.secrets.json", optional: true)
                          .AddEnvironmentVariables();

            IConfigurationRoot Configuration = builder.Build();

            // Retrieve configuration from sections
            ApplicationSettings.ConnectionString        = Configuration.GetSection("ApplicationSettings:ConnectionString")?.Value;
            ApplicationSettings.DatabaseId              = Configuration.GetSection("ApplicationSettings:DatabaseId")?.Value;
            ApplicationSettings.ReportCollection        = Configuration.GetSection("ApplicationSettings:ReportCollection")?.Value;
            ApplicationSettings.RabbitMQUsername        = Configuration.GetSection("ApplicationSettings:RabbitMQUsername")?.Value;
            ApplicationSettings.RabbitMQPassword        = Configuration.GetSection("ApplicationSettings:RabbitMQPassword")?.Value;
            ApplicationSettings.RabbitMQHostname        = Configuration.GetSection("ApplicationSettings:RabbitMQHostname")?.Value;
            ApplicationSettings.RabbitMQPort            = Convert.ToInt16(Configuration.GetSection("ApplicationSettings:RabbitMQPort")?.Value);
            ApplicationSettings.DispatchQueueName       = Configuration.GetSection("ApplicationSettings:DispatchQueueName")?.Value;
            ApplicationSettings.KeyVaultCertificateName = Configuration.GetSection("ApplicationSettings:KeyVaultCertificateName")?.Value;
            ApplicationSettings.KeyVaultClientId        = Configuration.GetSection("ApplicationSettings:KeyVaultClientId")?.Value;
            ApplicationSettings.KeyVaultClientSecret    = Configuration.GetSection("ApplicationSettings:KeyVaultClientSecret")?.Value;
            ApplicationSettings.KeyVaultIdentifier      = Configuration.GetSection("ApplicationSettings:KeyVaultIdentifier")?.Value;
            ApplicationSettings.KeyVaultEncryptionKey   = Configuration.GetSection("ApplicationSettings:KeyVaultEncryptionKey")?.Value;
            ApplicationSettings.SendGridAPIKey          = Configuration.GetSection("ApplicationSettings:SendGridAPIKey")?.Value;

            mongoDBConnectionInfo = new MongoDBConnectionInfo()
            {
                ConnectionString = ApplicationSettings.ConnectionString,
                DatabaseId       = ApplicationSettings.DatabaseId,
                UserCollection   = ApplicationSettings.ReportCollection
            };

            keyVaultConnectionInfo = new KeyVaultConnectionInfo()
            {
                CertificateName    = ApplicationSettings.KeyVaultCertificateName,
                ClientId           = ApplicationSettings.KeyVaultClientId,
                ClientSecret       = ApplicationSettings.KeyVaultClientSecret,
                KeyVaultIdentifier = ApplicationSettings.KeyVaultIdentifier
            };

            using (KeyVaultHelper keyVaultHelper = new KeyVaultHelper(keyVaultConnectionInfo))
            {
                secret = keyVaultHelper.GetVaultKeyAsync(ApplicationSettings.KeyVaultEncryptionKey).Result;
            }

            pdfTools  = new PdfTools();
            converter = new SynchronizedConverter(pdfTools);
        }
        public async Task QueueMessageAsync <T>(T model, string queue, KeyVaultConnectionInfo keyVaultConnection)
        {
            ConnectionFactory factory = new ConnectionFactory();

            factory.UserName = ApplicationSettings.RabbitMQUsername;
            factory.Password = ApplicationSettings.RabbitMQPassword;
            factory.HostName = ApplicationSettings.RabbitMQHostname;
            factory.Port     = ApplicationSettings.RabbitMQPort;

            var json      = Newtonsoft.Json.JsonConvert.SerializeObject(model);
            var encrypted = string.Empty;

            using (KeyVaultHelper keyVaultHelper = new KeyVaultHelper(keyVaultConnection))
            {
                string secret = await keyVaultHelper.GetVaultKeyAsync(ApplicationSettings.KeyVaultEncryptionKey);

                encrypted = NETCore.Encrypt.EncryptProvider.AESEncrypt(json, secret);
            }

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: queue,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    var properties = channel.CreateBasicProperties();
                    properties.Persistent = true;

                    string message = encrypted;
                    var    body    = Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(exchange: "",
                                         routingKey: queue,
                                         basicProperties: properties,
                                         body: body);

                    Console.WriteLine("Sent: {0}", message);
                }
        }
Beispiel #5
0
        private static void Init()
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile($"appsettings.json", true, true)
                          .AddEnvironmentVariables();

            IConfigurationRoot Configuration = builder.Build();

            // Retrieve configuration from sections
            Settings.ConnectionString            = Configuration.GetSection("ConnectionString")?.Value;
            Settings.DatabaseId                  = Configuration.GetSection("DatabaseId")?.Value;
            Settings.ContractCollection          = Configuration.GetSection("ContractCollection")?.Value;
            Settings.RabbitMQUsername            = Configuration.GetSection("RabbitMQUsername")?.Value;
            Settings.RabbitMQPassword            = Configuration.GetSection("RabbitMQPassword")?.Value;
            Settings.RabbitMQHostname            = Configuration.GetSection("RabbitMQHostname")?.Value;
            Settings.RabbitMQPort                = Convert.ToInt16(Configuration.GetSection("RabbitMQPort")?.Value);
            Settings.ContractDeploymentQueueName = Configuration.GetSection("ContractDeploymentQueueName")?.Value;
            Settings.KeyVaultCertificateName     = Configuration.GetSection("KeyVaultCertificateName")?.Value;
            Settings.KeyVaultClientId            = Configuration.GetSection("KeyVaultClientId")?.Value;
            Settings.KeyVaultClientSecret        = Configuration.GetSection("KeyVaultClientSecret")?.Value;
            Settings.KeyVaultIdentifier          = Configuration.GetSection("KeyVaultIdentifier")?.Value;
            Settings.KeyVaultEncryptionKey       = Configuration.GetSection("KeyVaultEncryptionKey")?.Value;
            Settings.BlockchainRPCUrl            = Configuration.GetSection("BlockchainRPCUrl")?.Value;
            Settings.BlockchainMasterAddress     = Configuration.GetSection("BlockchainMasterAddress")?.Value;
            Settings.BlockchainMasterPrivateKey  = Configuration.GetSection("BlockchainMasterPrivateKey")?.Value;
            Settings.BlockchainContractABI       = Configuration.GetSection("BlockchainContractABI")?.Value;
            Settings.BlockchainContractByteCode  = Configuration.GetSection("BlockchainContractByteCode")?.Value;

            mongoDBConnectionInfo = new MongoDBConnectionInfo()
            {
                ConnectionString   = Settings.ConnectionString,
                DatabaseId         = Settings.DatabaseId,
                ContractCollection = Settings.ContractCollection
            };

            keyVaultConnectionInfo = new KeyVaultConnectionInfo()
            {
                CertificateName    = Settings.KeyVaultCertificateName,
                ClientId           = Settings.KeyVaultClientId,
                ClientSecret       = Settings.KeyVaultClientSecret,
                KeyVaultIdentifier = Settings.KeyVaultIdentifier
            };

            blockchainInfo = new BlockchainInfo()
            {
                RPCUrl           = Settings.BlockchainRPCUrl,
                MasterAddress    = Settings.BlockchainMasterAddress,
                MasterPrivateKey = Settings.BlockchainMasterPrivateKey,
                ContractABI      = Settings.BlockchainContractABI,
                ContractByteCode = Settings.BlockchainContractByteCode
            };

            using (KeyVaultHelper keyVaultHelper = new KeyVaultHelper(keyVaultConnectionInfo))
            {
                secret = keyVaultHelper.GetVaultKeyAsync(Settings.KeyVaultEncryptionKey).Result;
            }

            account = new Account(blockchainInfo.MasterPrivateKey);
            web3    = new Web3(account, new RpcClient(new Uri(blockchainInfo.RPCUrl), null, null, new HttpClientHandler()
            {
                MaxConnectionsPerServer = 10, UseProxy = false
            }));
        }
        public async Task <IActionResult> Post([FromBody] UserRegistrationRequest model)
        {
            // non-forced-to-disposal
            UserRegistrationResult result = new UserRegistrationResult
            {
                IsSucceded = true,
                ResultId   = (int)UserRegistrationResultEnum.Success
            };

            // forced-to-disposal
            MongoDBConnectionInfo  mongoDBConnectionInfo  = null;
            KeyVaultConnectionInfo keyVaultConnectionInfo = null;
            User user = null;

            try
            {
                if (string.IsNullOrEmpty(model.Fullname))
                {
                    throw new BusinessException((int)UserRegistrationResultEnum.FailedEmptyFullname);
                }

                if (string.IsNullOrEmpty(model.Email))
                {
                    throw new BusinessException((int)UserRegistrationResultEnum.FailedEmptyEmail);
                }

                if (string.IsNullOrEmpty(model.Password))
                {
                    throw new BusinessException((int)UserRegistrationResultEnum.FailedEmptyPassword);
                }

                using (ValidationHelper validationHelper = new ValidationHelper())
                {
                    bool validationEmail = validationHelper.IsValidEmail(model.Email);

                    if (!validationEmail)
                    {
                        throw new BusinessException((int)UserRegistrationResultEnum.FailedNotValidEmail);
                    }
                }

                mongoDBConnectionInfo = new MongoDBConnectionInfo()
                {
                    ConnectionString = Settings.ConnectionString,
                    DatabaseId       = Settings.DatabaseId,
                    UserCollection   = Settings.UserCollection
                };

                using (UserRegistrationDataHelper userRegistrationDataHelper = new UserRegistrationDataHelper(mongoDBConnectionInfo))
                {
                    user = userRegistrationDataHelper.GetUser(model.Email);
                }

                if (user != null)
                {
                    throw new BusinessException((int)UserRegistrationResultEnum.FailedEmailAlreadyExists);
                }

                string password = string.Empty;
                using (HashHelper hashHelper = new HashHelper())
                {
                    password = hashHelper.GetSha256Hash(model.Password);
                }

                keyVaultConnectionInfo = new KeyVaultConnectionInfo()
                {
                    CertificateName    = Settings.KeyVaultCertificateName,
                    ClientId           = Settings.KeyVaultClientId,
                    ClientSecret       = Settings.KeyVaultClientSecret,
                    KeyVaultIdentifier = Settings.KeyVaultIdentifier
                };

                using (MessageQueueHelper messageQueueHelper = new MessageQueueHelper())
                {
                    UserRegistrationMessage userRegistrationMessage = new UserRegistrationMessage()
                    {
                        fullname = model.Fullname,
                        email    = model.Email,
                        password = password
                    };

                    await messageQueueHelper.QueueMessageAsync(userRegistrationMessage, Settings.UserRegistrationQueueName, keyVaultConnectionInfo);
                }
            }
            catch (Exception ex)
            {
                result.IsSucceded = false;

                if (ex is BusinessException)
                {
                    result.ResultId = ((BusinessException)ex).ResultId;
                }
                else
                {
                    result.ResultId = (int)UserRegistrationResultEnum.Failed;

                    this.logger.LogError($">> Exception: {ex.Message}, StackTrace: {ex.StackTrace}");

                    if (ex.InnerException != null)
                    {
                        this.logger.LogError($">> Inner Exception Message: {ex.InnerException.Message}, Inner Exception StackTrace: {ex.InnerException.StackTrace}");
                    }
                }
            }
            finally
            {
                mongoDBConnectionInfo  = null;
                keyVaultConnectionInfo = null;
                user = null;

                GC.Collect();
            }

            string message = EnumDescription.GetEnumDescription((UserRegistrationResultEnum)result.ResultId);

            this.logger.LogInformation($">> Message information: {message}");

            return((result.IsSucceded) ? (ActionResult) new OkObjectResult(new { message = message }) : (ActionResult) new BadRequestObjectResult(new { message = message }));
        }
 public KeyVaultHelper(KeyVaultConnectionInfo keyVaultConnection)
 {
     this.KEY_VAULT_CONNECTION = keyVaultConnection;
 }
        public async Task <IActionResult> Post([FromBody] ContractDeploymentRequest model)
        {
            // non-forced-to-disposal
            ContractDeploymentResponse result = new ContractDeploymentResponse
            {
                IsSucceded = true,
                ResultId   = (int)ContractDeploymentResponseEnum.Success
            };

            // forced-to-disposal
            KeyVaultConnectionInfo keyVaultConnectionInfo = null;

            try
            {
                if (string.IsNullOrEmpty(model.Name))
                {
                    throw new BusinessException((int)ContractDeploymentResponseEnum.FailedEmptyName);
                }

                if (string.IsNullOrEmpty(model.Description))
                {
                    throw new BusinessException((int)ContractDeploymentResponseEnum.FailedEmptyDescription);
                }

                keyVaultConnectionInfo = new KeyVaultConnectionInfo()
                {
                    CertificateName    = ApplicationSettings.KeyVaultCertificateName,
                    ClientId           = ApplicationSettings.KeyVaultClientId,
                    ClientSecret       = ApplicationSettings.KeyVaultClientSecret,
                    KeyVaultIdentifier = ApplicationSettings.KeyVaultIdentifier
                };

                using (MessageQueueHelper messageQueueHelper = new MessageQueueHelper())
                {
                    ContractDeploymentMessage contractDeploymentMessage = new ContractDeploymentMessage()
                    {
                        name        = model.Name,
                        description = model.Description
                    };

                    await messageQueueHelper.QueueMessageAsync(contractDeploymentMessage, ApplicationSettings.ContractDeploymentQueueName, keyVaultConnectionInfo);
                }
            }
            catch (Exception ex)
            {
                result.IsSucceded = false;

                if (ex is BusinessException)
                {
                    result.ResultId = ((BusinessException)ex).ResultId;
                }
                else
                {
                    result.ResultId = (int)ContractDeploymentResponseEnum.Failed;

                    this.logger.LogError($">> Exception: {ex.Message}, StackTrace: {ex.StackTrace}");

                    if (ex.InnerException != null)
                    {
                        this.logger.LogError($">> Inner Exception Message: {ex.InnerException.Message}, Inner Exception StackTrace: {ex.InnerException.StackTrace}");
                    }
                }
            }
            finally
            {
                keyVaultConnectionInfo = null;

                GC.Collect();
            }

            string message = EnumDescription.GetEnumDescription((ContractDeploymentResponseEnum)result.ResultId);

            this.logger.LogInformation($">> Message information: {message}");

            return((result.IsSucceded) ? (ActionResult) new OkObjectResult(new { message = message }) : (ActionResult) new BadRequestObjectResult(new { message = message }));
        }
        public async Task <IActionResult> Post()
        {
            // non-forced-to-disposal
            UserRegistrationResponse response = new UserRegistrationResponse
            {
                IsSucceded = true,
                ResultId   = (int)UserRegistrationResponseEnum.Success
            };

            // forced-to-disposal
            UserRegistrationRequest userRegistrationRequest = null;
            MongoDBConnectionInfo   mongoDBConnectionInfo   = null;
            KeyVaultConnectionInfo  keyVaultConnectionInfo  = null;
            User user = null;

            try
            {
                userRegistrationRequest          = new UserRegistrationRequest();
                userRegistrationRequest.Email    = HttpContext.User.FindFirst("preferred_username").Value;
                userRegistrationRequest.Fullname = ((HttpContext.User.FindFirst("name") != null) ? HttpContext.User.FindFirst("name").Value : string.Empty);

                if (string.IsNullOrEmpty(userRegistrationRequest.Fullname))
                {
                    throw new BusinessException((int)UserRegistrationResponseEnum.FailedEmptyFullname);
                }

                mongoDBConnectionInfo = new MongoDBConnectionInfo()
                {
                    ConnectionString = ApplicationSettings.ConnectionString,
                    DatabaseId       = ApplicationSettings.DatabaseId,
                    UserCollection   = ApplicationSettings.UserCollection
                };

                using (UserRegistrationDataHelper userRegistrationDataHelper = new UserRegistrationDataHelper(mongoDBConnectionInfo))
                {
                    user = userRegistrationDataHelper.GetUser(userRegistrationRequest.Email);
                }

                if (user == null)
                {
                    keyVaultConnectionInfo = new KeyVaultConnectionInfo()
                    {
                        CertificateName    = ApplicationSettings.KeyVaultCertificateName,
                        ClientId           = ApplicationSettings.KeyVaultClientId,
                        ClientSecret       = ApplicationSettings.KeyVaultClientSecret,
                        KeyVaultIdentifier = ApplicationSettings.KeyVaultIdentifier
                    };

                    using (MessageQueueHelper messageQueueHelper = new MessageQueueHelper())
                    {
                        UserRegistrationMessage userRegistrationMessage = new UserRegistrationMessage()
                        {
                            fullname = userRegistrationRequest.Fullname,
                            email    = userRegistrationRequest.Email
                        };

                        await messageQueueHelper.QueueMessageAsync(userRegistrationMessage, ApplicationSettings.UserRegistrationQueueName, keyVaultConnectionInfo);
                    }
                }
                else
                {
                    response.ResultId = (int)UserRegistrationResponseEnum.SuccessAlreadyExists;
                }
            }
            catch (Exception ex)
            {
                response.IsSucceded = false;

                if (ex is BusinessException)
                {
                    response.ResultId = ((BusinessException)ex).ResultId;
                }
                else
                {
                    response.ResultId = (int)UserRegistrationResponseEnum.Failed;

                    this.logger.LogError($">> Exception: {ex.Message}, StackTrace: {ex.StackTrace}");

                    if (ex.InnerException != null)
                    {
                        this.logger.LogError($">> Inner Exception Message: {ex.InnerException.Message}, Inner Exception StackTrace: {ex.InnerException.StackTrace}");
                    }
                }
            }
            finally
            {
                userRegistrationRequest = null;
                mongoDBConnectionInfo   = null;
                keyVaultConnectionInfo  = null;
                user = null;

                GC.Collect();
            }

            string message = EnumDescription.GetEnumDescription((UserRegistrationResponseEnum)response.ResultId);

            this.logger.LogInformation($">> Message information: {message}");

            return((response.IsSucceded) ? (ActionResult) new OkObjectResult(new { message = message }) : (ActionResult) new BadRequestObjectResult(new { message = message }));
        }