Beispiel #1
0
        private async Task InitializeAsync()
        {
            var memberships = await this.membershipService.GetAsync(0, null, false, null, null);

            if (memberships?.Items != null)
            {
                foreach (var membership in memberships.Items)
                {
                    var utilizer = new Utilizer
                    {
                        Role         = Rbac.ReservedRoles.Administrator,
                        Type         = Utilizer.UtilizerType.System,
                        MembershipId = membership.Id
                    };

                    var role = await this.GetByNameAsync(Rbac.ReservedRoles.Administrator, membership.Id);

                    if (role == null)
                    {
                        await this.CreateAsync(utilizer, membership.Id, new Role
                        {
                            Name         = Rbac.ReservedRoles.Administrator,
                            Description  = "Administrator",
                            MembershipId = membership.Id,
                            Permissions  = RoleHelper.AssertAdminPermissionsForReservedResources()
                        });
                    }
                }
            }
        }
Beispiel #2
0
        public async Task <dynamic> MigrateAsync(string connectionString, Membership _membership, UserWithPassword _user)
        {
            // Validation
            var databaseInformation = Ertis.MongoDB.Helpers.ConnectionStringHelper.ParseConnectionString(connectionString);
            var connectionString1   = Ertis.MongoDB.Helpers.ConnectionStringHelper.GenerateConnectionString(this.databaseSettings);
            var connectionString2   = Ertis.MongoDB.Helpers.ConnectionStringHelper.GenerateConnectionString(databaseInformation);

            if (connectionString1 != connectionString2)
            {
                throw ErtisAuthException.MigrationRejected("Connection string could not validated");
            }

            // 1. Membership
            var membership = await this.membershipService.CreateAsync(new Membership
            {
                Name                  = _membership.Name,
                DefaultEncoding       = _membership.DefaultEncoding,
                HashAlgorithm         = _membership.HashAlgorithm,
                ExpiresIn             = _membership.ExpiresIn,
                RefreshTokenExpiresIn = _membership.RefreshTokenExpiresIn,
                SecretKey             = string.IsNullOrEmpty(_membership.SecretKey) ? GenerateRandomSecretKey(32) : _membership.SecretKey
            });

            // Utilizer
            var utilizer = new Utilizer
            {
                Role         = Rbac.ReservedRoles.Administrator,
                Type         = Utilizer.UtilizerType.System,
                MembershipId = membership.Id
            };

            // 2. Role
            var adminRole = await this.roleService.CreateAsync(utilizer, membership.Id, new Role
            {
                Name         = Rbac.ReservedRoles.Administrator,
                Description  = "Administrator",
                MembershipId = membership.Id,
                Permissions  = RoleHelper.AssertAdminPermissionsForReservedResources()
            });

            // 3. User (admin)
            var adminUser = await this.userService.CreateAsync(utilizer, membership.Id, new UserWithPassword
            {
                Username     = _user.Username,
                FirstName    = _user.FirstName,
                LastName     = _user.LastName,
                EmailAddress = _user.EmailAddress,
                Role         = adminRole.Name,
                MembershipId = membership.Id,
                PasswordHash = this.cryptographyService.CalculatePasswordHash(membership, _user.PasswordHash)
            });

            return(new
            {
                membership,
                user = adminUser,
                role = adminRole
            });
        }