コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: mixcore/mix.core
        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>();
            }));
        }
コード例 #3
0
        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);