Пример #1
0
 public void CleanUpIds4Db()
 {
     using (CustomConfigurationDbContext ctx = new CustomConfigurationDbContextFactory(_configuration)
                                               .CreateDbContext(Array.Empty <string>()))
     {
         DataSeeder.CleanUpConfigurationDb(ctx);
     }
 }
Пример #2
0
            public Ids4RootDTO GetIds4ClientsRoot()
            {
                using (CustomConfigurationDbContext clientCtx = new CustomConfigurationDbContextFactory(_configuration).CreateDbContext(null))
                {
                    var clients = clientCtx.Clients
                                  .Include(x => x.Claims)
                                  .Include(x => x.AllowedCorsOrigins)
                                  .Include(x => x.ClientSecrets)
                                  .Include(x => x.RedirectUris)
                                  .Include(x => x.PostLogoutRedirectUris)
                                  .Include(x => x.AllowedScopes)
                                  //.ThenInclude(x=>x.ChildCollection)
                                  .Include(x => x.IdentityProviderRestrictions)
                                  .Include(x => x.AllowedGrantTypes)
                                  .Include(x => x.Properties)

                                  .AsNoTracking().ToArray();


                    var apiResources = clientCtx.ApiResources
                                       .Include(x => x.Scopes)
                                       .ThenInclude(z => z.UserClaims)

                                       .Include(x => x.UserClaims)
                                       .Include(x => x.Secrets)
                                       .AsNoTracking().ToArray();

                    var identityResources = clientCtx.IdentityResources
                                            .Include(x => x.UserClaims)
                                            .AsNoTracking().ToArray();

                    return(new Ids4RootDTO
                    {
                        Clients = clients,
                        ApiResources = apiResources,
                        IdentityResources = identityResources
                    });
                }
            }
Пример #3
0
        /// Making Ids4 entities tree from Ids3 and Copy to Ids4 Database
        public (Ids3RootDTO, Ids4RootDTO) CopyClientsScopesTreeFromIds3DbToIds4Db(bool enableScopeToApiResource2ndLevelMapping)
        {
            var existingTargetClients4 = Ids4Tool.GetIds4ClientsRoot();
            var existingClients4Ids    = existingTargetClients4.Clients.Select(x => x.ClientId).ToList();

            // Source
            var clients3Source = Ids3Tool.GetIds3ClientsRoot();
            var clients        = _mapper.Map <Ids4Entities.Client[]>(clients3Source.Clients);

            var storage = new ClientDataStorage(clients.ToList(), existingClients4Ids);

            using (CustomConfigurationDbContext ctx = new CustomConfigurationDbContextFactory(_configuration).CreateDbContext(Array.Empty <string>()))
            {
                DatabaseHelper.SwitchIdentityInsertState(ctx, "OFF");

                // Clients
                foreach (var c in storage.Clients)
                {
                    // Add to DbContext
                    ctx.Clients.Add(c);
                }

                storage.Filter(existingClients4Ids);// optional double check, just for sure
                SaveClientsWithChildren(ctx, storage);


                //  IdentityResources
                var identityResources4Target = _mapper.Map <Ids4Entities.IdentityResource[]>(clients3Source.Scopes.Where(x => x.Type == (int)ScopeType.Identity));

                //  ApiResources
                var apiResources4Target = _mapper.Map <Ids4Entities.ApiResource[]>(clients3Source.Scopes.Where(x => x.Type == (int)ScopeType.Resource));

                // TODO: think about 2nd level claims and rework properly
                // because 2nd level api scope includes into aud claim
                if (enableScopeToApiResource2ndLevelMapping)
                {
                    var apiScopes =
                        _mapper.Map <Ids4Entities.ApiScope[]>(
                            clients3Source.Scopes.Where(x => x.Type == (int)ScopeType.Resource));

                    // Transform children Level#1 and Level#2
                    for (int i = 0; i < apiResources4Target.Length; i++)
                    {
                        var ar = apiResources4Target[i];
                        apiScopes[i].ApiResource = ar;

                        // 1 ApiResource => 1 ApiScope
                        ar.Scopes.Add(apiScopes[i]);

                        for (int j = 0; j < apiScopes[i].UserClaims.Count; j++)
                        {
                            apiScopes[i].UserClaims[j].ApiScope   = apiScopes[i];
                            apiScopes[i].UserClaims[j].ApiScopeId = apiScopes[i].Id;
                        }
                    }
                }

                var existingApiResNames      = existingTargetClients4.ApiResources.Select(x => x.Name).ToList();
                var existingIdentityResNames = existingTargetClients4.IdentityResources.Select(x => x.Name).ToList();

                var resourcesStorage = new ResourcesDataStorage(
                    identityResources4Target, apiResources4Target,
                    existingIdentityResNames,
                    existingApiResNames);

                SaveResources(ctx, resourcesStorage);

                DatabaseHelper.SwitchIdentityInsertState(ctx, "OFF");

                return(clients3Source, new Ids4RootDTO
                {
                    Clients = clients,
                    IdentityResources = identityResources4Target,
                    ApiResources = apiResources4Target
                });
            }
        }