public async Task <ActionResult <RepositoryResponse <AccessTokenViewModel> > > Register([FromBody] MixRegisterViewModel model) { RepositoryResponse <AccessTokenViewModel> result = new RepositoryResponse <AccessTokenViewModel>(); if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Avatar = model.Avatar ?? MixService.GetAppSetting <string>("DefaultAvatar"), JoinDate = DateTime.UtcNow }; var createResult = await _userManager.CreateAsync(user, password : model.Password).ConfigureAwait(false); if (createResult.Succeeded) { await _userManager.AddToRoleAsync(user, MixDefaultRoles.Guest); var saveData = await Mix.Cms.Lib.ViewModels.MixDatabaseDatas.Helper.SaveObjAsync( MixDatabaseNames.SYSTEM_USER_DATA, model.UserData, user.UserName, MixDatabaseParentType.User); result.IsSucceed = saveData.IsSucceed; result.Errors = saveData.Errors; result.Exception = saveData.Exception; _logger.LogInformation("User created a new account with password."); user = await _userManager.FindByNameAsync(model.Username).ConfigureAwait(false); var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); var token = await _idService.GenerateAccessTokenAsync(user, true, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { result.IsSucceed = true; result.Data = token; _logger.LogInformation("User logged in."); return(result); } else { return(Ok(result)); } } else { foreach (var error in createResult.Errors) { result.Errors.Add(error.Description); } return(BadRequest(result)); } } return(BadRequest(result)); }
public static IHostBuilder CreateHostBuilder(string[] args) { if (!File.Exists($"{MixConstants.CONST_FILE_APPSETTING}")) { File.Copy($"{MixConstants.CONST_DEFAULT_FILE_APPSETTING}", $"{MixConstants.CONST_FILE_APPSETTING}"); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); MixService.SetConfig <string>(MixAppSettingKeywords.ApiEncryptKey, aesKey); MixService.SetAuthConfig(MixAuthConfigurations.SecretKey, Guid.NewGuid().ToString("N")); MixService.SaveSettings(); } var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(MixConstants.CONST_FILE_APPSETTING, optional: true, reloadOnChange: true) .Build(); return(Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); })); }
public async Task <JObject> GetAuthData(ApplicationUser user, bool rememberMe) { var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); var token = await GenerateAccessTokenAsync(user, rememberMe, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { token.Info = new MixUserViewModel(user); await token.Info.LoadUserDataAsync(); var plainText = JObject.FromObject(token).ToString(Formatting.None).Replace("\r\n", string.Empty); var encryptedInfo = AesEncryptionHelper.EncryptString(plainText, aesKey); var resp = new JObject() { new JProperty("k", aesKey), new JProperty("rpk", rsaKeys[MixConstants.CONST_RSA_PRIVATE_KEY]), new JProperty("data", encryptedInfo) }; return(resp); } return(default);