コード例 #1
0
        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 }));
        }
コード例 #2
0
        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 }));
        }