public ActionResult EditPlace(Place place, HttpPostedFileBase Logo, HttpPostedFileBase Image, FormCollection collection)
        {
            if (collection["Save"].IsFilled())
            {
                bool needCreateModer = false;
                place.IsPost = true;
                if (/*Logo == null || Logo.ContentLength == 0 || Image == null || Image.ContentLength == 0 ||*/
                    place.Name.IsNullOrEmpty() || place.Adress.IsNullOrEmpty() || place.Description.IsNullOrEmpty() ||
                    !place.MinPay.HasValue || !place.MaxPay.HasValue ||
                    place.Type.IsNullOrEmpty() || (place.WishToBeAdmin && !place.AdminMail.IsMailAdress()))
                {
                    return(View(place));
                }

                if (place.ID > 0)
                {
                    var p = DB.Places.First(x => x.ID == place.ID);
                    needCreateModer = p.AdminMail != place.AdminMail && place.AdminMail.IsMailAdress() && place.WishToBeAdmin;
                    p.LoadPossibleProperties(place, new[] { "Logo", "Approved" });
                    place = p;
                    if (!needCreateModer)
                    {
                        place.AdminMail = "";
                    }
                }


                if (!(Logo == null || Logo.ContentLength == 0))
                {
                    string fileNameLogo = Guid.NewGuid() + Path.GetExtension(Logo.FileName);
                    string pathLogo     = "/Content/Places/" + fileNameLogo;
                    Logo.SaveAs(Server.MapPath(pathLogo));
                    place.Logo = pathLogo;
                }
                if (!(Image == null || Image.ContentLength == 0))
                {
                    string fileNameImage = Guid.NewGuid() + Path.GetExtension(Image.FileName);
                    string pathImage     = "/Content/Places/" + fileNameImage;
                    Image.SaveAs(Server.MapPath(pathImage));
                    DB.PlaceImages.InsertOnSubmit(new PlaceImage()
                    {
                        Path = pathImage, Place = place
                    });
                }
                var isNew = false;
                if (place.ID == 0)
                {
                    isNew           = true;
                    needCreateModer = place.AdminMail.IsMailAdress() && place.WishToBeAdmin;
                    DB.Places.InsertOnSubmit(place);
                }

                if (needCreateModer)
                {
                    var u = DB.Users.FirstOrDefault(x => x.Email.ToLower().Trim() == place.AdminMail.ToLower().Trim());
                    if (u == null)
                    {
                        var dict = new Dictionary <string, object>();

                        var pass = new Random(DateTime.Now.Millisecond).GeneratePassword();
                        dict.Add("UserName", place.AdminMail);
                        dict.Add("Email", place.AdminMail);
                        MembershipProvider.CreateUserAndAccount(place.AdminMail, pass, false, dict);
                        RoleProvider.AddUsersToRoles(new[] { place.AdminMail }, new[] { "Client", "Moderator" });
                        NotifyMail.SendNotify("PlaceAdminCreate", place.AdminMail,
                                              format => string.Format(format, HostName),
                                              format => string.Format(format, place.AdminMail, pass, HostName)
                                              );

                        u = DB.Users.First(x => x.Email.ToLower().Trim() == place.AdminMail.ToLower().Trim());

                        var exist = DB.PlaceAdmins.FirstOrDefault(x => x.PlaceID == place.ID && x.UserID == u.ID);
                        if (exist == null)
                        {
                            exist = new PlaceAdmin()
                            {
                                PlaceID = place.ID, UserID = u.ID
                            };
                            DB.PlaceAdmins.InsertOnSubmit(exist);
                        }
                    }
                    else
                    {
                        NotifyMail.SendNotify("PlaceAdminExist", place.AdminMail,
                                              format => string.Format(format, HostName),
                                              format => string.Format(format, "", "", HostName)
                                              );


                        if (u.webpages_UsersInRoles.All(x => x.webpages_Role.RoleName != "Moderator"))
                        {
                            RoleProvider.AddUsersToRoles(new[] { u.Name }, new[] { "Moderator" });
                        }

                        var exist = DB.PlaceAdmins.FirstOrDefault(x => x.PlaceID == place.ID && x.UserID == u.ID);
                        if (exist == null)
                        {
                            exist = new PlaceAdmin()
                            {
                                PlaceID = place.ID, UserID = u.ID
                            };
                            DB.PlaceAdmins.InsertOnSubmit(exist);
                        }
                    }
                }
                else if (place.PlaceAdmins.Any())
                {
                    DB.PlaceAdmins.DeleteAllOnSubmit(place.PlaceAdmins);
                }

                DB.SubmitChanges();
                return(isNew ? RedirectToAction("Places") : RedirectToAction("EditPlace", new { ID = place.ID, FromSave = 1 }));
            }
            else
            {
                if (place.ID == 0)
                {
                    return(RedirectToAction("Places"));
                }
                var p = DB.Places.First(x => x.ID == place.ID);
                if (!p.Approved)
                {
                    p.Approved = true;

                    if (p.AdminMail.IsMailAdress())
                    {
                        var user = DB.Users.FirstOrDefault(x => x.Email.ToLower().Trim() == p.AdminMail.ToLower().Trim());
                        if (user == null)
                        {
                            var dict = new Dictionary <string, object>();

                            var pass = new Random(DateTime.Now.Millisecond).GeneratePassword();
                            dict.Add("UserName", p.AdminMail);
                            dict.Add("Email", p.AdminMail);
                            MembershipProvider.CreateUserAndAccount(p.AdminMail, pass, false, dict);
                            RoleProvider.AddUsersToRoles(new[] { p.AdminMail }, new[] { "Client", "Moderator" });
                            NotifyMail.SendNotify("PlaceAdminCreate", p.AdminMail,
                                                  format => string.Format(format, HostName),
                                                  format => string.Format(format, p.AdminMail, pass, HostName)
                                                  );

                            user = DB.Users.First(x => x.Email.ToLower().Trim() == p.AdminMail.ToLower().Trim());

                            var exist = DB.PlaceAdmins.FirstOrDefault(x => x.PlaceID == p.ID && x.UserID == user.ID);
                            if (exist == null)
                            {
                                exist = new PlaceAdmin()
                                {
                                    PlaceID = p.ID, UserID = user.ID
                                };
                                DB.PlaceAdmins.InsertOnSubmit(exist);
                            }
                        }
                        else
                        {
                            NotifyMail.SendNotify("PlaceAdminExist", p.AdminMail,
                                                  format => string.Format(format, HostName),
                                                  format => string.Format(format, "", "", HostName)
                                                  );


                            if (user.webpages_UsersInRoles.All(x => x.webpages_Role.RoleName != "Moderator"))
                            {
                                RoleProvider.AddUsersToRoles(new[] { user.Name }, new[] { "Moderator" });
                            }

                            var exist = DB.PlaceAdmins.FirstOrDefault(x => x.PlaceID == p.ID && x.UserID == user.ID);
                            if (exist == null)
                            {
                                exist = new PlaceAdmin()
                                {
                                    PlaceID = p.ID, UserID = user.ID
                                };
                                DB.PlaceAdmins.InsertOnSubmit(exist);
                            }
                        }
                    }
                }
                else
                {
                    p.Approved = false;
                    if (p.AdminMail.IsMailAdress())
                    {
                        NotifyMail.SendNotify("PlaceAdminBlock", p.AdminMail,
                                              format => string.Format(format, HostName),
                                              format => string.Format(format, "", "", HostName, p.Name)
                                              );
                    }
                }
                DB.SubmitChanges();
                return(RedirectToAction("Places"));
            }
        }
Exemplo n.º 2
0
        public ActionResult RegBlockPartner(RegisterModelPartnerStep1 model)
        {
            model.IsPost = true;
            if (!model.Agree || model.Name.IsNullOrEmpty() || model.Surname.IsNullOrEmpty() || !model.Email.IsMailAdress() || model.Phone.IsNullOrEmpty())
            {
                return(PartialView(model));
            }


            var    rand    = new Random(DateTime.Now.Millisecond);
            var    pass    = rand.GeneratePassword();
            string digitID = "";

            for (int i = 0; i < 500; i++)
            {
                var digit = rand.Next(100000000, 999999999);
                if (!DB.Users.Any(x => x.DigitID == digit.ToString()))
                {
                    digitID = digit.ToString();
                    break;
                }
            }


            var confirmKey = Guid.NewGuid();


            string link = Url.Action("CheckKey", "Home", new { key = confirmKey });

            var message = NotifyMail.SendNotify("Register", model.Email,
                                                format => string.Format(format, HostName),
                                                format => string.Format(format, HostName, link)
                                                );

            if (message.IsNullOrEmpty())
            {
                var dict = new Dictionary <string, object>();
                dict.Add("UserName", model.Name);
                dict.Add("UserSurname", model.Surname);
                dict.Add("Email", model.Email);
                dict.Add("UserPatrinomic", model.Patrinomic);
                dict.Add("Phone", model.Phone);
                dict.Add("RegStep", 1);
                dict.Add("IsPhoneConfirmed", false);
                dict.Add("DigitID", digitID);
                dict.Add("ConfirmKey", confirmKey);

                try
                {
                    MembershipProvider.CreateUserAndAccount(model.Email, pass, false, dict);
                }
                catch
                {
                    model.Email   = "";
                    model.Message = "Пользователь с таким E-mail уже зарегистрирован.";
                    return(PartialView(model));
                }
                RoleProvider.AddUsersToRoles(new[] { model.Email }, new[] { "ShopOwner" });
                var user = DB.Users.FirstOrDefault(x => x.Email == model.Email);
                if (user != null)
                {
                    Logger.WriteEvent(Logger.EventType.UserRegister, "Регистрация в системе", user.ID);
                }
                model.Message =
                    "На указанный Вами электронный адрес было выслано письмо<br>Пожалуйста, перейдите по ссылке из письма для продолжения регистрации в системе";
            }
            else
            {
                model.Message = message;
            }
            return(PartialView(model));
        }
Exemplo n.º 3
0
        public ActionResult EditPartial(User user, FormCollection collection)
        {
            var myRoles      = DB.Roles.Where(x => CurrentUser.UserRoles.Contains(x.RoleName)).Select(x => x.RoleId).ToList();
            var allowedRoles =
                DB.UserAllowedRoles.Where(x => myRoles.Contains(x.RoleID))
                .Select(x => DB.Roles.FirstOrDefault(z => z.RoleId == x.AllowedRoleID))
                .Where(x => x != null)
                .Distinct()
                .ToList();

            ViewBag.AllowedRoles = allowedRoles;

            user.IsPost = true;
            if (!user.Email.IsMailAdress() || user.UserName.IsNullOrEmpty() || user.UserSurname.IsNullOrEmpty() ||
                (user.UserRoleRadio == 0 && user.ID != CurrentUser.ID))
            {
                return(PartialView(user));
            }

            if (user.ID > 0)
            {
                var dbu = DB.Users.First(x => x.ID == user.ID);
                dbu.LoadPossibleProperties(user);
                if (dbu.Email != dbu.Name)
                {
                    dbu.Name = dbu.Email;
                }

                DB.SubmitChanges();

                if (user.ID != CurrentUser.ID)
                {
                    if (dbu.UsersInRoles.All(x => x.RoleId != user.UserRoleRadio))
                    {
                        DB.UsersInRoles.DeleteAllOnSubmit(dbu.UsersInRoles);
                        DB.SubmitChanges();
                        DB.UsersInRoles.InsertOnSubmit(new UsersInRole()
                        {
                            RoleId = user.UserRoleRadio, UserId = dbu.ID
                        });
                        DB.SubmitChanges();
                    }

                    if (user.Password.IsFilled())
                    {
                        Logger.WriteEvent(Logger.EventType.UserChangePass,
                                          "Изменение пароля для пользователя " + user.Email);
                        WebSecurity.ResetPassword(WebSecurity.GeneratePasswordResetToken(dbu.Name), user.Password);
                    }
                }
                Logger.WriteEvent(Logger.EventType.UserEdit, "Редактирование пользователя, Email пользователя - " + user.Email);
            }
            else
            {
                var dict = new Dictionary <string, object>();
                dict.Add("UserName", user.UserName);
                dict.Add("UserSurname", user.UserSurname);
                dict.Add("Email", user.Email);
                dict.Add("UserPatrinomic", user.UserPatrinomic);
                dict.Add("Phone", user.Phone);


                var rand = new Random(DateTime.Now.Millisecond);
                if (user.UserRoleRadio == DB.Roles.First(x => x.RoleName == "ShopOwner").RoleId)
                {
                    string digitID = "";

                    for (int i = 0; i < 500; i++)
                    {
                        var digit = rand.Next(100000000, 999999999);
                        if (!DB.Users.Any(x => x.DigitID == digit.ToString()))
                        {
                            digitID = digit.ToString();
                            break;
                        }
                    }
                    dict.Add("DigitID", digitID);
                }
                var pass = rand.GeneratePassword();

                var roleName = DB.Roles.First(x => x.RoleId == user.UserRoleRadio).RoleName;

                MembershipProvider.CreateUserAndAccount(user.Email, pass, false, dict);
                RoleProvider.AddUsersToRoles(new[] { user.Email }, new[] { roleName });

                if (CurrentUser.UserRoles.Contains("ShopOwner"))
                {
                    DB.Managers.InsertOnSubmit(new Manager()
                    {
                        ManagerUserID = WebSecurity.GetUserId(user.Email),
                        ShopOwnerID   = CurrentUser.ID
                    });
                    DB.SubmitChanges();
                }
                Logger.WriteEvent(Logger.EventType.UserAdding, "Создание пользователя, Email пользователя - " + user.Email);
            }

            if (user.ID != CurrentUser.ID)
            {
                user.RedirectURL = Url.Action("Index");

                user.SavePermissions(DB);

                user.SaveShops(DB, collection);
            }
            else
            {
                ViewBag.Message = "Данные успешно сохранены";
            }

            return(PartialView(user));
        }
        public ActionResult Register(RegisterModel model, HttpPostedFileBase Photo)
        {
            model.IsPost = true;
            if (Photo != null && Photo.ContentLength > 0)
            {
                model.Photo = Photo.FileName;
            }

            if (model.Email.IsFilled())
            {
                var exist = DB.Users.Where(x => x.Name.ToLower() == model.Email.ToLower() || x.Email.ToLower() == model.Email.ToLower());
                if (exist.Any())
                {
                    model.Email = null;
                }
            }

            if (!model.Day.HasValue || !model.Month.HasValue || !model.Year.HasValue || !model.UserName.IsFilled() || !model.Town.HasValue || !model.Email.IsFilled() || !model.Email.IsMailAdress() || model.Password.IsNullOrEmpty() /*|| Photo == null || Photo.ContentLength == 0*/)
            {
                return(View(model));
            }

            DateTime date;

            try
            {
                date = new DateTime(model.Year.Value, model.Month.Value, model.Day.Value);
            }
            catch
            {
                model.Month = null;
                model.Day   = null;
                return(View(model));
            }

            /*var pass = new Random(DateTime.Now.Millisecond).GeneratePassword();*/
            var dict = new Dictionary <string, object>();

            dict.Add("BirthDate", date);
            dict.Add("TownID", model.Town);
            dict.Add("Email", model.Email);
            dict.Add("Sex", model.Sex);

            var name    = "";
            var surname = "";
            var ar      = model.UserName.Split <string>(" ");

            name = ar.ElementAt(0);
            if (ar.Count() > 1)
            {
                surname = ar.ElementAt(1);
            }

            dict.Add("UserName", name);
            dict.Add("UserSurname", surname);
            MembershipProvider.CreateUserAndAccount(model.Email, model.Password, false, dict);
            RoleProvider.AddUsersToRoles(new[] { model.Email }, new[] { "Client" });

            var user = DB.Users.FirstOrDefault(x => x.Email == model.Email);

            if (user != null && Photo != null && Photo.ContentLength != 0)
            {
                string fileName = Guid.NewGuid() + Path.GetExtension(Photo.FileName);
                string path     = "/Content/Avatars/" + fileName;
                Photo.SaveAs(Server.MapPath(path));

                DB.UserPhotos.InsertOnSubmit(new UserPhoto()
                {
                    Path = path, UserID = user.ID, IsAvatar = true
                });
                DB.SubmitChanges();
            }


            WebSecurity.Login(model.Email, model.Password, true);



            NotifyMail.SendNotify("Register", model.Email,
                                  format => string.Format(format, HostName),
                                  format => string.Format(format, model.Email, model.Password, HostName)
                                  );



            return(RedirectToAction("Index", "Cabinet"));


            /*
             *          NotifyMail.SendNotify("ForgotPassword", user.Email,
             *                          format => string.Format(format, HostName),
             *                          format => string.Format(format, user.Email, user.Password, HostName));
             */
        }
        public static SocialAuthResult CheckAuth()
        {
            /*
             *          var from = HttpContext.Current.Request["from"];
             *          if (from.IsNullOrWhiteSpace())
             *              return new SocialAuthResult();
             */
            bool isNew  = false;
            var  target = String.Format("http://ulogin.ru/token.php?token={0}&host={1}", HttpContext.Current.Request["token"],
                                        HttpContext.Current.Request.Url.Host);

            var wc = new WebClient();

            byte[] data = null;
            try
            {
                data = wc.DownloadData(target);
            }
            catch (Exception exxxx)
            {
                return(new SocialAuthResult()
                {
                    HasResult = true,
                    Message = "Ошибка при установлении соединения с сервером авторизации",
                });
            }
            var js = Encoding.UTF8.GetString(data);

            js = DecodeEncodedNonAsciiCharacters(js);
            var serializer = new JavaScriptSerializer();
            var jsData     = serializer.Deserialize <UserDataFromNetwork>(js);

            if (string.IsNullOrEmpty(jsData.email))
            {
                return(new SocialAuthResult()
                {
                    HasResult = true,
                    Message = "Для регистрации через соцсеть, в соцсети должен быть указан email",
                });
            }

            User user = null;

            try
            {
                var db =
                    new xDBDataContext(
                        ConfigurationManager.ConnectionStrings["SexiLoveConnectionString"].ConnectionString);
                user = db.Users.FirstOrDefault(x => x.Email.ToLower() == jsData.email.ToLower());


                //нет такого
                if (user == null)
                {
                    var      pass = GeneratePassword(6);
                    DateTime bd   = DateTime.MinValue;
                    DateTime.TryParse(jsData.bdate, out bd);

                    var dict = new Dictionary <string, object>();
                    if (bd != DateTime.MinValue)
                    {
                        dict.Add("BirthDate", bd);
                    }
                    var town = db.Towns.FirstOrDefault(x => x.Name.ToLower() == (jsData.city ?? "").ToLower());
                    if (town == null)
                    {
                        town = db.Towns.FirstOrDefault(x => x.Name.ToLower() == "москва");
                    }
                    if (town == null)
                    {
                        town = db.Towns.First();
                    }
                    dict.Add("TownID", town.ID);
                    dict.Add("Email", jsData.email);
                    dict.Add("Sex", jsData.sex == 2);


                    dict.Add("UserName", (jsData.first_name ?? ""));
                    dict.Add("UserSurname", (jsData.last_name ?? ""));
                    MembershipProvider.CreateUserAndAccount(jsData.email, pass, false, dict);
                    RoleProvider.AddUsersToRoles(new[] { jsData.email }, new[] { "Client" });
                    var userDB = db.Users.FirstOrDefault(x => x.Email == jsData.email);
                    var al     = jsData.photo_big.IsNullOrEmpty() ? jsData.photo : jsData.photo_big;
                    if (!al.IsNullOrEmpty())
                    {
                        var    ext = al.Substring(al.Length - 4);
                        string ap  = "/Content/Avatars/" + Guid.NewGuid() +
                                     (ext.StartsWith(".")
                                        ? ext
                                        : ".jpg");

                        try
                        {
                            wc.DownloadFile(al, HttpContext.Current.Server.MapPath(ap));

                            if (userDB != null)
                            {
                                db.UserPhotos.InsertOnSubmit(new UserPhoto()
                                {
                                    Path = ap, UserID = userDB.ID
                                });
                                db.SubmitChanges();
                            }
                        }
                        catch
                        {
                        }
                    }

                    WebSecurity.Login(jsData.email, pass, true);
                    user  = userDB;
                    isNew = true;
                }
                //есть чувак
                else
                {
                    //мыло подтверждено и совпало, логин совпал
                    if ((/*jsData.verified_email == 1 && */ jsData.email.ToLower() == user.Email.ToLower()))
                    {
                        FormsAuthentication.SetAuthCookie(jsData.email, false);
                    }
                    //редирект на страницу с формой, где выводим сообщение
                    else
                    {
                        return(new SocialAuthResult()
                        {
                            HasResult = false,
                            Message = (jsData.nickname == user.Email
                                ? "Пользователь с таким логином уже зарегистрирован. Пожалуйста, укажите другой логин."
                                : "Пользователь с таким Email уже зарегистрирован. Пожалуйста укажите другой Email"),
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                return(new SocialAuthResult()
                {
                    HasResult = false,
                    Message = ex.Message,
                    IsNew = isNew
                });
            }

            return(new SocialAuthResult()
            {
                User = user,
                HasResult = true,
                Message = "",
                IsNew = isNew
            });
        }