Example #1
0
        public async Task <LoginResponse> Handle(LoginRequest request, CancellationToken cancellationToken)
        {
            var result = new LoginResponse();

            var member = await _context.Members
                         .Where(x => x.MemberUsername == request.MemberUsername)
                         .SingleOrDefaultAsync(cancellationToken);

            if (member != null)
            {
                result.UsernameExists = true;

                if (member.AuthenticationScheme == SchemeProvider.Fortifex)
                {
                    result.UsingFortifexAuthentication = true;

                    if (FortifexUtility.VerifyPasswordHash(request.Password, member.PasswordSalt, member.PasswordHash))
                    {
                        result.PasswordIsCorrect = true;

                        if (member.ActivationStatus == ActivationStatus.Active)
                        {
                            string securityKey = _config.GetSection("Fortifex:TokenSecurityKey").Value;

                            result.AccountIsActive = true;
                            result.IsSuccessful    = true;

                            result.Token = TokenHelper.GenerateToken(member, securityKey);
                        }
                        else
                        {
                            result.IsSuccessful = false;
                            result.ErrorMessage = ErrorMessage.InactiveAccount;
                        }
                    }
                    else
                    {
                        result.ErrorMessage = ErrorMessage.InvalidPassword;
                    }
                }

                var project = await _context.Projects
                              .Where(x => x.MemberUsername == request.MemberUsername)
                              .SingleOrDefaultAsync(cancellationToken);

                if (project != null)
                {
                    result.ProjectID = project.ProjectID;
                }
            }
            else
            {
                result.ErrorMessage = ErrorMessage.MemberUsernameNotFound;
            }

            return(result);
        }
        public async Task <LoginExternalResponse> Handle(LoginExternalRequest request, CancellationToken cancellationToken)
        {
            var result = new LoginExternalResponse();

            var member = await _context.Members
                         .Where(x => x.MemberUsername == request.MemberUsername)
                         .SingleOrDefaultAsync(cancellationToken);

            if (member == null)
            {
                var defaultRegion = await _context.Regions
                                    .Where(x => x.Name == RegionName.Default)
                                    .SingleOrDefaultAsync(cancellationToken);

                if (defaultRegion == null)
                {
                    throw new NotFoundException(nameof(Region), RegionName.Default);
                }

                var defaultPreferredFiatCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.USD && x.CurrencyType == CurrencyType.Fiat)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredFiatCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.USD);
                }

                var defaultPreferredCoinCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.BTC && x.CurrencyType == CurrencyType.Coin)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredCoinCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.BTC);
                }

                FortifexUtility.SplitFullName(request.FullName, out string firstName, out string lastName);

                member = new Member
                {
                    MemberUsername          = request.MemberUsername,
                    FirstName               = firstName,
                    LastName                = lastName,
                    AuthenticationScheme    = request.SchemeProvider,
                    ExternalID              = request.ExternalID,
                    RegionID                = defaultRegion.RegionID,
                    GenderID                = GenderID.Default,
                    BirthDate               = MemberBirthDate.Default,
                    PreferredFiatCurrencyID = defaultPreferredFiatCurrency.CurrencyID,
                    PreferredCoinCurrencyID = defaultPreferredCoinCurrency.CurrencyID,
                    PreferredTimeFrameID    = TimeFrameID.Default,
                    PictureURL              = request.PictureURL,
                    ActivationCode          = Guid.NewGuid(),
                    ActivationStatus        = ActivationStatus.Active
                };

                await _context.Members.AddAsync(member);

                await _context.SaveChangesAsync(cancellationToken);

                result.IsNewMember = true;
            }

            string securityKey = _config.GetSection("Fortifex:TokenSecurityKey").Value;

            result.Token = TokenHelper.GenerateToken(member, securityKey);

            return(result);
        }
Example #3
0
        public async Task <CreateMemberResponse> Handle(CreateMemberRequest request, CancellationToken cancellationToken)
        {
            var result = new CreateMemberResponse();

            if (await _context.Members.AnyAsync(x => x.MemberUsername == request.MemberUsername, cancellationToken))
            {
                result.IsSuccessful = false;
                result.ErrorMessage = "Username already taken";
            }
            else
            {
                var defaultRegion = await _context.Regions
                                    .Where(x => x.Name == RegionName.Default)
                                    .SingleOrDefaultAsync(cancellationToken);

                if (defaultRegion == null)
                {
                    throw new NotFoundException(nameof(Region), RegionName.Default);
                }

                var defaultPreferredFiatCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.USD && x.CurrencyType == CurrencyType.Fiat)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredFiatCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.USD);
                }

                var defaultPreferredCoinCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.BTC && x.CurrencyType == CurrencyType.Coin)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredCoinCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.BTC);
                }

                string passwordSalt = FortifexUtility.CreatePasswordSalt();
                string passwordHash = FortifexUtility.CreatePasswordHash(request.Password, passwordSalt);

                var member = new Member
                {
                    MemberUsername          = request.MemberUsername,
                    PasswordHash            = passwordHash,
                    PasswordSalt            = passwordSalt,
                    AuthenticationScheme    = SchemeProvider.Fortifex,
                    RegionID                = defaultRegion.RegionID,
                    GenderID                = GenderID.Default,
                    BirthDate               = MemberBirthDate.Default,
                    PreferredFiatCurrencyID = defaultPreferredFiatCurrency.CurrencyID,
                    PreferredCoinCurrencyID = defaultPreferredCoinCurrency.CurrencyID,
                    PreferredTimeFrameID    = TimeFrameID.Default,
                    ActivationCode          = Guid.NewGuid(),
                    ActivationStatus        = ActivationStatus.Inactive
                };

                await _context.Members.AddAsync(member);

                await _context.SaveChangesAsync(cancellationToken);

                result.ActivationCode = member.ActivationCode;
                result.MemberUsername = member.MemberUsername;

                StringBuilder emailBodyStringBuilder = new StringBuilder();
                emailBodyStringBuilder.AppendLine("Please click below link to activate your Fortifex account.");
                emailBodyStringBuilder.AppendLine("<div>");
                emailBodyStringBuilder.AppendLine($"<a href=\"{_currentWeb.BaseURL}/account/activate?activationCode={member.ActivationCode}\">Activate my Fortifex account</a>");
                emailBodyStringBuilder.AppendLine("</div>");

                EmailItem mailItem = new EmailItem
                {
                    ToAdress = "*****@*****.**",
                    Subject  = "Welcome to Fortifex",
                    Body     = emailBodyStringBuilder.ToString()
                };

                await _emailService.SendEmailAsync(mailItem);

                result.IsSuccessful = true;
            }

            return(result);
        }
Example #4
0
        public async Task <CreateExternalMemberResponse> Handle(CreateExternalMemberRequest request, CancellationToken cancellationToken)
        {
            var result = new CreateExternalMemberResponse();

            if (await _context.Members.AnyAsync(x => x.MemberUsername == request.MemberUsername, cancellationToken))
            {
                result.IsSuccessful = false;
                result.ErrorMessage = "Username already taken";
            }
            else if (await _context.Members.AnyAsync(x => x.ExternalID == request.ExternalID && x.AuthenticationScheme == request.ClaimType, cancellationToken))
            {
                result.IsSuccessful = false;
                result.ErrorMessage = $"ExternalID {request.ExternalID} in  {request.ClaimType} already exists";
            }
            else
            {
                var defaultRegion = await _context.Regions
                                    .Where(x => x.Name == RegionName.Default)
                                    .SingleOrDefaultAsync(cancellationToken);

                if (defaultRegion == null)
                {
                    throw new NotFoundException(nameof(Region), RegionName.Default);
                }

                var defaultPreferredFiatCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.USD && x.CurrencyType == CurrencyType.Fiat)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredFiatCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.USD);
                }

                var defaultPreferredCoinCurrency = await _context.Currencies
                                                   .Where(x => x.Symbol == CurrencySymbol.BTC && x.CurrencyType == CurrencyType.Coin)
                                                   .SingleOrDefaultAsync(cancellationToken);

                if (defaultPreferredCoinCurrency == null)
                {
                    throw new NotFoundException(nameof(Currency), CurrencySymbol.BTC);
                }

                FortifexUtility.SplitFullName(request.FullName, out string firstName, out string lastName);

                var member = new Member
                {
                    MemberUsername          = request.MemberUsername,
                    FirstName               = firstName,
                    LastName                = lastName,
                    AuthenticationScheme    = request.ClaimType,
                    ExternalID              = request.ExternalID,
                    RegionID                = defaultRegion.RegionID,
                    GenderID                = GenderID.Default,
                    BirthDate               = MemberBirthDate.Default,
                    PreferredFiatCurrencyID = defaultPreferredFiatCurrency.CurrencyID,
                    PreferredCoinCurrencyID = defaultPreferredCoinCurrency.CurrencyID,
                    PreferredTimeFrameID    = TimeFrameID.Default,
                    PictureURL              = request.PictureURL,
                    ActivationCode          = Guid.NewGuid(),
                    ActivationStatus        = ActivationStatus.Active
                };

                await _context.Members.AddAsync(member);

                await _context.SaveChangesAsync(cancellationToken);

                result.IsSuccessful = true;
            }

            return(result);
        }