Esempio n. 1
0
        public async Task <ServiceResult> VerifyEmailAsync(VerifyEmail model)
        {
            ServiceResult result = new ServiceResult();

            PassportUser user = await userManager.FindByIdAsync(model.UserId);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidSignin),
                    Message = Errors.InvalidSignin
                });
                result.Code = 401;

                return(result);
            }

            IdentityResult identityResult = await userManager.ConfirmEmailAsync(user, model.Token);

            if (!identityResult.Succeeded)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidSignin),
                    Message = Errors.InvalidSignin
                });
                result.Code = 401;
            }

            return(result);
        }
Esempio n. 2
0
        public async Task <ServiceResult> RegisterAsync(Register model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            ServiceResult result = new ServiceResult();

            if (!string.IsNullOrEmpty(model.ReturnUrl) && !await ValidateReturnUrlAsync(model.ReturnUrl))
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidReturnUrl),
                    Message = Errors.InvalidReturnUrl,
                });
                result.Code = 400;

                return(result);
            }

            PassportUser existingUser = await userManager.FindByEmailAsync(model.Email);

            if (existingUser != null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.EmailAddressInUse),
                    Message = Errors.EmailAddressInUse
                });
                result.Code = 409;

                return(result);
            }

            PassportUser user = new PassportUser(model.Email, model.Username);

            IdentityResult identityResult = await userManager.CreateAsync(user, model.Password);

            if (!identityResult.Succeeded)
            {
                foreach (IdentityError error in identityResult.Errors)
                {
                    result.Errors.Add(new ServiceResult.Error
                    {
                        Key     = error.Code,
                        Message = error.Description
                    });
                    result.Code = 400;
                }
            }

            if (identityResult.Succeeded)
            {
                var client = clientFactory.GetProfileClient();
                await client.CreateProfileAsync(new UserProfileCreate { Id = Guid.Parse(user.Id), Email = model.Email, DisplayName = user.UserName });
            }

            return(result);
        }
Esempio n. 3
0
        public async Task <ServiceResult> ResetPasswordAsync(PasswordReset model)
        {
            ServiceResult result = new ServiceResult();

            PassportUser user = await userManager.FindByIdAsync(model.UserId);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UserNotFound),
                    Message = Errors.UserNotFound
                });
                result.Code = 404;

                return(result);
            }

            IdentityResult identityResult = await userManager.ResetPasswordAsync(user, model.Token, model.Password);

            if (!identityResult.Succeeded)
            {
                foreach (IdentityError error in identityResult.Errors)
                {
                    result.Errors.Add(new ServiceResult.Error
                    {
                        Key     = error.Code,
                        Message = error.Description,
                    });
                }
                result.Code = 400;
            }

            return(result);
        }
Esempio n. 4
0
        public async Task <string> GeneratePasswordResetTokenAsync(string email)
        {
            PassportUser user = await userManager.FindByEmailAsync(email);

            if (user == null)
            {
                return(string.Empty);
            }

            return(await userManager.GeneratePasswordResetTokenAsync(user));
        }
Esempio n. 5
0
    public static void Main()
    {
        WindowsUser wu = new WindowsUser();

        wu.Username = "******";

        Authentication.Logon(wu); //dynamic binding

        PassportUser pu = new PassportUser();

        pu.Email = "*****@*****.**";

        Authentication.Logon(pu); //dynamic binding
    }
Esempio n. 6
0
        public async Task <ServiceResult> SigninAsync(string email, string password, string returnUrl, bool rememberMe)
        {
            ServiceResult result = new ServiceResult();

            if (!await ValidateReturnUrlAsync(returnUrl))
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidReturnUrl),
                    Message = Errors.InvalidReturnUrl
                });
                result.Code = 400;

                return(result);
            }

            PassportUser user = await userManager.FindByEmailAsync(email);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidSignin),
                    Message = Errors.InvalidSignin
                });
                result.Code = 401;

                return(result);
            }

            SignInResult identityResult = await signInManager.PasswordSignInAsync(user, password, rememberMe, lockoutOnFailure : false);

            if (!identityResult.Succeeded)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.InvalidSignin),
                    Message = Errors.InvalidSignin
                });
                result.Code = 401;

                return(result);
            }

            await events.RaiseAsync(new UserLoginSuccessEvent(user.Email, user.Id, user.UserName));

            return(result);
        }
Esempio n. 7
0
        public async Task <ServiceResult> UpdateUserAccount(Guid userId, DTOs.UpdateAccount account)
        {
            ServiceResult result = new ServiceResult();
            PassportUser  user   = await userManager.FindByIdAsync(userId.ToString());

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UserNotFound),
                    Message = Errors.UserNotFound,
                });
                result.Code = 404;

                return(result);
            }

            if (!user.Email.Equals(account.Email, StringComparison.InvariantCultureIgnoreCase))
            {
                user.EmailConfirmed = false;
            }

            user.Update(account.Email, account.UserName);
            IdentityResult updateResult = await userManager.UpdateAsync(user);

            if (!updateResult.Succeeded)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UpdateFailed),
                    Message = Errors.UpdateFailed,
                });

                foreach (IdentityError error in updateResult.Errors)
                {
                    result.Errors.Add(new ServiceResult.Error
                    {
                        Key     = error.Code,
                        Message = error.Description,
                    });
                }

                result.Code = 400;
            }

            return(result);
        }
Esempio n. 8
0
        public async Task <string> GenerateEmailVerificationTokenAsync(string emailAddress)
        {
            PassportUser user = await userManager.FindByEmailAsync(emailAddress);

            return(await userManager.GenerateEmailConfirmationTokenAsync(user));
        }
Esempio n. 9
0
        public async Task <ServiceResult> AddExternalLink(string userId, string scheme, ClaimsPrincipal externalPrincipal)
        {
            var result = new ServiceResult();

            AuthenticationProperties signInProps = new AuthenticationProperties();
            PassportUser             user        = await userManager.FindByIdAsync(userId);

            if (user == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.UserNotFound),
                    Message = Errors.UserNotFound,
                });
                result.Code = 404;

                return(result);
            }

            UserProfileCreateConnection dto = null;

            switch (scheme)
            {
            case "battle.net":
                dto = CreateBattlenetConnectionDto(userId, externalPrincipal);
                break;

            case "discord":
                dto = CreateDiscordConnectionDto(userId, externalPrincipal);
                break;

            case "twitch":
                dto = CreateTwitchConnectionDto(userId, externalPrincipal);
                break;
            }

            if (dto == null)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.ExternalIdNotFound),
                    Message = Errors.ExternalIdNotFound,
                });
                result.Code = 400;

                return(result);
            }

            try
            {
                var client = clientFactory.GetProfileConnectionClient();
                await client.CreateConnectionAsync(dto);
            }
            catch (Exception)
            {
                result.Errors.Add(new ServiceResult.Error
                {
                    Key     = nameof(Errors.ExternalConnectionFailed),
                    Message = Errors.ExternalConnectionFailed,
                });
                result.Code = 500;
            }

            return(result);
        }