Skip to content

Commit bb3f879

Browse files
committed
ID-55: support multiple base directories for certs
1 parent d2b0939 commit bb3f879

File tree

12 files changed

+70
-28
lines changed

12 files changed

+70
-28
lines changed

CHANGELOG.adoc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
= Changelog
22

3+
== Version 1.2.0
4+
[cols="1,2,<10a", options="header"]
5+
|===
6+
|ID|Type|Description
7+
|https://github.com/Axway-API-Management-Plus/apigw-maven-plugin/issues/55[#55]
8+
|Enhancement
9+
|Add support for multiple base directories for certificates.
10+
|===
11+
312
== Version 1.1.0
413
[cols="1,2,<10a", options="header"]
514
|===
615
|ID|Type|Description
7-
|https://github.com/Axway-API-Management-Plus/apigw-maven-plugin/pull/53[#53]
16+
|https://github.com/Axway-API-Management-Plus/apigw-maven-plugin/issues/53[#53]
817
|Enhancement
918
|The property configuration now supports JSON boolean values.
1019

doc/manual/_config-tool.adoc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Options:
5757
Passphrase for output archive files [optional]
5858
-s, --simulate Enable simulation mode [optional]
5959
-b DIRECTORY, --base-dir=DIRECTORY
60-
Base directory for certificate files [optional]
60+
Base directory for certificate files [multiple]
6161
--secrets-file=FILEPATH
6262
Path of JSON file containing confidential propertiers
6363
[optional]
@@ -154,7 +154,11 @@ To avoid errors due to incompatible types (e.g. placeholder string used for an i
154154

155155
|-b, --base-dir
156156
|Base directory for certificate files.
157-
If specified relative path to certificate files is based on this directory.
157+
158+
Multiple directories can be specified by adding the parameter multiple times.
159+
160+
If specified, the given directories are scanned for certificate files.
161+
If multiple certificate files exists the first one will be used.
158162

159163
|--secrets-file
160164
|Path of JSON file containing confidential properties.

doc/manual/_reference.adoc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,12 @@ The plugin can also be configured in the `pom.xml` via the <configuration> eleme
413413
</configPropertFiles>
414414
415415
<configCertsBaseDir>${basedir}/src/main/axwgw/certs</configCertsBaseDir> <!--5-->
416-
417-
<configSecretsFile>${basedir}/src/main/axwgw/gateway.crypt.json</configSecretsFile> <!--6-->
418-
<configSecretsKey>${user.home}/secrets.key</configSecretsKey> <!--7-->
416+
<configCertsBaseDirs>
417+
<configCertsBaseDir>${basedir}/src/main/axwgw/certs/common</configCertsBaseDir> <!--6-->
418+
<configCertsBaseDir>${basedir}/src/main/axwgw/certs/ca</configCertsBaseDir>
419+
</configCertsBaseDirs>
420+
<configSecretsFile>${basedir}/src/main/axwgw/gateway.crypt.json</configSecretsFile> <!--7-->
421+
<configSecretsKey>${user.home}/secrets.key</configSecretsKey> <!--8-->
419422
</configuration>
420423
</plugin>
421424
<!- ... ->
@@ -425,5 +428,6 @@ The plugin can also be configured in the `pom.xml` via the <configuration> eleme
425428
<3> Location of a configuration file for properties.
426429
<4> Location of a list of configuration files for properties.
427430
<5> Base directory for certificate files.
428-
<6> Path to secrets file.
429-
<7> Key file to decrypt/encrypt values of secrets file.
431+
<6> Additional base directories for certificate files supported.
432+
<7> Path to secrets file.
433+
<8> Key file to decrypt/encrypt values of secrets file.

example/config-tool/config/certs/staged-root-ca.crt renamed to example/config-tool/config/certs/common/staged-root-ca.crt

File renamed without changes.

example/config-tool/run.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ REM Define environment variables for field value and password configuration
88
SET INFO_NAME=Demo
99
SET NEW_SERVER_PASSWORD=changeme
1010

11-
CALL %BUILDFED% -v -e src\gateway.env -p src\gateway.pol -c config\gateway.config.json --cert=config\gateway.certs.json --prop=config\gateway.props.json --secrets-file=config\gateway.crypt.json --secrets-key=key.binary -D artifact:demo-1.0.0 -F info.descr:config\description.txt --output-fed=gateway.fed --passphrase-in=changeme --passphrase-out=changed --base-dir=config/certs
11+
CALL %BUILDFED% -v -e src\gateway.env -p src\gateway.pol -c config\gateway.config.json --cert=config\gateway.certs.json --prop=config\gateway.props.json --secrets-file=config\gateway.crypt.json --secrets-key=key.binary -D artifact:demo-1.0.0 -F info.descr:config\description.txt --output-fed=gateway.fed --passphrase-in=changeme --passphrase-out=changed --base-dir=config/certs/common --base-dir=config/certs
1212
ENDLOCAL

src/main/java/com/axway/maven/apigw/AbstractGatewayMojo.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ public abstract class AbstractGatewayMojo extends AbstractMojo {
9898

9999
@Parameter(property = "axway.config.certs.basedir", required = false)
100100
protected File configCertsBaseDir = null;
101-
101+
102+
@Parameter(property = "axway.config.certs.basedirs", required = false)
103+
protected File[] configCertsBaseDirs = null;
104+
102105
@Parameter(property = "axway.tools.cfg.cert.expirationDays", required = false)
103106
protected int certExpirationDays = 10;
104107

@@ -308,4 +311,17 @@ protected Map<String, String> buildPolicyProperties() throws MojoExecutionExcept
308311

309312
return polProps;
310313
}
314+
315+
protected List<File> getCertificateBaseDirs() {
316+
ArrayList<File> baseDirs = new ArrayList<>();
317+
if (this.configCertsBaseDir != null) {
318+
baseDirs.add(this.configCertsBaseDir);
319+
}
320+
if (this.configCertsBaseDirs != null) {
321+
for (File f : this.configCertsBaseDirs) {
322+
baseDirs.add(f);
323+
}
324+
}
325+
return baseDirs;
326+
}
311327
}

src/main/java/com/axway/maven/apigw/DeploymentArchiveMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ private void buildFedArchive(File targetDir, File srcPolFile, File srcEnvFile, F
160160
fedBuilder.setCertificatesFile(this.configCertsFile);
161161
fedBuilder.setCertificateExpirationDays(this.certExpirationDays);
162162
fedBuilder.enableCertificateConfigFileUpdate(this.updateCertConfigFile);
163-
fedBuilder.setCertificatesBasePath(this.configCertsBaseDir);
163+
fedBuilder.setCertificatesBasePath(getCertificateBaseDirs());
164164
}
165165
if (this.configSecretsFile != null) {
166166
if (this.configSecretsKey == null)

src/main/java/com/axway/maven/apigw/DeploymentMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ private File configFed(File pol, File env, File info) throws MojoExecutionExcept
137137
fb.setCertificatesFile(this.configCertsFile);
138138
fb.setCertificateExpirationDays(this.certExpirationDays);
139139
fb.enableCertificateConfigFileUpdate(this.updateCertConfigFile);
140-
fb.setCertificatesBasePath(this.configCertsBaseDir);
140+
fb.setCertificatesBasePath(getCertificateBaseDirs());
141141
}
142142
if (this.configSecretsFile != null) {
143143
if (this.configSecretsKey == null)

src/main/java/com/axway/maven/apigw/utils/FedBuilder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class FedBuilder {
2020

2121
private final List<File> propertyFiles = new ArrayList<File>();
2222
private File certsFile = null;
23-
private File certsBaseDir = null;
23+
private List<File> certsBaseDirs = null;
2424

2525
private int certExpirationDays = -1;
2626

@@ -69,8 +69,8 @@ public void setCertificatesFile(File certsFile) {
6969
this.certsFile = certsFile;
7070
}
7171

72-
public void setCertificatesBasePath(File baseDir) {
73-
this.certsBaseDir = baseDir;
72+
public void setCertificatesBasePath(List<File> baseDirs) {
73+
this.certsBaseDirs = baseDirs;
7474
}
7575

7676
public void setCertificateExpirationDays(int days) {
@@ -130,9 +130,11 @@ public int execute(File targetFed, Map<String, String> props) throws MojoExecuti
130130
if (this.updateCertConfigFile) {
131131
args.add("--cert-config-update");
132132
}
133-
if (this.certsBaseDir != null) {
134-
args.add("--base-dir");
135-
args.add(this.certsBaseDir.getAbsolutePath());
133+
if (this.certsBaseDirs != null) {
134+
for (File bd : this.certsBaseDirs) {
135+
args.add("--base-dir");
136+
args.add(bd.getAbsolutePath());
137+
}
136138
}
137139
}
138140
if (this.secretsFile != null) {

src/main/resources/scripts/lib/buildfed.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def parse_cli_property(cli_prop):
3131

3232
def main():
3333
prog = sys.argv[0]
34-
version = "%prog 1.2.0"
34+
version = "%prog 1.3.0"
3535
usage = "%prog OPTIONS"
3636
epilog = "Build configured .fed package."
3737

@@ -51,7 +51,7 @@ def main():
5151
parser.add_option("--passphrase-in", dest="passphrase_in", help="Passphrase of input archive files [optional]", metavar="PASSPHRASE")
5252
parser.add_option("--passphrase-out", dest="passphrase_out", help="Passphrase for output archive files [optional]", metavar="PASSPHRASE")
5353
parser.add_option("-s", "--simulate", dest="simulate", help="Enable simulation mode [optional]", action="store_true")
54-
parser.add_option("-b", "--base-dir", dest="base_dir", help="Base directory for certificate files [optional]", metavar="DIRECTORY")
54+
parser.add_option("-b", "--base-dir", dest="base_dirs", help="Base directory for certificate files [multiple]", metavar="DIRECTORY", action="append")
5555
parser.add_option("--secrets-file", dest="secrets_file", help="Path of JSON file containing confidential properties [optional]", metavar="FILEPATH")
5656
parser.add_option("--secrets-key", dest="secrets_key_file", help="Path to key file to decrypt confidential properties [optional]", metavar="FILEPATH")
5757

@@ -115,8 +115,8 @@ def main():
115115

116116
# Setup configuration
117117
fed_config = FedConfigurator(options.pol_file_path, options.env_file_path, options.config_file_path, options.cert_file_path, properties, passphrase_in, secrets)
118-
if options.base_dir:
119-
fed_config.set_base_dir(options.base_dir)
118+
if options.base_dirs:
119+
fed_config.set_base_dirs(options.base_dirs)
120120

121121
if options.simulate:
122122
fed_config.enable_simulation_mode()

0 commit comments

Comments
 (0)