예제 #1
0
        public async Task <SignUpResultDto> SignUp(UserEssential user)
        {
            try
            {
                var existing = _unitOfWork.Users.Count(t => t.Email == user.Email);
                if (existing != 0)
                {
                    throw new ArgumentException("User already exists");
                }
                var signUpResult = await _authZeroProvider.SignUp(user);

                if (signUpResult == null)
                {
                    throw new ArgumentException("Auth0 signup process failed");
                }
                var newUser = new User
                {
                    Email        = user.Email,
                    Guid         = Guid.NewGuid(),
                    Registered   = DateTimeOffset.UtcNow,
                    LastActivity = DateTimeOffset.UtcNow,
                    Auth0Id      = signUpResult.Id,
                    Role         = Role.User
                };
                _unitOfWork.Users.Insert(newUser);
                await _unitOfWork.SaveAsync();

                var loginResult = await _authZeroProvider.GetToken(user);

                if (loginResult == null)
                {
                    throw new ArgumentException("Auth0 login process failed");
                }
                _activityService.LogActivity(new Activity
                {
                    UserId     = newUser.Id,
                    Importance = ActivityImportance.Critical,
                    Type       = ActivityType.SignUp,
                    Data       = JsonConvert.SerializeObject(newUser)
                });
                return(new SignUpResultDto
                {
                    Id = newUser.Id,
                    ExpiresIn = loginResult.ExpiresIn,
                    Token = loginResult.AccessToken,
                    RefreshToken = loginResult.RefreshToken
                });
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }
예제 #2
0
 public async Task <IActionResult> Login([FromBody] UserEssential user)
 {
     try
     {
         return(Ok(await _accountService.Login(user)));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
예제 #3
0
        public async Task <SignUpResponse> SignUp(UserEssential user)
        {
            using (var client = CreateClient())
            {
                dynamic parameter = new ExpandoObject();
                parameter.client_id  = _settings.ClientId;
                parameter.email      = user.Email;
                parameter.password   = user.Password;
                parameter.connection = "Username-Password-Authentication";
                dynamic metadata = new ExpandoObject();
                metadata.role           = "user";
                parameter.user_metadata = metadata;
                var requestBody = JsonConvert.SerializeObject(parameter);
                var content     = new StringContent(requestBody, Encoding.UTF8, "application/json");
                var result      = await client.PostAsync("/dbconnections/signup", content);

                var resultContent = await result.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <SignUpResponse>(resultContent));
            }
        }
예제 #4
0
        public async Task <LoginResponse> GetToken(UserEssential user)
        {
            using (var client = CreateClient())
            {
                dynamic parameter = new ExpandoObject();
                parameter.grant_type    = "password";
                parameter.username      = user.Email;
                parameter.password      = user.Password;
                parameter.audience      = _settings.Audience;
                parameter.client_id     = _settings.ClientId;
                parameter.client_secret = _settings.ClientSecret;
                parameter.scope         = "offline_access";
                parameter.connection    = "Username-Password-Authentication";
                var requestBody = JsonConvert.SerializeObject(parameter);
                var content     = new StringContent(requestBody, Encoding.UTF8, "application/json");
                var result      = await client.PostAsync("/oauth/token", content);

                var resultContent = await result.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <LoginResponse>(resultContent));
            }
        }
예제 #5
0
        public async Task <LoginResultDto> Login(UserEssential user)
        {
            try
            {
                var existing = _unitOfWork.Users.Get(t => t.Email == user.Email).FirstOrDefault();
                if (existing == null)
                {
                    throw new ArgumentException("User doesn't exists");
                }
                var loginResult = await _authZeroProvider.GetToken(user);

                if (loginResult == null)
                {
                    throw new ArgumentException("Auth0 login process failed");
                }
                _activityService.LogActivity(new Activity
                {
                    UserId     = existing.Id,
                    Importance = ActivityImportance.Medium,
                    Type       = ActivityType.SignUp
                });
                return(new LoginResultDto
                {
                    ExpiresIn = loginResult.ExpiresIn,
                    Token = loginResult.AccessToken,
                    RefreshToken = loginResult.RefreshToken,
                    Avatar = existing.Avatar
                });
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }