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