Skip to content

Commit

Permalink
Update config deployer service to add CORS policies for APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
SanojPunchihewa authored and tharindu1st committed Jul 2, 2023
1 parent 6e5ca89 commit 9a81440
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
32 changes: 31 additions & 1 deletion runtime/config-deployer-service/ballerina/APIClient.bal
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ public class APIClient {
apiArtifact.rateLimitPolicies[rateLimitPolicyCR.metadata.name] = rateLimitPolicyCR;
}
}
if apkConf.apiPolicies != () {
if apkConf.apiPolicies != () || apkConf.corsConfiguration != (){
model:APIPolicy? apiPolicyCR = self.generateAPIPolicyAndBackendCR(apiArtifact, apkConf, (), apkConf.apiPolicies, organization, apiArtifact.uniqueId);
if apiPolicyCR != () {
apiArtifact.apiPolicies[apiPolicyCR.metadata.name] = apiPolicyCR;
Expand Down Expand Up @@ -591,6 +591,13 @@ public class APIClient {
if responseInterceptor is model:InterceptorReference {
defaultSpecData.responseInterceptors = [responseInterceptor];
}
CORSConfiguration? corsConfiguration = apkConf.corsConfiguration;
if corsConfiguration is CORSConfiguration {
model:CORSPolicy? cORSPolicy = self.retrieveCORSPolicyDetails(apiArtifact, apkConf, corsConfiguration, organization);
if cORSPolicy is model:CORSPolicy {
defaultSpecData.cORSPolicy = cORSPolicy;
}
}
if defaultSpecData != {} {
model:APIPolicy? apiPolicyCR = self.generateAPIPolicyCR(apkConf, targetRefName, operations, organization, defaultSpecData);
if apiPolicyCR != () {
Expand Down Expand Up @@ -1085,6 +1092,29 @@ public class APIClient {
return ();
}

private isolated function retrieveCORSPolicyDetails(model:APIArtifact apiArtifact, APKConf apkConf, CORSConfiguration corsConfiguration, string organization) returns model:CORSPolicy? {
model:CORSPolicy corsPolicy = {};
if corsConfiguration.corsConfigurationEnabled is boolean {
corsPolicy.enabled = <boolean>corsConfiguration.corsConfigurationEnabled;
}
if corsConfiguration.accessControlAllowCredentials is boolean {
corsPolicy.accessControlAllowCredentials = <boolean>corsConfiguration.accessControlAllowCredentials;
}
if corsConfiguration.accessControlAllowOrigins is string[] {
corsPolicy.accessControlAllowOrigins = <string[]>corsConfiguration.accessControlAllowOrigins;
}
if corsConfiguration.accessControlAllowHeaders is string[] {
corsPolicy.accessControlAllowHeaders = <string[]>corsConfiguration.accessControlAllowHeaders;
}
if corsConfiguration.accessControlAllowMethods is string[] {
corsPolicy.accessControlAllowMethods = <string[]>corsConfiguration.accessControlAllowMethods;
}
if corsConfiguration.accessControlExposeHeaders is string[] {
corsPolicy.accessControlExposeHeaders = <string[]>corsConfiguration.accessControlExposeHeaders;
}
return corsPolicy;
}

isolated function generateInterceptorServiceCR(record {} parameters, string interceptorBackend, string flow, APKConf apkConf, string organization) returns model:InterceptorService? {
model:InterceptorService? interceptorServiceCR = ();
interceptorServiceCR = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public type APIPolicySpec record {|
public type APIPolicyData record {
InterceptorReference[] requestInterceptors?;
InterceptorReference[] responseInterceptors?;
CORSPolicy cORSPolicy?;
};

public type InterceptorReference record {
Expand All @@ -44,3 +45,12 @@ public type APIPolicyList record {
ListMeta metadata;
APIPolicy[] items;
};

public type CORSPolicy record {
boolean enabled = false;
boolean accessControlAllowCredentials = false;
string[] accessControlAllowOrigins = [];
string[] accessControlAllowHeaders = [];
string[] accessControlAllowMethods = [];
string[] accessControlExposeHeaders = [];
};
2 changes: 2 additions & 0 deletions runtime/config-deployer-service/ballerina/types.bal
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,15 @@ public type APKOperations record {
# + accessControlAllowCredentials - Field Description
# + accessControlAllowHeaders - Field Description
# + accessControlAllowMethods - Field Description
# + accessControlExposeHeaders - Field Description
# + accessControlAllowMaxAge - Field Description
public type CORSConfiguration record {
boolean corsConfigurationEnabled?;
string[] accessControlAllowOrigins?;
boolean accessControlAllowCredentials?;
string[] accessControlAllowHeaders?;
string[] accessControlAllowMethods?;
string[] accessControlExposeHeaders?;
int accessControlAllowMaxAge?;
};

Expand Down

0 comments on commit 9a81440

Please sign in to comment.