Пример #1
0
        /// <summary>
        /// Текущий пользователь принимает приглашение
        /// </summary>
        /// <returns>Страница досок</returns>
        /// TODO: OrganizationPermission - без проверки принадлежности к организации, так как списки сотрудников кешируются
        public RedirectToRouteResult AcceptInvite(int id)
        {
            int organizationId = id;

            // Текущий пользователь принимает приглашение
            Utility.Invites.AcceptInvite(organizationId, Utility.Authentication.UserId);

            // Высылаем уведомление всем админам огранизации, чтобы они повключали пользователей на доски
            List <IUser> users = Utility.Organizations.GetEmployees(organizationId)
                                 .Where(x => x.Settings.GetUserRole().HasTheFlag(EmployeeRole.Administrator))
                                 .Select(x => x.User)
                                 .ToList();

            IOrganization organization = Utility.Organizations.Get(organizationId);

            foreach (IUser user in users)
            {
                string subj       = "Пользователь " + Utility.Users.CurrentUser.Nick + " включен в огранизацию '" + organization.Name + "'";
                string rawMessage =
                    subj + "<br/>"
                    + "Теперь вы можете добавить его как учасника на ваши доски.";
                MailsManager.SendMail(user, subj, rawMessage);
            }

            return(RedirectToAction("Index", "Boards"));
        }
Пример #2
0
        public ViewResult RestorePassword(string loginOrEmail)
        {
            #region Валидация

            if (loginOrEmail.IsNullOrEmpty())
            {
                ModelState.AddModelError("loginOrEmail", "Вы ничего не ввели.");
            }

            IUser user = Utility.Users.Get(loginOrEmail) ?? Utility.Users.GetByEmail(loginOrEmail);
            if (user == null)
            {
                ModelState.AddModelError("loginOrEmail", "Такой пользователь не зарегистрирован.");
            }

            #endregion

            if (ModelState.IsValid)
            {
                string url = Url.Action("NewPassword", "User", new { id = user.ConfimKey }, "http");

                // TODO: более развернутое сообщение, с учетом того, что форма доступна всем и можно ввести чужой имейл.
                string message = "<p>Вы воспользовались функцией восстановления пароля.</p>" +
                                 "<p>Пройдите по ссылке <a href='{0}'>{0}</a> и задайте новый пароль.</p>".Params(url);
                MailsManager.SendMail(user, "Установка нового пароля", message);

                ViewData.Model = "Письмо с инструкциями выслано на Ваш ящик.";
            }

            return(View());
        }
Пример #3
0
        private string InviteParticipant(int organizationId, string email)
        {
            if (!email.IsValidEmail())
            {
                ViewData.ModelState.AddModelError("EMail", "Формат email не верный: " + email);
            }

            if (ViewData.ModelState.IsValid)
            {
                // TODO: потестить перед презинтацией
                IUser user = Utility.Users.GetByEmail(email);
                if (user != null)
                {
                    IOrganization organization = Utility.Organizations.Get(organizationId);

                    // Если пользощватель существует, то добавляем его
                    if (Utility.Organizations.AddUser(organization, user))
                    {
                        // И пердлагаем ему подтвердить присутсвие на доске на странице досок
                        string message = @"{0} приглашает вас присоединиться к <a href='{1}'>{2}</a>.<br/>Вы можете подтвердить или отклонить придложение на <a href='{3}'>этой</a> ({3}) станице."
                                         .Params(Utility.Users.CurrentUser.Nick,                                           // 0
                                                 Url.Action("Index", "Organization", new { id = organizationId }, "http"), // 1
                                                 organization.Name,                                                        // 2
                                                 Url.Action("Index", "Boards", null, "http")                               // 3
                                                 );
                        MailsManager.SendMail(user, "Приглашение TimeZ.org", message);
                    }
                }
                else
                {
                    string siteUrl    = Url.Action("Index", "Home", null, "http");
                    string inviteCode = Utility.Invites.CreateNewInvite(organizationId, email, Utility.Authentication.UserId);
                    string regUrl     = Url.Action("Register", "User", new { id = inviteCode }, "http");
                    string message    = string.Format(@"
{2} приглашает Вас на сайт <a href='{0}'>TimeZ.org</a>.<br/>
Пройдите по ссылке <a href='{1}'>{1}</a>, что бы зарегестрироваться на сайте.",
                                                      siteUrl,
                                                      regUrl,
                                                      Utility.Users.CurrentUser.Nick
                                                      );
                    MailsManager.SendMail(email, "Приглашение TimeZ.org", message);
                }

                return(user == null
                    ? "Приглашение отослано на " + email + ", пользователь должен зарегестрироваться на сайте."
                    : "Приглашение отослано на " + email + ", пользователь должен подтвердить приглашение.");
            }
            return(null);
        }
Пример #4
0
        /// <summary>
        /// Ежедневная профилактика
        /// </summary>
        public string DailyJob()
        {
            // Удаляем неподтвержденных
            IEnumerable <IUser> users = Utility.Users.RemoveUnconfirmed(7);
            string siteUrl            = Url.Action("Index", "Home", null, "http");

            foreach (IUser user in users)
            {
                const string message =
                    "<p>К сожалению, Ваш аккаунт был удален в связи с не подтвержденной регистрацией. :(</p>" +
                    "<p>Но мы будем рады, если Вы повторно зарегистрируетесь на нашем <a href='{0}'>сайте</a>.</p>";
                MailsManager.SendMail(user, "Удаление аккаунта", message.Params(siteUrl));
            }

            return("OK");
        }
Пример #5
0
        public ActionResult Register(string id, string returnUrl, FormCollection collection)
        {
            string   password        = collection["password"];
            string   confirmPassword = collection["confirmPassword"];
            string   email           = collection["email"].Trim(); // во время обычной регистрации имейл это логин
            TimeSpan offset          = TimeSpan.FromMinutes(collection["timezone"].ToInt());

            try
            {
                #region Валидация
                if (password.IsNullOrEmpty())
                {
                    ModelState.AddModelError("password", "Введите пароль.");
                }
                if (email.IsNullOrEmpty())
                {
                    ModelState.AddModelError("email", "Введите email.");
                }

                if (!email.IsValidEmail())
                {
                    ModelState.AddModelError("email", "Введите правильный email.");
                }

                if (password != confirmPassword)
                {
                    ModelState.AddModelError("confirmPassword", "Повторите пароль правильно.");
                }

                // Пользователь регестрируется через имейл, по этому он является логином
                IUser oldUser = Utility.Users.Get(email);
                if (oldUser != null)
                {
                    ViewData.Add("email", email);
                    ModelState.AddModelError("email", "Пользователь уже зарегестрирован.");

                    // на всякий случай высылаем повторно конфирм, если пользователь решил ввести данные повторно
                    if (!oldUser.IsConfirmed && UsersUtility.CheckPassword(oldUser, password))
                    {
                        MailsManager.SendConfirmEmail(oldUser);
                    }
                }
                #endregion

                if (ModelState.IsValid)
                {
                    string nick = email.Split('@')[0];
                    try
                    {
                        Utility.Users.Add(
                            nick,
                            password,
                            email,
                            offset,
                            id,                             // Код инвайта
                            RegistrationType.Default);
                    }
                    catch (TariffException exception)
                    {
                        return(Message(exception.Message));
                    }

                    if (returnUrl.IsNullOrEmpty())
                    {
                        return(View("Registration"));
                    }

                    return(Redirect(returnUrl));
                }

                ViewData.Model = GetTimeZones();

                return(View());
            }
            catch
            {
                Utility.Users.Delete(email);
                throw;
            }
        }