public EditUserRoleModule()
        {
            // add an after hook to send the user to access denied if they are NOT admin
            After += context =>
            {
                if (context.Response.StatusCode == HttpStatusCode.Forbidden)
                    context.Response = this.Response.AsRedirect("/denied");
            };

            this.RequiresAnyClaim(new[] { "admin" });

            // show the edit user form
            Get["/EditUserRole/{Guid}"] = parameters =>
            {
                this.RequiresAuthentication();

                // get the user row to be edit and send it to the View
                var userRow = UserDatabase.GetUserByGuid(parameters.Guid);

                // get the users role guid and put into the model
                var urGuid = UserDatabase.GetRoleGuidForUser(parameters.Guid);
                userRow.RoleGuid = urGuid.RoleGuid;

                return View["Views/User/EditUserRole", userRow];

            };
            Post["/EditUserRole/{Guid}"] = parameters =>
            {
                var model = new Users();
                this.BindTo(model);
                var email = (string)Request.Form.Email;

                string r = null;

                try
                {
                    // create an instance of the RolesInsert and fill the data
                    var ur = new UserRolesInsert { RoleGuid = model.RoleGuid, UserGuid = model.Guid };

                    // open db and clear out old role and add new
                    var db = Database.Open();
                    db.UserRoles.DeleteByUserGuid(model.Guid);
                    db.UserRoles.Insert(ur);

                    r = "<strong>Success:</strong> " +
                           "user: <em>" + email +
                           "</em> role was updated.  <a href=\"/users \"> return to users</a> ";
                }
                catch (Exception e)
                {
                    r = "<strong>Error:</strong> " +
                            " guid: something went wrong and the update failed!: " + e + " <a href=\"/users \"> return to users</a> ";
                }

                return Response.AsText(r);
            };
        }
        public AddUserModule()
        {
            // add an after hook to send the user to access denied if they are NOT admin
            After += context =>
            {
                if (context.Response.StatusCode == HttpStatusCode.Forbidden)
                    context.Response = this.Response.AsRedirect("/denied");
            };
            this.RequiresAnyClaim(new[] { "admin" });

            // show the add user form
            Get["/adduser"] = _ =>
            {
                this.RequiresAuthentication();
                return View["Views/User/AddUser"];
            };

            // receive the posted add form data

            Post["/adduser"] = parameters =>
            {
                // create an instance of the expected model and bind it to this (the posted form)
                var model = new Users();
                this.BindTo(model);

                var db = Database.Open(); // open db with Simple.Data

                // check if username/email already exists
                int uCount = Database.Open().Users.GetCount(db.Users.Email == Request.Form.Email);
                if (uCount > 0)
                    return Response.AsJson("<strong>Error:</strong> The email already exists and cannot be used!");

                // get the pwd because it is not going in the table and therefore NOT in the model
                var pwd = (string)Request.Form.Password;

                // create the BCrypt hash + salt
                string theSalt = BCrypt.Net.BCrypt.GenerateSalt();
                // GenerateSalt(50); increase the value in there to increase work factor
                string theHash = BCrypt.Net.BCrypt.HashPassword(pwd, theSalt);
                // nb: pwd is NOT saved in the DB, only the hash

                model.CreateDate = DateTime.Now;
                model.LastUpdated = DateTime.Now;
                model.LastUpdatedBy = Context.CurrentUser.UserName;
                model.Hash = theHash;
                model.Guid = Guid.NewGuid();

                db.Users.Insert(model);
                return Response.AsJson("<strong>Success:</strong> user <em>" + model.Email + "</em> was added.");
            };
        }
        public EditUserModule()
        {
            // add an after hook to send the user to access denied if they are NOT admin
            After += context =>
            {
                if (context.Response.StatusCode == HttpStatusCode.Forbidden)
                    context.Response = this.Response.AsRedirect("/denied");
            };
            this.RequiresAnyClaim(new[] { "admin" });

            // show the edit user form
            Get["/EditUser/{Guid}"] = parameters =>
            {
                this.RequiresAuthentication();

                // get the user row to be edit and send it to the View
                var userRow = UserDatabase.GetUserByGuid(parameters.Guid);
                return View["Views/User/EditUser", userRow];

            };

            Post["/EditUser/{Guid}"] = parameters =>
            {
                var model = new Users();
                this.BindTo(model);
                string r;

                var email = (string) Request.Form.Email;
                var pwd = (string) Request.Form.Password;
                var theSalt = BCrypt.Net.BCrypt.GenerateSalt();
                var thenewHash = BCrypt.Net.BCrypt.HashPassword(pwd, theSalt);

                // create a subset of the user model so that we are only updating the fields
                // we see on the form
                var user = new EditUser()
                {
                    Guid=model.Guid,
                    FirstName = model.FirstName,
                    LastName = model.LastName,
                    LastUpdated = DateTime.Now,
                    LastUpdatedBy = Context.CurrentUser.UserName,
                    Hash = thenewHash
                };

                try
                {
                    var db = Database.Open();
                    db.Users.Update(user);
                    r = "<strong>Success:</strong> " +
                           "user: <em>" + email +
                           "</em> was updated.  <a href=\"/users \"> return to users</a> ";
                }
                catch (Exception e)
                {
                    r = "<strong>Error:</strong> " +
                            " guid: something went wrong and the update failed!: " + e +" <a href=\"/users \"> return to users</a> ";
                }

                return Response.AsText(r);
            };
        }