public static void SetupDemoIdentityData(TicketDeskIdentityContext context)
        {
            var userStore = new UserStore <TicketDeskUser>(context);
            var roleStore = new RoleStore <IdentityRole>(context);
            //TODO: this user manager has a default config, need to leverage the same user manager as the rest of the application
            var userManager = new UserManager <TicketDeskUser>(userStore);

            var roleManager = new RoleManager <IdentityRole>(roleStore);

            var roleNames = context.DefaultRoleNames;

            foreach (var roleName in roleNames)
            {
                //Create Role if it does not exist
                var role = roleManager.FindByName(roleName);
                if (role == null)
                {
                    role = new IdentityRole(roleName);
                    roleManager.Create(role);
                }
            }

            var admin = new TicketDeskUser {
                Id = "64165817-9cb5-472f-8bfb-6a35ca54be6a", UserName = "******", Email = "*****@*****.**", DisplayName = "Admin User"
            };
            var staff = new TicketDeskUser {
                Id = "72bdddfb-805a-4883-94b9-aa494f5f52dc", UserName = "******", Email = "*****@*****.**", DisplayName = "HelpDesk User"
            };
            var reguser = new TicketDeskUser {
                Id = "17f78f38-fa68-445f-90de-38896140db28", UserName = "******", Email = "*****@*****.**", DisplayName = "Regular User"
            };
            var users      = new[] { admin, staff, reguser };
            var rolesNames = new Dictionary <string, string[]>
            {
                { "*****@*****.**", new[] { "TdAdministrators", "TdHelpDeskUsers", "TdInternalUsers" } },
                { "*****@*****.**", new[] { "TdHelpDeskUsers", "TdInternalUsers" } },
                { "*****@*****.**", new[] { "TdInternalUsers" } }
            };

            foreach (var tdUser in users)
            {
                var user = userManager.FindByName(tdUser.UserName);
                if (user == null)
                {
                    user = tdUser;
                    userManager.Create(user, "123456");
                    userManager.SetLockoutEnabled(user.Id, false);
                }
                var rnames       = rolesNames[user.UserName];
                var rolesForUser = userManager.GetRoles(user.Id);
                foreach (var rname in rnames.Where(rname => !rolesForUser.Contains(rname)))
                {
                    userManager.AddToRole(user.Id, rname);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Migrates the users and roles from a legacy database to the new TD 2.5 schema.
        /// </summary>
        /// <param name="context">The identity database context</param>
        /// <param name="userManager">The user manager.</param>
        /// <param name="roleManager">The role manager.</param>
        /// <returns><c>true</c> if users migrated, <c>false</c> otherwise.</returns>
        public static bool MigrateSecurity(TicketDeskIdentityContext context, TicketDeskUserManager userManager, TicketDeskRoleManager roleManager)
        {
            EnsureRolesExist(roleManager);
            var appId =
                context.Database.SqlQuery <Guid>(
                    "select ApplicationId from aspnet_Applications where ApplicationName = 'TicketDesk'").First().ToString();
            var users = context.Database.SqlQuery <LegacyUser>(
                "select UserId, Email, Password, PasswordFormat, Comment from aspnet_Membership where ApplicationId = '" + appId + "' and IsApproved = 1 and IsLockedOut = 0").ToList();
            const string roleQuery = "SELECT r.RoleName FROM aspnet_UsersInRoles u inner join aspnet_Roles r on u.RoleId = r.RoleId WHERE u.UserId = @userId and r.ApplicationId = @appId";

            foreach (var user in users)
            {
                var newUser = new TicketDeskUser
                {
                    UserName    = user.Email,
                    Email       = user.Email,
                    DisplayName = user.Comment,
                };

                var result = user.PasswordFormat == 0 ?
                             userManager.Create(newUser, user.Password) :
                             userManager.Create(newUser);

                if (result.Succeeded)
                {
                    var rolesForUser =
                        context.Database.SqlQuery <string>(roleQuery,
                                                           new SqlParameter("userId", user.UserId),
                                                           new SqlParameter("appId", appId));
                    var newRoles = new List <string>();
                    foreach (var role in rolesForUser)
                    {
                        switch (role.ToLowerInvariant())
                        {
                        case "administrators":
                            newRoles.Add("TdAdministrators");
                            break;

                        case "helpdesk":
                            newRoles.Add("TdHelpDeskUsers");
                            break;

                        case "ticketsubmitters":
                            newRoles.Add("TdInternalUsers");
                            break;

                        default:
                            newRoles.Add("TdPendingUsers");
                            break;
                        }
                    }
                    userManager.AddToRoles(newUser.Id, newRoles.ToArray());
                }
            }
            return(true);
        }
        public static void RemoveAllIdentity(TicketDeskIdentityContext context)
        {
            foreach (var user in context.Users)
            {
                context.Users.Remove(user);
            }
            foreach (var role in context.Roles)
            {
                context.Roles.Remove(role);
            }

            //the context itself will ensure that at least one valid admin user accout remains

            context.SaveChanges();
        }
Example #4
0
 public DataManagementController(TicketDeskIdentityContext identityContext)
 {
     IdentityContext = identityContext;
 }
Example #5
0
        private static void SetupUsersAsync(TicketDeskIdentityContext context)
        {
            var roles = new[]
            {
                new Role("TdAdmin"),
                new Role("TdStaff"),
                new Role("TdSubmitter")
            };
            var users = new[]
            {
                new TdUser()
                {
                    HomeTown = "AnyTown USA",
                    UserName = "******"
                },
                new TdUser()
                {
                    HomeTown = "AnyTown USA",
                    UserName = "******"
                },
                new TdUser()
                {
                    HomeTown = "AnyTown USA",
                    UserName = "******"
                }
            };
            var userRoles = new List <Tuple <string, string> >
            {
                Tuple.Create("admin", "TdAdmin"),
                Tuple.Create("admin", "TdStaff"),
                Tuple.Create("admin", "TdSubmitter"),
                Tuple.Create("staff", "TdStaff"),
                Tuple.Create("staff", "TdSubmitter"),
                Tuple.Create("user", "TdSubmitter")
            };


            var idMgr = new Microsoft.AspNet.Identity.IdentityManager(new IdentityStore(context));

            foreach (var role in roles)
            {
                if (!context.Roles.Any(r => r.Name == role.Name))
                {
                    var task = idMgr.Roles.CreateRoleAsync(role);
                    task.Wait();
                }
            }
            foreach (var tdUser in users)
            {
                if (!context.Users.Any(u => u.UserName == tdUser.UserName))
                {
                    idMgr.Users.CreateLocalUser(tdUser, "password");
                }
            }
            foreach (var userRole in userRoles)
            {
                var rlTask = idMgr.Roles.FindRoleByNameAsync(userRole.Item2);
                rlTask.Wait();
                var rl      = rlTask.Result;
                var usrTask = idMgr.Store.Users.FindByNameAsync(userRole.Item1, CancellationToken.None);
                usrTask.Wait();
                var usr        = usrTask.Result;
                var inRoleTask = idMgr.Roles.IsUserInRoleAsync(usr.Id, rl.Id, CancellationToken.None);
                inRoleTask.Wait();
                var inRole = inRoleTask.Result;
                if (!inRole)
                {
                    var rrTask = idMgr.Roles.AddUserToRoleAsync(usr.Id, rl.Id);
                    rrTask.Wait();
                }
            }
        }
Example #6
0
        public static void RemoveLegacyMembershipObjects(TicketDeskIdentityContext context)
        {
            const string script = @"
                drop table aspnet_PersonalizationAllUsers
                drop table aspnet_PersonalizationPerUser
                drop table aspnet_Profile
                drop table aspnet_SchemaVersions
                drop table aspnet_UsersInRoles
                drop table aspnet_WebEvent_Events
                drop table aspnet_Paths
                drop table aspnet_Membership
                drop table aspnet_Roles
                drop table aspnet_Users
                drop table aspnet_Applications

                drop view vw_aspnet_Applications
                drop view vw_aspnet_MembershipUsers
                drop view vw_aspnet_Profiles
                drop view vw_aspnet_Roles
                drop view vw_aspnet_Users
                drop view vw_aspnet_UsersInRoles
                drop view vw_aspnet_WebPartState_Paths
                drop view vw_aspnet_WebPartState_Shared
                drop view vw_aspnet_WebPartState_User

                drop procedure aspnet_AnyDataInTables
                drop procedure aspnet_Applications_CreateApplication
                drop procedure aspnet_CheckSchemaVersion
                drop procedure aspnet_Membership_ChangePasswordQuestionAndAnswer
                drop procedure aspnet_Membership_CreateUser
                drop procedure aspnet_Membership_FindUsersByEmail
                drop procedure aspnet_Membership_FindUsersByName
                drop procedure aspnet_Membership_GetAllUsers
                drop procedure aspnet_Membership_GetNumberOfUsersOnline
                drop procedure aspnet_Membership_GetPassword
                drop procedure aspnet_Membership_GetPasswordWithFormat
                drop procedure aspnet_Membership_GetUserByEmail
                drop procedure aspnet_Membership_GetUserByName
                drop procedure aspnet_Membership_GetUserByUserId
                drop procedure aspnet_Membership_ResetPassword
                drop procedure aspnet_Membership_SetPassword
                drop procedure aspnet_Membership_UnlockUser
                drop procedure aspnet_Membership_UpdateUser
                drop procedure aspnet_Membership_UpdateUserInfo
                drop procedure aspnet_Paths_CreatePath
                drop procedure aspnet_Personalization_GetApplicationId
                drop procedure aspnet_PersonalizationAdministration_DeleteAllState
                drop procedure aspnet_PersonalizationAdministration_FindState
                drop procedure aspnet_PersonalizationAdministration_GetCountOfState
                drop procedure aspnet_PersonalizationAdministration_ResetSharedState
                drop procedure aspnet_PersonalizationAdministration_ResetUserState
                drop procedure aspnet_PersonalizationAllUsers_GetPageSettings
                drop procedure aspnet_PersonalizationAllUsers_ResetPageSettings
                drop procedure aspnet_PersonalizationAllUsers_SetPageSettings
                drop procedure aspnet_PersonalizationPerUser_GetPageSettings
                drop procedure aspnet_PersonalizationPerUser_ResetPageSettings
                drop procedure aspnet_PersonalizationPerUser_SetPageSettings
                drop procedure aspnet_Profile_DeleteInactiveProfiles
                drop procedure aspnet_Profile_DeleteProfiles
                drop procedure aspnet_Profile_GetNumberOfInactiveProfiles
                drop procedure aspnet_Profile_GetProfiles
                drop procedure aspnet_Profile_GetProperties
                drop procedure aspnet_Profile_SetProperties
                drop procedure aspnet_RegisterSchemaVersion
                drop procedure aspnet_Roles_CreateRole
                drop procedure aspnet_Roles_DeleteRole
                drop procedure aspnet_Roles_GetAllRoles
                drop procedure aspnet_Roles_RoleExists
                drop procedure aspnet_Setup_RemoveAllRoleMembers
                drop procedure aspnet_Setup_RestorePermissions
                drop procedure aspnet_UnRegisterSchemaVersion
                drop procedure aspnet_Users_CreateUser
                drop procedure aspnet_Users_DeleteUser
                drop procedure aspnet_UsersInRoles_AddUsersToRoles
                drop procedure aspnet_UsersInRoles_FindUsersInRole
                drop procedure aspnet_UsersInRoles_GetRolesForUser
                drop procedure aspnet_UsersInRoles_GetUsersInRoles
                drop procedure aspnet_UsersInRoles_IsUserInRole
                drop procedure aspnet_UsersInRoles_RemoveUsersFromRoles
                drop procedure aspnet_WebEvent_LogEvent

                drop schema aspnet_Membership_FullAccess
                drop schema aspnet_Membership_BasicAccess
                drop schema aspnet_Membership_ReportingAccess
                drop schema aspnet_Personalization_BasicAccess
                drop schema aspnet_Personalization_FullAccess
                drop schema aspnet_Personalization_ReportingAccess
                drop schema aspnet_Profile_BasicAccess
                drop schema aspnet_Profile_FullAccess
                drop schema aspnet_Profile_ReportingAccess
                drop schema aspnet_Roles_BasicAccess
                drop schema aspnet_Roles_FullAccess
                drop schema aspnet_Roles_ReportingAccess
                drop schema aspnet_WebEvent_FullAccess

                drop role aspnet_Membership_FullAccess
                drop role aspnet_Membership_BasicAccess
                drop role aspnet_Membership_ReportingAccess
                drop role aspnet_Personalization_FullAccess
                drop role aspnet_Personalization_BasicAccess
                drop role aspnet_Personalization_ReportingAccess
                drop role aspnet_Profile_FullAccess
                drop role aspnet_Profile_BasicAccess
                drop role aspnet_Profile_ReportingAccess
                drop role aspnet_Roles_FullAccess
                drop role aspnet_Roles_BasicAccess
                drop role aspnet_Roles_ReportingAccess
                drop role aspnet_WebEvent_FullAccess
            ";

            context.Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction, script);
        }