Пример #1
0
        public UsergroupsModule() : base("/admin")
        {
            this.RequiresAuthentication();
            this.RequiresClaims(new[] { "Users" });

            this.Get["/usergroups"] = x =>
            {
                this.Model.Usergroups = new UsergroupsModel();
                return(this.View["admin/Usergroups", this.Model]);
            };

            this.Get["/usergroups/{id:guid}"] = x =>
            {
                var usergroup = Usergroup.Find(Guid.Parse(x.id));

                if (usergroup == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                this.Model.Usergroup = usergroup;

                return(this.View["admin/usergroup", this.Model]);
            };

            this.Get["/usergroups/create"] = x =>
            {
                this.Model.Usergroup = new Usergroup();
                this.Model.Claims    = Claim.All();
                return(this.View["admin/UsergroupEdit", this.Model]);
            };

            this.Post["/usergroups/create"] = x =>
            {
                // do the save
                var name   = (string)this.Request.Form.Name;
                var claims = (string)this.Request.Form.Claims;

                var master = (MasterModel)this.Model.MasterModel;
                master.Errored = false;
                master.ErrorsList.Clear();

                var newUsergroup = new Usergroup()
                {
                    Id   = Guid.NewGuid(),
                    Name = name
                };

                var allUsergroups = Usergroup.All();

                if (string.IsNullOrWhiteSpace(newUsergroup.Name))
                {
                    master.ErrorsList.Add("The name must not be empty.");
                }

                if (allUsergroups.Any(u => u.Name.Equals(newUsergroup.Name)))
                {
                    master.ErrorsList.Add("The provided name is already taken.");
                }

                // set the claims
                newUsergroup.Claims = claims.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList().Select(Guid.Parse).ToList();

                // save

                if (master.ErrorsList.Any())
                {
                    master.Errored       = true;
                    this.Model.Usergroup = newUsergroup;
                    this.Model.Claims    = Claim.All();
                    var u = this.BindTo(newUsergroup);
                    return(this.View["admin/UsergroupEdit", this.Model]);
                }

                newUsergroup.Save();

                // redirect to the list
                return(this.Response.AsRedirect("/admin/usergroups"));
            };

            this.Get["/usergroups/{id:guid}/edit"] = x =>
            {
                var usergroup = Usergroup.Find(Guid.Parse(x.id));

                if (usergroup == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                this.Model.Usergroup = usergroup;
                this.Model.Claims    = Claim.All();

                return(this.View["admin/UsergroupEdit", this.Model]);
            };

            this.Post["/usergroups/{id:guid}/update"] = x =>
            {
                // do the save
                var name   = (string)this.Request.Form.Name;
                var claims = (string)this.Request.Form.Claims;

                var master = (MasterModel)this.Model.MasterModel;
                master.Errored = false;
                master.ErrorsList.Clear();

                var oldUsergroup = Usergroup.Find((Guid)x.Id);

                var allUsergroups = Usergroup.All();


                if (string.IsNullOrWhiteSpace(name))
                {
                    master.ErrorsList.Add("The name must not be empty.");
                }

                if (allUsergroups.Any(u => u.Name.Equals(name) && !u.Name.Equals(oldUsergroup.Name)))
                {
                    master.ErrorsList.Add("The provided name is already taken.");
                }

                oldUsergroup.Name = name;

                oldUsergroup.Claims = claims.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList().Select(Guid.Parse).ToList();

                // save
                if (master.ErrorsList.Any())
                {
                    master.Errored        = true;
                    this.Model.Usergroup  = oldUsergroup;
                    this.Model.Usergroups = Claim.All();
                    var u = this.BindTo(oldUsergroup);
                    return(this.View["admin/UsergroupEdit", this.Model]);
                }

                oldUsergroup.Save();

                // redirect to the list
                return(this.Response.AsRedirect("/admin/usergroups"));
            };

            this.Post["/usergroups/{id:guid}/remove"] = x =>
            {
                var usergroup = Usergroup.Find((Guid)x.id);

                if (usergroup == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                // remove the user

                try
                {
                    usergroup.Delete();
                }
                catch (InvalidDataException)
                {
                    var master = (MasterModel)this.Model.MasterModel;
                    master.Errored = true;
                    master.ErrorsList.Add("You cannot delete a usergroup that has members assigned.");

                    this.Model.Usergroups = new UsergroupsModel();
                    return(this.View["admin/Usergroups", this.Model]);
                }

                return(this.Response.AsRedirect("/admin/usergroups"));
            };
        }
Пример #2
0
        public UsersModule() : base("/admin")
        {
            this.RequiresAuthentication();
            this.RequiresClaims(new[] { "Users" });

            this.Get["/users"] = x =>
            {
                this.Model.Users = new UsersModel();
                return(this.View["admin/Users", this.Model]);
            };

            this.Get["/users/{id:guid}"] = x =>
            {
                var user = User.Find(Guid.Parse(x.id));

                if (user == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                this.Model.User = user;

                return(this.View["admin/user", this.Model]);
            };

            this.Get["/users/create"] = x =>
            {
                this.Model.User       = new User();
                this.Model.Usergroups = Usergroup.All();
                return(this.View["admin/UserEdit", this.Model]);
            };

            this.Post["/users/create"] = x =>
            {
                // do the save
                var username      = (string)this.Request.Form.UserName;
                var email         = (string)this.Request.Form.Email;
                var password      = (string)this.Request.Form.Password;
                var passwordValid = (string)this.Request.Form.PasswordValidation;
                var usergroup     = Guid.Parse((string)this.Request.Form.Usergroup);

                var master = (MasterModel)this.Model.MasterModel;
                master.Errored = false;
                master.ErrorsList.Clear();

                var newUser = new User()
                {
                    Id          = Guid.NewGuid(),
                    UserName    = username,
                    Email       = email,
                    Password    = password,
                    UsergroupId = usergroup
                };

                newUser.EncodePassword();

                var allUsers = User.All();

                if (string.IsNullOrWhiteSpace(newUser.UserName))
                {
                    master.ErrorsList.Add("The username must not be empty.");
                }

                if (allUsers.Any(u => u.UserName.Equals(newUser.UserName)))
                {
                    master.ErrorsList.Add("The provided username is already taken.");
                }

                if (string.IsNullOrWhiteSpace(newUser.Email))
                {
                    master.ErrorsList.Add("The email must not be empty.");
                }

                if (allUsers.Any(u => u.Email.Equals(newUser.Email)))
                {
                    master.ErrorsList.Add("The provided email is already taken.");
                }

                if (string.IsNullOrWhiteSpace(newUser.Password))
                {
                    master.ErrorsList.Add("The password must not be empty.");
                }

                if (!newUser.Password.Equals(passwordValid))
                {
                    master.ErrorsList.Add("The passwords do not match.");
                }

                // save

                if (master.ErrorsList.Any())
                {
                    master.Errored        = true;
                    this.Model.User       = newUser;
                    this.Model.Usergroups = Usergroup.All();
                    var u = this.BindTo(newUser, "Password");
                    return(this.View["admin/UserEdit", this.Model]);
                }

                newUser.Save();


                // redirect to the list
                return(this.Response.AsRedirect("/admin/users"));
            };

            this.Get["/users/{id:guid}/edit"] = x =>
            {
                var user = User.Find(Guid.Parse(x.id));

                if (user == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                this.Model.User       = user;
                this.Model.Usergroups = Usergroup.All();

                return(this.View["admin/UserEdit", this.Model]);
            };

            this.Post["/users/{id:guid}/update"] = x =>
            {
                // do the save
                var username      = (string)this.Request.Form.UserName;
                var email         = (string)this.Request.Form.Email;
                var password      = (string)this.Request.Form.Password;
                var passwordValid = (string)this.Request.Form.PasswordValidation;
                var usergroup     = Guid.Parse((string)this.Request.Form.Usergroup);

                var master = (MasterModel)this.Model.MasterModel;
                master.Errored = false;
                master.ErrorsList.Clear();

                var oldUser = User.Find((Guid)x.Id);

                var allUsers = User.All();


                if (string.IsNullOrWhiteSpace(username))
                {
                    master.ErrorsList.Add("The username must not be empty.");
                }

                if (allUsers.Any(u => u.UserName.Equals(username) && !u.UserName.Equals(oldUser.UserName)))
                {
                    master.ErrorsList.Add("The provided username is already taken.");
                }

                oldUser.UserName = username;

                if (string.IsNullOrWhiteSpace(oldUser.Email))
                {
                    master.ErrorsList.Add("The email must not be empty.");
                }

                if (allUsers.Any(u => !u.Email.Equals(oldUser.Email) && u.Email.Equals(email)))
                {
                    master.ErrorsList.Add("The provided email is already taken.");
                }

                oldUser.Email = email;

                if (!string.IsNullOrWhiteSpace(password))
                {
                    if (!password.Equals(passwordValid))
                    {
                        master.ErrorsList.Add("The passwords do not match.");
                    }
                    else
                    {
                        oldUser.Password = password;
                        oldUser.EncodePassword();
                    }
                }

                oldUser.UsergroupId = usergroup;

                // save
                if (master.ErrorsList.Any())
                {
                    master.Errored        = true;
                    this.Model.User       = oldUser;
                    this.Model.Usergroups = Usergroup.All();
                    var u = this.BindTo(oldUser, "Password");
                    return(this.View["admin/UserEdit", this.Model]);
                }

                oldUser.Save();

                // redirect to the list
                return(this.Response.AsRedirect("/admin/users"));
            };

            this.Post["/users/{id:guid}/remove"] = x =>
            {
                var user = User.Find((Guid)x.id);

                if (user == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                // remove the user
                user.Delete();

                return(this.Response.AsRedirect("/admin/users"));
            };
        }
 public UsergroupsModel()
 {
     this.AllGroups = Usergroup.All().ToList();
     this.AllClaims = Claim.All().ToList();
 }