public void ShouldCreateAuthorizationServerTemplateFromCreatorConfig() { // arrange AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator(new TemplateBuilder()); CreatorConfig creatorConfig = new CreatorConfig() { authorizationServers = new List <AuthorizationServerProperties>() }; AuthorizationServerProperties authorizationServer = new AuthorizationServerProperties() { Description = "description", DisplayName = "displayName", AuthorizationEndpoint = "endpoint.com", AuthorizationMethods = new string[] { "GET" }, TokenBodyParameters = new AuthorizationServerTokenBodyParameter[] { new AuthorizationServerTokenBodyParameter() { Name = "name", Value = "value" } }, ClientAuthenticationMethod = new string[] { "GET" }, TokenEndpoint = "endpoint.com", SupportState = true, DefaultScope = "defaultScope", BearerTokenSendingMethods = new string[] { "GET" }, ClientId = "id", ClientSecret = "secret", ClientRegistrationEndpoint = "endpoint.com", ResourceOwnerPassword = "******", ResourceOwnerUsername = "******", GrantTypes = new string[] { } }; creatorConfig.authorizationServers.Add(authorizationServer); // act Template authorizationServerTemplate = authorizationServerTemplateCreator.CreateAuthorizationServerTemplate(creatorConfig); AuthorizationServerTemplateResource authorizationServerTemplateResource = (AuthorizationServerTemplateResource)authorizationServerTemplate.Resources[0]; // assert Assert.Equal($"[concat(parameters('{ParameterNames.ApimServiceName}'), '/{authorizationServer.DisplayName}')]", authorizationServerTemplateResource.Name); Assert.Equal(authorizationServer.Description, authorizationServerTemplateResource.Properties.Description); Assert.Equal(authorizationServer.DisplayName, authorizationServerTemplateResource.Properties.DisplayName); Assert.Equal(authorizationServer.AuthorizationEndpoint, authorizationServerTemplateResource.Properties.AuthorizationEndpoint); Assert.Equal(authorizationServer.AuthorizationMethods, authorizationServerTemplateResource.Properties.AuthorizationMethods); Assert.Equal(authorizationServer.ClientAuthenticationMethod, authorizationServerTemplateResource.Properties.ClientAuthenticationMethod); Assert.Equal(authorizationServer.ClientId, authorizationServerTemplateResource.Properties.ClientId); Assert.Equal(authorizationServer.ClientRegistrationEndpoint, authorizationServerTemplateResource.Properties.ClientRegistrationEndpoint); Assert.Equal(authorizationServer.ClientSecret, authorizationServerTemplateResource.Properties.ClientSecret); Assert.Equal(authorizationServer.BearerTokenSendingMethods, authorizationServerTemplateResource.Properties.BearerTokenSendingMethods); Assert.Equal(authorizationServer.GrantTypes, authorizationServerTemplateResource.Properties.GrantTypes); Assert.Equal(authorizationServer.ResourceOwnerPassword, authorizationServerTemplateResource.Properties.ResourceOwnerPassword); Assert.Equal(authorizationServer.ResourceOwnerUsername, authorizationServerTemplateResource.Properties.ResourceOwnerUsername); Assert.Equal(authorizationServer.DefaultScope, authorizationServerTemplateResource.Properties.DefaultScope); Assert.Equal(authorizationServer.SupportState, authorizationServerTemplateResource.Properties.SupportState); Assert.Equal(authorizationServer.TokenBodyParameters[0].Name, authorizationServerTemplateResource.Properties.TokenBodyParameters[0].Name); Assert.Equal(authorizationServer.TokenBodyParameters[0].Value, authorizationServerTemplateResource.Properties.TokenBodyParameters[0].Value); }
public void ShouldCreateAuthorizationServerTemplateFromCreatorConfig() { // arrange AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator(); CreatorConfig creatorConfig = new CreatorConfig() { authorizationServers = new List <AuthorizationServerTemplateProperties>() }; AuthorizationServerTemplateProperties authorizationServer = new AuthorizationServerTemplateProperties() { description = "description", displayName = "displayName", authorizationEndpoint = "endpoint.com", authorizationMethods = new string[] { "GET" }, tokenBodyParameters = new AuthorizationServerTokenBodyParameter[] { new AuthorizationServerTokenBodyParameter() { name = "name", value = "value" } }, clientAuthenticationMethod = new string[] { "GET" }, tokenEndpoint = "endpoint.com", supportState = true, defaultScope = "defaultScope", bearerTokenSendingMethods = new string[] { "GET" }, clientId = "id", clientSecret = "secret", clientRegistrationEndpoint = "endpoint.com", resourceOwnerPassword = "******", resourceOwnerUsername = "******", grantTypes = new string[] { } }; creatorConfig.authorizationServers.Add(authorizationServer); // act Template authorizationServerTemplate = authorizationServerTemplateCreator.CreateAuthorizationServerTemplate(creatorConfig); AuthorizationServerTemplateResource authorizationServerTemplateResource = (AuthorizationServerTemplateResource)authorizationServerTemplate.resources[0]; // assert Assert.Equal($"[concat(parameters('apimServiceName'), '/{authorizationServer.displayName}')]", authorizationServerTemplateResource.name); Assert.Equal(authorizationServer.description, authorizationServerTemplateResource.properties.description); Assert.Equal(authorizationServer.displayName, authorizationServerTemplateResource.properties.displayName); Assert.Equal(authorizationServer.authorizationEndpoint, authorizationServerTemplateResource.properties.authorizationEndpoint); Assert.Equal(authorizationServer.authorizationMethods, authorizationServerTemplateResource.properties.authorizationMethods); Assert.Equal(authorizationServer.clientAuthenticationMethod, authorizationServerTemplateResource.properties.clientAuthenticationMethod); Assert.Equal(authorizationServer.clientId, authorizationServerTemplateResource.properties.clientId); Assert.Equal(authorizationServer.clientRegistrationEndpoint, authorizationServerTemplateResource.properties.clientRegistrationEndpoint); Assert.Equal(authorizationServer.clientSecret, authorizationServerTemplateResource.properties.clientSecret); Assert.Equal(authorizationServer.bearerTokenSendingMethods, authorizationServerTemplateResource.properties.bearerTokenSendingMethods); Assert.Equal(authorizationServer.grantTypes, authorizationServerTemplateResource.properties.grantTypes); Assert.Equal(authorizationServer.resourceOwnerPassword, authorizationServerTemplateResource.properties.resourceOwnerPassword); Assert.Equal(authorizationServer.resourceOwnerUsername, authorizationServerTemplateResource.properties.resourceOwnerUsername); Assert.Equal(authorizationServer.defaultScope, authorizationServerTemplateResource.properties.defaultScope); Assert.Equal(authorizationServer.supportState, authorizationServerTemplateResource.properties.supportState); Assert.Equal(authorizationServer.tokenBodyParameters[0].name, authorizationServerTemplateResource.properties.tokenBodyParameters[0].name); Assert.Equal(authorizationServer.tokenBodyParameters[0].value, authorizationServerTemplateResource.properties.tokenBodyParameters[0].value); }
public async Task ExecuteCommandAsync(CreatorConfig creatorConfig) { if (!Directory.Exists(creatorConfig.outputLocation)) { Directory.CreateDirectory(creatorConfig.outputLocation); } FileReader fileReader = new FileReader(); // initialize file helper classes FileNames fileNames = creatorConfig.baseFileName == null ? FileNameGenerator.GenerateFileNames(creatorConfig.apimServiceName) : FileNameGenerator.GenerateFileNames(creatorConfig.baseFileName); // initialize template creator classes APIVersionSetTemplateCreator apiVersionSetTemplateCreator = new APIVersionSetTemplateCreator(this.templateBuilder); LoggerTemplateCreator loggerTemplateCreator = new LoggerTemplateCreator(this.templateBuilder); BackendTemplateCreator backendTemplateCreator = new BackendTemplateCreator(this.templateBuilder); AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator(this.templateBuilder); ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator(this.templateBuilder); TagAPITemplateCreator tagAPITemplateCreator = new TagAPITemplateCreator(); PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader, this.templateBuilder); ProductGroupTemplateCreator productGroupTemplateCreator = new ProductGroupTemplateCreator(); SubscriptionTemplateCreator productSubscriptionsTemplateCreator = new SubscriptionTemplateCreator(); DiagnosticTemplateCreator diagnosticTemplateCreator = new DiagnosticTemplateCreator(); ReleaseTemplateCreator releaseTemplateCreator = new ReleaseTemplateCreator(); ProductTemplateCreator productTemplateCreator = new ProductTemplateCreator(policyTemplateCreator, productGroupTemplateCreator, productSubscriptionsTemplateCreator, this.templateBuilder); PropertyTemplateCreator propertyTemplateCreator = new PropertyTemplateCreator(this.templateBuilder); TagTemplateCreator tagTemplateCreator = new TagTemplateCreator(this.templateBuilder); APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, policyTemplateCreator, productAPITemplateCreator, tagAPITemplateCreator, diagnosticTemplateCreator, releaseTemplateCreator, this.templateBuilder); MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator(this.templateBuilder); // create templates from provided configuration Console.WriteLine("Creating global service policy template"); Console.WriteLine("------------------------------------------"); Template globalServicePolicyTemplate = creatorConfig.policy != null?policyTemplateCreator.CreateGlobalServicePolicyTemplate(creatorConfig) : null; Console.WriteLine("Creating API version set template"); Console.WriteLine("------------------------------------------"); Template apiVersionSetsTemplate = creatorConfig.apiVersionSets != null?apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null; Console.WriteLine("Creating product template"); Console.WriteLine("------------------------------------------"); Template productsTemplate = creatorConfig.products != null?productTemplateCreator.CreateProductTemplate(creatorConfig) : null; Console.WriteLine("Creating product/APIs template"); Console.WriteLine("------------------------------------------"); Template productAPIsTemplate = creatorConfig.products != null && creatorConfig.apis != null?productAPITemplateCreator.CreateProductAPITemplate(creatorConfig) : null; Console.WriteLine("Creating named values template"); Console.WriteLine("------------------------------------------"); Template propertyTemplate = creatorConfig.namedValues != null?propertyTemplateCreator.CreatePropertyTemplate(creatorConfig) : null; Console.WriteLine("Creating logger template"); Console.WriteLine("------------------------------------------"); Template loggersTemplate = creatorConfig.loggers != null?loggerTemplateCreator.CreateLoggerTemplate(creatorConfig) : null; Console.WriteLine("Creating backend template"); Console.WriteLine("------------------------------------------"); Template backendsTemplate = creatorConfig.backends != null?backendTemplateCreator.CreateBackendTemplate(creatorConfig) : null; Console.WriteLine("Creating authorization server template"); Console.WriteLine("------------------------------------------"); Template authorizationServersTemplate = creatorConfig.authorizationServers != null?authorizationServerTemplateCreator.CreateAuthorizationServerTemplate(creatorConfig) : null; // store name and whether the api will depend on the version set template each api necessary to build linked templates List <LinkedMasterTemplateAPIInformation> apiInformation = new List <LinkedMasterTemplateAPIInformation>(); List <Template> apiTemplates = new List <Template>(); Console.WriteLine("Creating API templates"); Console.WriteLine("------------------------------------------"); IDictionary <string, string[]> apiVersions = APITemplateCreator.GetApiVersionSets(creatorConfig); foreach (APIConfig api in creatorConfig.apis) { if (creatorConfig.ConsiderAllApiForDeployments || creatorConfig.PreferredApis.Contains(api.name)) { bool isServiceUrlParameterizeInYml = false; if (creatorConfig.serviceUrlParameters != null && creatorConfig.serviceUrlParameters.Count > 0) { isServiceUrlParameterizeInYml = creatorConfig.serviceUrlParameters.Any(s => s.ApiName.Equals(api.name)); api.serviceUrl = isServiceUrlParameterizeInYml ? creatorConfig.serviceUrlParameters.Where(s => s.ApiName.Equals(api.name)).FirstOrDefault().ServiceUrl : api.serviceUrl; } // create api templates from provided api config - if the api config contains a supplied apiVersion, split the templates into 2 for metadata and swagger content, otherwise create a unified template List <Template> apiTemplateSet = await apiTemplateCreator.CreateAPITemplatesAsync(api); apiTemplates.AddRange(apiTemplateSet); // create the relevant info that will be needed to properly link to the api template(s) from the master template apiInformation.Add(new LinkedMasterTemplateAPIInformation() { name = api.name, isSplit = apiTemplateCreator.IsSplitAPI(api), dependsOnGlobalServicePolicies = creatorConfig.policy != null, dependsOnVersionSets = api.apiVersionSetId != null, dependsOnVersion = masterTemplateCreator.GetDependsOnPreviousApiVersion(api, apiVersions), dependsOnProducts = api.products != null, dependsOnTags = api.tags != null, dependsOnLoggers = await masterTemplateCreator.DetermineIfAPIDependsOnLoggerAsync(api, fileReader), dependsOnAuthorizationServers = api.authenticationSettings != null && api.authenticationSettings.OAuth2 != null && api.authenticationSettings.OAuth2.AuthorizationServerId != null, dependsOnBackends = await masterTemplateCreator.DetermineIfAPIDependsOnBackendAsync(api, fileReader), isServiceUrlParameterize = isServiceUrlParameterizeInYml }); } } Console.WriteLine("Creating tag template"); Console.WriteLine("------------------------------------------"); Template tagTemplate = creatorConfig.tags != null?tagTemplateCreator.CreateTagTemplate(creatorConfig) : null; // create parameters file Template templateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig); // write templates to outputLocation if (creatorConfig.linked == true) { // create linked master template Template masterTemplate = masterTemplateCreator.CreateLinkedMasterTemplate(creatorConfig, globalServicePolicyTemplate, apiVersionSetsTemplate, productsTemplate, productAPIsTemplate, propertyTemplate, loggersTemplate, backendsTemplate, authorizationServersTemplate, tagTemplate, apiInformation, fileNames, creatorConfig.apimServiceName); FileWriter.WriteJSONToFile(masterTemplate, string.Concat(creatorConfig.outputLocation, fileNames.LinkedMaster)); } foreach (Template apiTemplate in apiTemplates) { APITemplateResource apiResource = apiTemplate.Resources.FirstOrDefault(resource => resource.Type == ResourceTypeConstants.API) as APITemplateResource; APIConfig providedAPIConfiguration = creatorConfig.apis.FirstOrDefault(api => string.Compare(apiResource.Name, APITemplateCreator.MakeResourceName(api), true) == 0); // if the api version is not null the api is split into multiple templates. If the template is split and the content value has been set, then the template is for a subsequent api string apiFileName = FileNameGenerator.GenerateCreatorAPIFileName(providedAPIConfiguration.name, apiTemplateCreator.IsSplitAPI(providedAPIConfiguration), apiResource.Properties.Value != null); FileWriter.WriteJSONToFile(apiTemplate, string.Concat(creatorConfig.outputLocation, apiFileName)); } if (globalServicePolicyTemplate != null) { FileWriter.WriteJSONToFile(globalServicePolicyTemplate, string.Concat(creatorConfig.outputLocation, fileNames.GlobalServicePolicy)); } if (apiVersionSetsTemplate != null) { FileWriter.WriteJSONToFile(apiVersionSetsTemplate, string.Concat(creatorConfig.outputLocation, fileNames.ApiVersionSets)); } if (productsTemplate != null) { FileWriter.WriteJSONToFile(productsTemplate, string.Concat(creatorConfig.outputLocation, fileNames.Products)); } if (productAPIsTemplate != null) { FileWriter.WriteJSONToFile(productAPIsTemplate, string.Concat(creatorConfig.outputLocation, fileNames.ProductAPIs)); } if (propertyTemplate != null) { FileWriter.WriteJSONToFile(propertyTemplate, string.Concat(creatorConfig.outputLocation, fileNames.NamedValues)); } if (loggersTemplate != null) { FileWriter.WriteJSONToFile(loggersTemplate, string.Concat(creatorConfig.outputLocation, fileNames.Loggers)); } if (backendsTemplate != null) { FileWriter.WriteJSONToFile(backendsTemplate, string.Concat(creatorConfig.outputLocation, fileNames.Backends)); } if (authorizationServersTemplate != null) { FileWriter.WriteJSONToFile(authorizationServersTemplate, string.Concat(creatorConfig.outputLocation, fileNames.AuthorizationServers)); } if (tagTemplate != null) { FileWriter.WriteJSONToFile(tagTemplate, string.Concat(creatorConfig.outputLocation, fileNames.Tags)); } // write parameters to outputLocation FileWriter.WriteJSONToFile(templateParameters, string.Concat(creatorConfig.outputLocation, fileNames.Parameters)); Console.WriteLine("Templates written to output location"); }