Пример #1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl           = returnUrl ?? this.Url.Content("~/");
            this.ExternalLogins = (await this.signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (this.ModelState.IsValid)
            {
                var user = new ApplicationUser
                {
                    UserName = this.Input.Username,
                    Email    = this.Input.Email
                };

                var result = await this.userManager.CreateAsync(user, this.Input.Password);

                if (result.Succeeded)
                {
                    this.logger.LogInformation("User created a new account with password.");

                    if (this.Input.IsArenaAdministrator == true)
                    {
                        await this.userManager.AddToRoleAsync(user, GlobalConstants.ArenaAdminRoleName);

                        this.logger.LogInformation("User registered as Arena Administrator.");
                    }

                    var code = await this.userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = this.Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code },
                        protocol: this.Request.Scheme);

                    await this.emailSender.SendEmailAsync(
                        this.Input.Email,
                        EmailSubjectConstants.RegisterConfirmationSubject,
                        EmailHtmlMessages.GetEmailConfirmationHtml(this.Input.Username, HtmlEncoder.Default.Encode(callbackUrl)));

                    if (this.userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(this.RedirectToPage("RegisterConfirmation", new { email = this.Input.Email }));
                    }
                    else
                    {
                        await this.signInManager.SignInAsync(user, isPersistent : false);

                        return(this.LocalRedirect(returnUrl));
                    }
                }

                foreach (var error in result.Errors)
                {
                    this.ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(this.Page());
        }
Пример #2
0
        public async Task UpdateAsync(UserUpdateInputModel inputModel, string userId, string userEmail, string username)
        {
            var user = await this.GetUserByIdAsIQueryable(userId).FirstAsync();

            user.FirstName            = inputModel.FirstName;
            user.LastName             = inputModel.LastName;
            user.Gender               = inputModel.Gender;
            user.SportId              = inputModel.SportId;
            user.Status               = inputModel.Status;
            user.CountryId            = inputModel.CountryId;
            user.CityId               = inputModel.CityId;
            user.PhoneNumber          = inputModel.PhoneNumber;
            user.FaceBookAccount      = inputModel.FaceBookAccount;
            user.Age                  = inputModel.Age;
            user.Occupation           = inputModel.Occupation;
            user.IsUserProfileUpdated = true;

            if (inputModel.AvatarImage != null)
            {
                var avatar = await this.imagesService.CreateAsync(inputModel.AvatarImage);

                user.AvatarId = avatar.Id;
            }

            this.usersRepository.Update(user);
            await this.usersRepository.SaveChangesAsync();

            await this.emailSender.SendEmailAsync(
                userEmail,
                EmailSubjectConstants.ProfileUpdated,
                EmailHtmlMessages.GetUpdateProfileHtml(username));
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(Input.Email);

                if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    return(RedirectToPage("./ForgotPasswordConfirmation"));
                }

                // For more information on how to enable account confirmation and password reset please
                // visit https://go.microsoft.com/fwlink/?LinkID=532713
                var code = await _userManager.GeneratePasswordResetTokenAsync(user);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                var callbackUrl = Url.Page(
                    "/Account/ResetPassword",
                    pageHandler: null,
                    values: new { area = "Identity", code },
                    protocol: Request.Scheme);

                await _emailSender.SendEmailAsync(
                    Input.Email,
                    EmailSubjectConstants.ResetPasswordSubject,
                    EmailHtmlMessages.GetResetPasswordHtml(user.UserName, HtmlEncoder.Default.Encode(callbackUrl)));

                return(RedirectToPage("./ForgotPasswordConfirmation"));
            }

            return(Page());
        }
Пример #4
0
        public async Task ChangeStatus(int eventId, ArenaRequestStatus status)
        {
            var evt = await this.GetAsIQuerableById(eventId).FirstOrDefaultAsync();

            if (evt != null)
            {
                evt.RequestStatus = status;

                this.eventsRepository.Update(evt);
                await this.eventsRepository.SaveChangesAsync();

                var sportName = await this.sportsService.GetNameByIdAsync(evt.SportId);

                var users = await this.eventsUsersRepository
                            .All()
                            .Where(eu => eu.EventId == eventId)
                            .Select(eu => new EmailUserInfo {
                    Email = eu.User.Email, Username = eu.User.UserName,
                })
                            .ToListAsync();

                foreach (var player in users)
                {
                    await this.emailSender.SendEmailAsync(
                        player.Email,
                        EmailSubjectConstants.StatusChanged,
                        EmailHtmlMessages.GetStatusChangedHtml(
                            player.Username, sportName, evt.Name, evt.Date, status.GetDisplayName()));
                }
            }
        }
Пример #5
0
        public async Task ReplyAsync(int id, string replyContent, string recipientEmail)
        {
            await this.emailSender.SendEmailAsync(
                recipientEmail,
                EmailSubjectConstants.ContactFormReply,
                EmailHtmlMessages.GetContactFormReplyHtml(replyContent));

            await this.SetReplyedAsync(id, replyContent);
        }
Пример #6
0
        private async Task ChangeEventStatusAsync(int eventId)
        {
            var evt = await this.GetAsIQuerableById(eventId).FirstOrDefaultAsync();

            if (evt != null)
            {
                var currentStatus = evt.Status;

                if (evt.MaxPlayers == evt.Users.Count)
                {
                    evt.Status = EventStatus.Full;
                }
                else if (evt.MinPlayers > evt.Users.Count)
                {
                    evt.Status = EventStatus.AcceptingPlayers;
                }
                else if (evt.MaxPlayers > evt.Users.Count)
                {
                    evt.Status = EventStatus.MinimumPlayersReached;
                }

                if (currentStatus != evt.Status)
                {
                    this.eventsRepository.Update(evt);
                    await this.eventsRepository.SaveChangesAsync();

                    var sportName = await this.sportsService.GetNameByIdAsync(evt.SportId);

                    var users = await this.eventsUsersRepository
                                .All()
                                .Where(eu => eu.EventId == eventId)
                                .Select(eu => new EmailUserInfo {
                        Email = eu.User.Email, Username = eu.User.UserName,
                    })
                                .ToListAsync();

                    foreach (var user in users)
                    {
                        await this.emailSender.SendEmailAsync(
                            user.Email,
                            EmailSubjectConstants.ChangedStatus,
                            EmailHtmlMessages.GetChangedStatusHtml(
                                user.Username, sportName, evt.Name, evt.Date, currentStatus.GetDisplayName()));
                    }
                }
            }
        }
Пример #7
0
        public async Task CancelEventAsync(int eventId, string userEmail, string username)
        {
            var evt = await this.GetAsIQuerableById(eventId).FirstOrDefaultAsync();

            if (evt != null)
            {
                evt.Status = EventStatus.Canceled;
                this.eventsRepository.Update(evt);
                await this.eventsRepository.SaveChangesAsync();

                var eventUsers = await this.eventsUsersRepository
                                 .All()
                                 .Where(eu => eu.EventId == eventId)
                                 .ToListAsync();

                for (int i = 0; i < eventUsers.Count; i++)
                {
                    this.eventsUsersRepository.Delete(eventUsers[i]);
                }

                await this.eventsUsersRepository.SaveChangesAsync();

                var sportName = await this.sportsService.GetNameByIdAsync(evt.SportId);

                await this.emailSender.SendEmailAsync(
                    userEmail,
                    EmailSubjectConstants.CancelEvent,
                    EmailHtmlMessages.GetCancelEventHtml(username, sportName, evt.Name, evt.Date));

                var users = await this.eventsUsersRepository
                            .All()
                            .Where(eu => eu.EventId == eventId)
                            .Select(eu => new EmailUserInfo {
                    Email = eu.User.Email, Username = eu.User.UserName
                })
                            .ToListAsync();

                foreach (var user in users)
                {
                    await this.emailSender.SendEmailAsync(
                        user.Email,
                        EmailSubjectConstants.EventCanceled,
                        EmailHtmlMessages.GetEventCanceledHtml(user.Username, evt.Admin.UserName, sportName, evt.Name, evt.Date));
                }
            }
        }
Пример #8
0
        public async Task RemoveUserAsync(int eventId, string userId, string username, string email)
        {
            var eventUser = await this.eventsUsersRepository
                            .All()
                            .Where(eu => eu.EventId == eventId && eu.UserId == userId)
                            .FirstOrDefaultAsync();

            if (eventUser == null)
            {
                throw new ArgumentException(string.Format(EventIvanlidIdwithUserIdErrorMessage, userId, eventId));
            }

            this.eventsUsersRepository.Delete(eventUser);
            await this.eventsUsersRepository.SaveChangesAsync();

            await this.messagesService.CreateAsync(EventLeavingMessage, userId, eventId);

            await this.ChangeEventStatusAsync(eventId);

            var eventObject = await this.GetEventDetailsForEmailByIdAsync(eventId);

            await this.emailSender.SendEmailAsync(
                email,
                EmailSubjectConstants.LeftEvent,
                EmailHtmlMessages.GetLeaveEventHtml(username, eventObject));

            var users = await this.eventsUsersRepository
                        .All()
                        .Where(eu => eu.EventId == eventId)
                        .Select(eu => new EmailUserInfo {
                Email = eu.User.Email, Username = eu.User.UserName,
            })
                        .ToListAsync();

            foreach (var player in users)
            {
                await this.emailSender.SendEmailAsync(
                    player.Email,
                    EmailSubjectConstants.UserLeft,
                    EmailHtmlMessages.GetUserLeftHtml(
                        player.Username, eventObject.Sport, eventObject.Name, eventObject.Date, username));
            }
        }
Пример #9
0
        public async Task <int> FileContactFormAsync(ContactIndexViewModel inputModel)
        {
            var contactFormEntry = new ContactForm
            {
                Email   = inputModel.Email,
                Content = inputModel.Content,
                Name    = inputModel.Name,
                Title   = inputModel.Title,
            };

            await this.contactFormsRepository.AddAsync(contactFormEntry);

            await this.contactFormsRepository.SaveChangesAsync();

            await this.emailSender.SendEmailAsync(
                inputModel.Email,
                inputModel.Name,
                EmailHtmlMessages.GetContactFormContentHtml(inputModel.Name, inputModel.Title, inputModel.Content));

            return(contactFormEntry.Id);
        }
Пример #10
0
        public async Task <int> CreateAsync(
            EventCreateInputModel inputModel, int cityId, int countryId, string userId, string userEmail, string username)
        {
            var @event = inputModel.To <Event>();

            @event.CityId    = cityId;
            @event.CountryId = countryId;
            @event.AdminId   = userId;
            await this.eventsRepository.AddAsync(@event);

            await this.eventsRepository.SaveChangesAsync();

            await this.eventsUsersRepository.AddAsync(new EventUser
            {
                EventId = @event.Id,
                UserId  = userId,
            });

            await this.eventsUsersRepository.SaveChangesAsync();

            var eventId = @event.Id;

            await this.messagesService.CreateAsync(EventCreationMessage, userId, eventId);

            var sportName = await this.sportsService.GetNameByIdAsync(inputModel.SportId);

            await this.emailSender.SendEmailAsync(
                userEmail,
                EmailSubjectConstants.EventCreated,
                EmailHtmlMessages.GetEventCreationHtml(
                    username,
                    inputModel.Name,
                    sportName,
                    inputModel.Date.ToString(DefaultDateFormat),
                    inputModel.StartingHour.ToString(DefaultTimeFormat)));

            return(eventId);
        }
Пример #11
0
        public async Task AddUserAsync(int eventId, string userId, string userEmail, string username)
        {
            var eventUser = new EventUser
            {
                EventId = eventId,
                UserId  = userId,
            };

            await this.eventsUsersRepository.AddAsync(eventUser);

            await this.eventsUsersRepository.SaveChangesAsync();

            await this.messagesService.CreateAsync(EventJoiningMessage, userId, eventId);

            await this.ChangeEventStatusAsync(eventId);

            var eventObject = await this.GetEventDetailsForEmailByIdAsync(eventId);

            await this.emailSender.SendEmailAsync(
                userEmail,
                EmailSubjectConstants.JoinedEvent,
                EmailHtmlMessages.GetJoinEventHtml(username, eventObject));
        }
Пример #12
0
        public async Task CreateAsync(ArenaCreateInputModel inputModel, string userId, string userEmail, string username)
        {
            var arena = inputModel.To <Arena>();

            arena.ArenaAdminId = userId;

            if (inputModel.MainImageFile != null)
            {
                var avatar = await this.imagesService.CreateAsync(inputModel.MainImageFile);

                arena.MainImageId = avatar.Id;
            }

            if (inputModel.ImageFiles != null)
            {
                foreach (var img in inputModel.ImageFiles)
                {
                    var image = await this.imagesService.CreateAsync(img);

                    arena.Images.Add(image);
                }
            }

            await this.arenasRepository.AddAsync(arena);

            await this.arenasRepository.SaveChangesAsync();

            var sportName = await this.sportsService.GetNameByIdAsync(inputModel.SportId);

            await this.emailSender.SendEmailAsync(
                userEmail,
                EmailSubjectConstants.ArenaCreated,
                EmailHtmlMessages.GetArenaCreationHtml(
                    username,
                    inputModel.Name,
                    sportName));
        }
Пример #13
0
        public async Task <int> InviteUsersToEventAsync(int id, string userName)
        {
            var query = this.GetAsIQuerableById(id);

            if (query.Any())
            {
                var serviceModel = await query
                                   .Select(e => new InviteUsersMessagingModel
                {
                    ArenaName    = e.Arena.Name,
                    EventName    = e.Name,
                    Sport        = e.Sport.Name,
                    SportId      = e.Sport.Id,
                    Date         = e.Date,
                    StartingTime = e.StartingHour,
                    Username     = userName,
                    ArenaCityId  = e.Arena.CityId,
                })
                                   .FirstOrDefaultAsync();

                var eventLink  = $"LetsSport.com/Events/Details/{id}";
                var userEmails = await this.usersService.GetAllUsersDetailsForIvitationAsync(
                    serviceModel.SportId, serviceModel.ArenaCityId);

                foreach (var user in userEmails)
                {
                    await this.emailSender.SendEmailAsync(
                        user.Email,
                        EmailSubjectConstants.UserInvitation,
                        EmailHtmlMessages.GetUserInvitationHtml(serviceModel, user.Username, eventLink));
                }

                return(userEmails.Count());
            }

            return(0);
        }