time.reverificationDays=90
time.verificationFreshMonths=39
time.verificationMaxAgeMonths=24
+
+appName=SomeCA
\ No newline at end of file
/ttp/user
/ttp/country
/acceptableDocuments
+/blog
import club.wpia.gigi.output.SimpleUntranslatedMenuItem;
import club.wpia.gigi.output.template.Form.CSRFException;
import club.wpia.gigi.output.template.Outputable;
+import club.wpia.gigi.output.template.PlainOutputable;
import club.wpia.gigi.output.template.Template;
import club.wpia.gigi.output.template.TranslateCommand;
import club.wpia.gigi.pages.AboutPage;
return m;
}
+ private Menu createMenu(Outputable name) {
+ Menu m = new Menu(name);
+ categories.add(m);
+ return m;
+ }
+
public MenuCollector generateMenu() throws ServletException {
putPage("/denied", new AccessDenied(), null);
putPage("/error", new PageNotFound(), null);
putPage("/login", new LoginPage(), null);
- Menu mainMenu = createMenu("SomeCA.org");
+ Menu mainMenu = createMenu(new PlainOutputable(ServerConstants.getAppName()));
mainMenu.addItem(new SimpleMenuItem("https://" + ServerConstants.getHostNamePort(Host.WWW) + "/login", "Password Login") {
@Override
vars.put("authContext", currentAuthContext);
}
+ vars.put("appName", ServerConstants.getAppName());
resp.setContentType("text/html; charset=utf-8");
baseTemplate.output(resp.getWriter(), lang, vars);
} else {
<html lang="en">
<head>
<meta charset="utf-8">
- <!-- <link rel="alternate" type="application/rss+xml" title="Newsfeed" href="//blog.SomeCA.org/feed"> -->
+ <!-- <link rel="alternate" type="application/rss+xml" title="Newsfeed" href="<?=$linkHost?>/blog"> -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <title><?=_SomeCA?> - <?=$title?></title>
+ <title><?=_${appName}?> - <?=$title?></title>
<meta name="description" content="">
<link rel="stylesheet" href="<?=$static?>/css/jquery-ui-timepicker-addon.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="navbar-brand" href="/"><?=_SomeCA Frontend?></a>
+ <a class="navbar-brand" href="/"><?=_${appName} Frontend?></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<hr/>
<div id="siteInfo">
Page info
- ©2016-<?=$year?> SomeCA
+ ©2016-<?=$year?> <?=_${appName}?>
</div>
</body>
hw.setHandler(rh);
ServletContextHandler servlet = new ServletContextHandler(ServletContextHandler.SESSIONS);
- servlet.setInitParameter(SessionManager.__SessionCookieProperty, "SomeCA-Session");
+ servlet.setInitParameter(SessionManager.__SessionCookieProperty, ServerConstants.getAppName() + "-Session");
servlet.addServlet(webAppServlet, "/*");
ErrorPageErrorHandler epeh = new ErrorPageErrorHandler();
epeh.addErrorPage(404, "/error");
public static void sendMailProbe(Language l, String type, int id, String hash, String address) throws IOException {
HashMap<String, Object> vars = new HashMap<>();
vars.put("link", "https://" + ServerConstants.getHostNamePortSecure(Host.WWW) + "/verify?type=" + type + "&id=" + id + "&hash=" + hash);
+ vars.put("appName", ServerConstants.getAppName());
mailProbe.sendMail(l, vars, address);
}
Subject: <?=_Mail Probe?>
-<?=_Thanks for signing up with SomeCA.org, below is the link you need to open to verify your account. Once your account is verified you will be able to start issuing certificates to your heart's content!?>
+<?=_Thanks for signing up with ${appName}, below is the link you need to open to verify your account. Once your account is verified you will be able to start issuing certificates to your heart's content!?>
<?=$link?>
out.print("DATA\r\n");
out.flush();
readSMTPResponse(in, 250);
- out.print("X-Mailer: SomeCA.org Website\r\n");
+ out.print("X-Mailer: " + ServerConstants.getAppName() + " Website\r\n");
// if (array_key_exists("REMOTE_ADDR", $_SERVER)) {
// out.print("X-OriginatingIP: ".$_SERVER["REMOTE_ADDR"]."\r\n");
// }
<?=_Kind regards?>,
-<?=_SomeCA.org?>
+<?=_${appName}?>
--
<?=_This message has automatically been sent by the system.?>
import club.wpia.gigi.email.SendMail;
import club.wpia.gigi.localisation.Language;
+import club.wpia.gigi.util.ServerConstants;
public class MailTemplate extends Template {
private static final Template FOOTER = new Template(MailTemplate.class.getResource("MailFooter.templ"));
- public static final String SUBJECT_TAG = "[SomeCA] ";
+ public static final String SUBJECT_TAG = "[" + ServerConstants.getAppName() + "] ";
private TemplateBlock subjectBlock;
public void sendMail(Language l, Map<String, Object> vars, String to) throws IOException {
tryReload();
vars.put(Outputable.OUT_KEY_PLAIN, true);
+ vars.put("appName", ServerConstants.getAppName());
String body = runTemplate(this, l, vars);
body += runTemplate(FOOTER, l, vars);
-<h3><?=_What is SomeCA??></h3>
+<h3><?=_What is ${appName}??></h3>
-<p><?=_SomeCA is a public Certificate Authority (CA) that issues affordable certificates. The service is provided by !'<a href="//wpia.club" target="_blank">'WPIA (World Privacy and Identity Association)!'</a>'.?></p>
+<p><?=_${appName} is a public Certificate Authority (CA) that issues affordable certificates. The service is provided by !'<a href="//wpia.club" target="_blank">'WPIA (World Privacy and Identity Association)!'</a>'.?></p>
<p><?=_One goal of WPIA is to promote awareness and education on computer security through the use of encryption technologies, in particular by providing cryptographic certificates.?></p>
<p><?=_Client certificates can be used to digitally sign and encrypt both emails and documents. Furthermore client certificates can authenticate and authorize users connecting to websites and applications without the need of a password.
On the other hand, server certificates can be used to establish secure internet connections with the Transport Layer Security protocol (TLS).?></p>
-<p><?=_In addition to signing certificates, SomeCA provides a service to verify your digital identity to assure that data signed with your certificate is related to your person.?></p>
+<p><?=_In addition to signing certificates, ${appName} provides a service to verify your digital identity to assure that data signed with your certificate is related to your person.?></p>
-<p><?=_If you are interested - !'<a href="/register">'join SomeCA!'</a>' as fellow for free and get your own certificates.?></p>
+<p><?=_If you are interested - !'<a href="/register">'join ${appName}!'</a>' as fellow for free and get your own certificates.?></p>
<hr/>
-<p><?=_For general documentation and help, please visit the SomeCA !(/wiki/gigi)Wiki Documentation site!'</a>'.?>
-<?=_For specific policies, see the SomeCA !(/policy)Policies page!'</a>'.?></p>
\ No newline at end of file
+<p><?=_For general documentation and help, please visit the ${appName} !(/wiki/gigi)Wiki Documentation site!'</a>'.?>
+<?=_For specific policies, see the ${appName} !(/policy)Policies page!'</a>'.?></p>
\ No newline at end of file
import club.wpia.gigi.localisation.Language;
import club.wpia.gigi.output.template.Template;
import club.wpia.gigi.util.AuthorizationContext;
+import club.wpia.gigi.util.ServerConstants;
/**
* This class encapsulates a sub page of Gigi. A template residing nearby this
protected Map<String, Object> getDefaultVars(HttpServletRequest req) {
HashMap<String, Object> vars = new HashMap<String, Object>();
vars.put(Gigi.LINK_HOST, req.getAttribute(Gigi.LINK_HOST));
+ vars.put("appName", ServerConstants.getAppName());
return vars;
}
@Override
protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
HashMap<String, Object> vars2 = new HashMap<String, Object>(vars);
-
StringBuffer content = new StringBuffer();
for (SubjectAlternateName SAN : cr.getSANs()) {
content.append(SAN.getType().toString().toLowerCase());
-<h3><?=_SomeCA Acceptable Use Policy?></h3>
-<p><?=_I hereby represent that I am fully authorized by the owner of the information contained in the CSR sent to SomeCA to apply for an Digital Certificate for secure and authenticated electronic transactions. I understand that a digital certificate serves to identify the Subscriber for the purposes of electronic communication and that the management of the private keys associated with such certificates is the responsibility of the subscriber's technical staff and/or contractors.?></p>
+<h3><?=_${appName} Acceptable Use Policy?></h3>
+<p><?=_I hereby represent that I am fully authorized by the owner of the information contained in the CSR sent to ${appName} to apply for an Digital Certificate for secure and authenticated electronic transactions. I understand that a digital certificate serves to identify the Subscriber for the purposes of electronic communication and that the management of the private keys associated with such certificates is the responsibility of the subscriber's technical staff and/or contractors.?></p>
-<p><?=_SomeCA's public certification services are governed by a CPS as amended from time to time which is incorporated into this Agreement by reference. The Subscriber will use the SSL Server Certificate in accordance with SomeCA Inc.'s CPS and supporting documentation published !(/policy/CPS)here!'</a>'.?></p>
+<p><?=_${appName}'s public certification services are governed by a CPS as amended from time to time which is incorporated into this Agreement by reference. The Subscriber will use the SSL Server Certificate in accordance with SomeCA Inc.'s CPS and supporting documentation published !(/policy/CPS)here!'</a>'.?></p>
-<p><?=_If the Subscriber's name and/or domain name registration change the subscriber will immediately inform SomeCA Inc. who shall revoke the digital certificate. When the Digital Certificate expires or is revoked the company will permanently remove the certificate from the server on which it is installed and will not use it for any purpose thereafter. The person responsible for key management and security is fully authorized to install and utilize the certificate to represent this organization's electronic presence.?></p>
+<p><?=_If the Subscriber's name and/or domain name registration change the subscriber will immediately inform ${appName} Inc. who shall revoke the digital certificate. When the Digital Certificate expires or is revoked the company will permanently remove the certificate from the server on which it is installed and will not use it for any purpose thereafter. The person responsible for key management and security is fully authorized to install and utilize the certificate to represent this organization's electronic presence.?></p>
<span id="placeholderName" class="js-hint"><?=$placeholderName?></span>
<? if($defaultName) { ?>
<span id="defaultName" class="js-hint"><?=$defaultName?></span>
</td>
<td>
<input class="form-control" type='text' id='CN' name='CN' value='<?=$CN?>'/>
- <?=_For a client certificate you need to enter a name with at least 50 VP or 'SomeCA user' will be used.?><br />
+ <?=_For a client certificate you need to enter a name with at least 50 VP or '${appName} User' will be used.?><br />
<?=_For a server certificate leave this field blank.?>
</td>
</tr>
import club.wpia.gigi.GigiApiException;
import club.wpia.gigi.crypto.SPKAC;
import club.wpia.gigi.dbObjects.Certificate;
+import club.wpia.gigi.dbObjects.Certificate.CSRType;
+import club.wpia.gigi.dbObjects.Certificate.SANType;
+import club.wpia.gigi.dbObjects.Certificate.SubjectAlternateName;
import club.wpia.gigi.dbObjects.CertificateOwner;
import club.wpia.gigi.dbObjects.CertificateProfile;
+import club.wpia.gigi.dbObjects.CertificateProfile.PropertyTemplate;
import club.wpia.gigi.dbObjects.Digest;
import club.wpia.gigi.dbObjects.Group;
import club.wpia.gigi.dbObjects.Organisation;
import club.wpia.gigi.dbObjects.User;
-import club.wpia.gigi.dbObjects.Certificate.CSRType;
-import club.wpia.gigi.dbObjects.Certificate.SANType;
-import club.wpia.gigi.dbObjects.Certificate.SubjectAlternateName;
-import club.wpia.gigi.dbObjects.CertificateProfile.PropertyTemplate;
import club.wpia.gigi.output.template.SprintfCommand;
import club.wpia.gigi.util.AuthorizationContext;
import club.wpia.gigi.util.CAA;
import club.wpia.gigi.util.DomainAssessment;
import club.wpia.gigi.util.PEM;
import club.wpia.gigi.util.RateLimit;
+import club.wpia.gigi.util.ServerConstants;
import sun.security.pkcs.PKCS9Attribute;
import sun.security.pkcs10.PKCS10;
import sun.security.pkcs10.PKCS10Attribute;
public class CertificateRequest {
- public static final String DEFAULT_CN = "SomeCA User";
+ public static final String DEFAULT_CN = ServerConstants.getAppName() + " User";
public static final ObjectIdentifier OID_KEY_USAGE_SSL_SERVER = ObjectIdentifier.newInternal(new int[] {
1, 3, 6, 1, 5, 5, 7, 3, 1
-<p><?=_SomeCA offers two ways to create a certificate.?>
-<?=_One is to paste a certificate signing request (CSR) created from an existing or newly created private key.?> <?=_ If you do not know what a CSR is or how to create one take a look at the !'<a href="https://someca.de/FAQ/CSR">'FAQ!'</a>'.?>
+<p><?=_${appName} offers two ways to create a certificate.?>
+<?=_One is to paste a certificate signing request (CSR) created from an existing or newly created private key.?> <?=_ If you do not know what a CSR is or how to create one take a look at the !(/wiki/CSR)FAQ!'</a>'.?>
<?=_As an alternative you can generate the private key inside your browser and export it once the certificate has been issued.?></p>
<form method="post">
<table class="table">
package club.wpia.gigi.pages.account.domain;
import java.io.IOException;
-import java.util.HashMap;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
CertificateOwner u = LoginPage.getAuthorizationContext(req).getTarget();
try {
DomainManagementForm domMan = new DomainManagementForm(req, u, false);
- HashMap<String, Object> vars = new HashMap<>();
+ Map<String, Object> vars = getDefaultVars(req);
vars.put("domainman", domMan);
if (u instanceof User) {
DomainAddForm domAdd = new DomainAddForm(req, (User) u);
package club.wpia.gigi.pages.account.domain;
import java.io.IOException;
-import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
resp.getWriter().println(getLanguage(req).getTranslation("Access denied"));
return;
}
- new DomainPinglogForm(req, d).output(resp.getWriter(), getLanguage(req), new HashMap<String, Object>());
+ new DomainPinglogForm(req, d).output(resp.getWriter(), getLanguage(req), getDefaultVars(req));
try {
- new PingConfigForm(req, d).output(resp.getWriter(), getLanguage(req), new HashMap<String, Object>());
+ new PingConfigForm(req, d).output(resp.getWriter(), getLanguage(req), getDefaultVars(req));
} catch (GigiApiException e) {
e.format(resp.getWriter(), getLanguage(req));
}
<div class="panel panel-info panel-activatable">
<div class="panel-heading"><input type="checkbox" name="SSLType" value="y"<?=$!ssl?>> <?=_Verify by searching for installed certificate.?></div>
<div class="panel-body">
- <?=_Please list up to four services using your certificate. You need to have one of them up and using a valid SomeCA certificate or a specific self-signed certificate in order to pass this test?>:
+ <?=_Please list up to four services using your certificate. You need to have one of them up and using a valid ${appName} certificate or a specific self-signed certificate in order to pass this test?>:
<?=_The self-signed certificate needs to contain your domain as CN and ${tokenValue} as organization unit.?> <?=_You can use these commands to create such a certificate:?>
<code>
openssl req -newkey rsa:4096 -subj "/CN=<span class='exampleDomain'>example.org</span>/OU=<?=$tokenValue?>" -nodes -out myCSR -keyout myKey<br>
-<p><?=_By joining SomeCA and becoming a member, you agree to the Terms of Service. Please take a moment now to read that and agree to it; this will be required to complete the process of joining.?></p>
+<p><?=_By joining ${appName} and becoming a member, you agree to the Terms of Service. Please take a moment now to read that and agree to it; this will be required to complete the process of joining.?></p>
<p><?=_Warning! This site requires cookies to be enabled to ensure your privacy and security. This site uses session cookies to store temporary values to prevent people from copying and pasting the session ID to someone else exposing their account, personal details and identity theft as a result.?></p>
<p style="border:dotted 1px #900;padding:0.3em;background-color:#ffe;">
<b><?=_Note: Please enter your date of birth and names as they are written in your official documents.?></b><br /><br />
-<?=_Because SomeCA is a certificate authority (CA) people rely on us knowing about the identity of the users of our certificates. So even as we value privacy very much, we need to collect at least some basic information about our members. This is especially the case for everybody who wants to take part in our web of trust.?>
+<?=_Because ${appName} is a certificate authority (CA) people rely on us knowing about the identity of the users of our certificates. So even as we value privacy very much, we need to collect at least some basic information about our members. This is especially the case for everybody who wants to take part in our web of trust.?>
<?=_Your private information will be used for internal procedures only and will not be shared with third parties.?>
</p>
<p style="border:dotted 1px #900;padding:0.3em;background-color:#ffe;">
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import club.wpia.gigi.dbObjects.Verification;
import club.wpia.gigi.dbObjects.User;
+import club.wpia.gigi.dbObjects.Verification;
import club.wpia.gigi.output.template.Form;
import club.wpia.gigi.pages.LoginPage;
import club.wpia.gigi.pages.Page;
<h3><?=_Trusted Third Parties?></h3>
-<p><?=_The Trusted Third Party (TTP) programme is intended to be used in areas without many SomeCA RA Agents.?></p>
+<p><?=_The Trusted Third Party (TTP) programme is intended to be used in areas without many ${appName} RA Agents.?></p>
<p><?=_A Trusted Third Party (TTP) is simply someone in your country that is responsible for witnessing signatures and ID documents. This role is covered by many different titles such as public notary, justice of the peace and so on.?></p>
<p><?=_With the TTP programme you can potentially gain verification up to a maximum of 100 verification points.?></p>
-<p><?=_Currently SomeCA has only developed the TTP programme to the level that you can gain 70 verification points by TTP verification.?></p>
+<p><?=_Currently ${appName} has only developed the TTP programme to the level that you can gain 70 verification points by TTP verification.?></p>
<p><?=_We are working to develop a process that will fill the gap of the missing 30 verification points to allow you to get the maximum 100 verification points.?> </p>
-<p><?=_In the meanwhile you would need to close this gap with face to face verifications with SomeCA RA Agents. Think not only travelling to populated countries, but also remember that RA Agents may occasionally visit your country or area.?></p>
+<p><?=_In the meanwhile you would need to close this gap with face to face verifications with ${appName} RA Agents. Think not only travelling to populated countries, but also remember that RA Agents may occasionally visit your country or area.?></p>
<p><?=_If you are interested in the TTP programme, read !(/ttp/user)the pages!'</a>' for the basic way how the TTP programme works for you, and !(/ttp/country)here!'</a>' whether the TTP programme affects the country where you are located.?> </p>
<? if($ttp) { ?>
-<p><?=_If you want to ask for TTP verifications fill out the missing data to start the process. SomeCA will then inform you about the next steps.?></p>
+<p><?=_If you want to ask for TTP verifications fill out the missing data to start the process. ${appName} will then inform you about the next steps.?></p>
<?=$form?>
<? } ?>
<? if($topup) { ?>
-<p><?=_As you have already got 2 TTP verifications you can only take part in the TTP TOPUP programme. If you want to ask for the TTP TOPUP programme use the submit button to start the process. SomeCA will then inform you about the next steps.?></p>
+<p><?=_As you have already got 2 TTP verifications you can only take part in the TTP TOPUP programme. If you want to ask for the TTP TOPUP programme use the submit button to start the process. ${appName} will then inform you about the next steps.?></p>
<form method="post" action="ttp">
<input type="submit" name="ttptopup" value="<?=_I need a TTP TOPUP?>">
</form>
-<p><?=_We are working to develop the TTP TOPUP process to be able to fill the gap of the missing 30 verification points to 100 verification points. Meanwhile you have to close this gap with face to face verification from SomeCA RA Agent. Think not only traveling to populated countries, but as well to RA Agent visiting your country or area.?></p>
+<p><?=_We are working to develop the TTP TOPUP process to be able to fill the gap of the missing 30 verification points to 100 verification points. Meanwhile you have to close this gap with face to face verification from ${appName} RA Agent. Think not only traveling to populated countries, but as well to RA Agent visiting your country or area.?></p>
<? } ?>
<? if($nothing) { ?>
<p><?=_You may charge a fee for your expenses if the Applicant has been informed of such costs beforehand.?></p>
<p><?=_Liability?></h4>
-<?=_A SomeCA RA Agent who knowingly, or reasonably ought to have known, verifies the identity of an Applicant contrary to the underlying policy may be held liable.?></p>
+<?=_A ${appName} RA Agent who knowingly, or reasonably ought to have known, verifies the identity of an Applicant contrary to the underlying policy may be held liable.?></p>
<h4><?=_Verification Points?></h4>
-<p><?=_SomeCA may, from time to time, alter the amount of Verification Points that a group of RA Agents may assign as is necessary to effect a policy or rule change. We may also alter the amount of Verification Points available to an individual, or new group of RA Agents, should another policy of SomeCA require this.?></p>
+<p><?=_${appName} may, from time to time, alter the amount of Verification Points that a group of RA Agents may assign as is necessary to effect a policy or rule change. We may also alter the amount of Verification Points available to an individual, or new group of RA Agents, should another policy of ${appName} require this.?></p>
import club.wpia.gigi.pages.PasswordResetPage;
import club.wpia.gigi.util.DayDate;
import club.wpia.gigi.util.Notary;
+import club.wpia.gigi.util.ServerConstants;
public class VerificationForm extends Form {
}
if ( !"1".equals(req.getParameter("certify")) || !"1".equals(req.getParameter("rules")) || !"1".equals(req.getParameter("assertion"))) {
- gae.mergeInto(new GigiApiException("You failed to check all boxes to validate" + " your adherence to the rules and policies of SomeCA"));
+ gae.mergeInto(new GigiApiException(SprintfCommand.createSimple("You failed to check all boxes to validate your adherence to the rules and policies of {0}.", ServerConstants.getAppName())));
}
if ("1".equals(req.getParameter("passwordReset"))) {
aword = req.getParameter("passwordResetValue");
<tr><th colspan="2"><?=_Verification Confirmation?></th></tr>
</thead>
<tbody>
-<tr><td colspan="2"><?=_Please check the following details match against what you witnessed when you met ${name} in person. You MUST NOT proceed unless you are sure the details are correct. You may be held responsible by the SomeCA Arbitrator for any issues with this Verification.?>
+<tr><td colspan="2"><?=_Please check the following details match against what you witnessed when you met ${name} in person. You MUST NOT proceed unless you are sure the details are correct. You may be held responsible by the ${appName} Arbitrator for any issues with this Verification.?>
</td></tr>
<? foreach($names) { ?>
<tr>
</tr>
<tr>
<td><input type="checkbox" name="assertion" value="1" required></td>
- <td><?=_I believe that the assertion of identity I am making is correct, complete and verifiable. I have seen original documentation attesting to this identity. I accept that the SomeCA Arbitrator may call upon me to provide evidence in any dispute, and I may be held responsible.?></td>
+ <td><?=_I believe that the assertion of identity I am making is correct, complete and verifiable. I have seen original documentation attesting to this identity. I accept that the ${appName} Arbitrator may call upon me to provide evidence in any dispute, and I may be held responsible.?></td>
</tr>
<tr>
<td><input type="checkbox" name="rules" value="1" required></td>
private static String suffix = "wpia.local";
+ private static String appName = null;
+
public static void init(Properties conf) {
securePort = port = "";
if ( !conf.getProperty("https.port").equals("443")) {
hostnames.put(h, conf.getProperty("name." + h.getConfigName(), h.getHostDefaultPrefix() + "." + suffix));
}
ServerConstants.hostnames = Collections.unmodifiableMap(hostnames);
+ appName = conf.getProperty("appName");
+ if (appName == null) {
+ throw new Error("App name missing");
+ }
}
public static String getHostName(Host h) {
return "quiz-admin@" + getSuffix();
}
+ public static String getAppName() {
+ if (appName == null) {
+ throw new Error("AppName not initialized.");
+ }
+ return appName;
+ }
+
}
mainProps.setProperty("name.static", testProps.getProperty("name.static"));
mainProps.setProperty("name.api", testProps.getProperty("name.api"));
+ mainProps.setProperty("appName", "SomeCA");
+
mainProps.setProperty("https.port", testProps.getProperty("serverPort.https"));
mainProps.setProperty("http.port", testProps.getProperty("serverPort.http"));