add: implement language switch for contract and update contract text
authorINOPIAE <m.maengel@inopiae.de>
Sat, 14 Sep 2019 08:44:54 +0000 (10:44 +0200)
committerINOPIAE <m.maengel@inopiae.de>
Sat, 15 Feb 2020 05:24:58 +0000 (06:24 +0100)
The texts for the contracts are taken from
https://git.ccs-baumann.de/wpia/policies/tree/master/ra_agent_contract
and are maintained there.

Change-Id: I384176bb8d833f0dc74d438c461bf8114bf5a12c

src/club/wpia/gigi/pages/account/MyContracts.java
src/club/wpia/gigi/pages/account/MyContracts.templ
src/club/wpia/gigi/pages/account/MyContractsDE.templ [new file with mode: 0644]
tests/club/wpia/gigi/pages/account/TestContract.java [new file with mode: 0644]

index bf0574b..b2aa53f 100644 (file)
@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse;
 import club.wpia.gigi.dbObjects.Contract;
 import club.wpia.gigi.dbObjects.User;
 import club.wpia.gigi.localisation.Language;
+import club.wpia.gigi.output.template.Template;
 import club.wpia.gigi.pages.LoginPage;
 import club.wpia.gigi.pages.Page;
 
@@ -18,6 +19,8 @@ public class MyContracts extends Page {
 
     public static final String PATH = "/account/contracts";
 
+    private static final Template contractDE = new Template(MyDetailsForm.class.getResource("MyContractsDE.templ"));
+
     public MyContracts() {
         super("My Contracts");
     }
@@ -37,6 +40,12 @@ public class MyContracts extends Page {
             vars.put("csdate", sdf.format(c.getDateSigned()));
         }
 
-        getDefaultTemplate().output(out, getLanguage(req), vars);
+        switch (l.getLocale().toString()) {
+        case "de":
+            contractDE.output(out, getLanguage(req), vars);
+            break;
+        default:
+            getDefaultTemplate().output(out, getLanguage(req), vars);
+        }
     }
 }
index ed1bfe9..c867d09 100644 (file)
@@ -2,17 +2,90 @@
   <div class="panel-heading"><?=_RA Agents Contract?></div>
   <div class="panel-body">
 
-       <p>This contract concludes an agreement between</p>
+<p>This contract concludes an agreement between</p>
+<p>RA Agent: <?=$raname?></p>
+<p>and</p>
+<p>World Privacy and Identity Association (WPIA) - Verein zur Foerderung von sicheren Technologien und Grundrechten im Internet (ZVR: 910115306)</p>
+<p>c/o realraum</p>
+<p>Brockmangasse 15</p>
+<p>8010 Graz</p>
+<p>Austria</p>
+<p>- CA hereafter -</p>
+<p>regarding the conduction of registration authority tasks.</p>
+<p>§ 1 Contract matter 1. The RA Agent is entitled to conduct registration authority tasks as defined on the applicant's request and based on documents presented: * validation of an applicant's identity, and * validation of an applicant's personal data</p>
+<ol start="2" style="list-style-type: decimal">
+<li>The RA Agent is entitled to conduct those tasks on behalf of the CA as long as the RA Agent fulfills the following requirements:
+<ul>
+<li>100 Verification Points,</li>
+<li>passed the RA Agent test,</li>
+<li>agrees the CA's Terms and Conditions,</li>
+<li>agrees the Dispute Resolution system, and</li>
+<li>signed this contract.</li>
+</ul></li>
+<li><p>The parties agree, that this contract does not establish an employment relationship.</p></li>
+<li><p>This contract starts on the day it is signed and is valid until it is terminated by either side with a notification period of fourteen (14) days.</p></li>
+</ol>
+<p>§ 2 Terms and Definitions</p>
+<table>
+<colgroup>
+<col width="26%" />
+<col width="73%" />
+</colgroup>
+<thead>
+<tr class="header">
+<th>Term</th>
+<th>Definition</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td><p>Applicant</p></td>
+<td><p>Person who has an account on the systems of CA and requests to get the identity verified</p></td>
+</tr>
+<tr class="even">
+<td><p>Certificate Authority (CA)</p></td>
+<td><p>Certificate Authority who issues S/MIME certificates to individuals and organisations</p></td>
+</tr>
+<tr class="odd">
+<td><p>RA Agent</p></td>
+<td><p>Person who conducts a identity verification on behalf of the CA</p></td>
+</tr>
+<tr class="even">
+<td><p>Registration Authority (RA)</p></td>
+<td><p>Registration Authority who controls the correct entries of an applicant</p></td>
+</tr>
+<tr class="odd">
+<td><p>Verification</p></td>
+<td><p>Process to verify the identity of person</p></td>
+</tr>
+<tr class="even">
+<td><p>Verification Points</p></td>
+<td><p>Points issued during the verification</p></td>
+</tr>
+</tbody>
+</table>
+<p>§ 3 Rights and Obligations of the RA Agent</p>
+<ol style="list-style-type: decimal">
+<li><p>The RA Agent conducts the transferred duties independently according to the <a href="https://policy.wpia.club/policies/verification_policy.html">Verification Policy</a>, i.e. free of instructions other than essential for the proper execution of the transferred tasks.</p></li>
+<li><p>The RA Agent is entitled to use the brand and logo of the CA for her work as RA Agent based on this contract.</p></li>
+<li><p>The RA Agent MUST identify herself to an Applicant as RA Agent with the RA Agent Card provided by the CA.</p></li>
+<li><p>The RA Agent MUST NOT engage another person to do verifications on her behalf.</p></li>
+<li><p>The RA Agent MUST NOT verify applicants that are spouses or life partners and first-degree relatives (next of kin).</p></li>
+<li><p>All data collected and processed during the work as RA Auditor are object to strict confidentiality. They SHOULD NOT shared with others than those parties entitled by the CA and MUST be kept in accordance to their confidentiality.</p></li>
+<li><p>The RA Agent is bound to the latest version of the data protection policy of the CA, in all regards of processing personal data of applicants. Personal data collected, used, and processed are titles, full names, date of birth, and email address of an applicant. The RA Agent is not allowed to transfer personal data to other entities than the CA, unless required to do so by the European Union or Member State law to which the RA Agent is subject to. In such a case, the RA Agent MUST to inform the CA of this legal requirement and the type of data transferred, unless that a law prohibits such information on important ground of public interest.</p></li>
+</ol>
+<p>§ 4 Payment and Fees</p>
+<ol style="list-style-type: decimal">
+<li><p>The RA Agent operates free of charge for the CA. This implies that the action is voluntary, honorary and unpaid without any liability to take an action and for the CA no obligation to register social security and labour legislation related data.</p></li>
+<li><p>The RA agent is entitled to request reimbursement of travel expenses or other costs if this has been previously agreed with the applicant.</p></li>
+</ol>
+<p>§ 5 Dispute Resolution</p>
+<p>Every dispute between the RA Agent and an applicant or the RA Agent and the CA MUST be filed to the CA's dispute resolution forum (arbitration). Each party is bound to the ruling of this forum.</p>
+<p>§ 6 Termination</p>
+<p>On termination of this contract all data that is older than thirty nine (39) months MUST be deleted in a secure manner. Data younger than thirty nine (39) months MUST be collected and made available to the CA unless otherwise requested by the CA. The RA Agent is accountable for the deletion or the handover to the CA.</p>
+<p>§ 7 Subsidiary agreements</p>
+<p>Subsidiary or deviating agreements and amendments to the contract MUST be in written form.</p>
 
-       <p>Name: <?=$raname?> - RA Agent hereafter -</p>
+       <p><?=_Signed?> <?=$csdate?></p>
 
-       <p>and</p>
-
-       <p>SomeCA - CA hereafter -</p>
-       <p>SomeAddress</p>
-
-       <p>regarding the conduction of registration authority tasks.</p>
-
-       <p>signed <?=$csdate?></p>
-  </div>
 </div>
diff --git a/src/club/wpia/gigi/pages/account/MyContractsDE.templ b/src/club/wpia/gigi/pages/account/MyContractsDE.templ
new file mode 100644 (file)
index 0000000..b0fff31
--- /dev/null
@@ -0,0 +1,92 @@
+<div class="panel panel-default">
+  <div class="panel-heading"><?=_RA Agents Contract?></div>
+  <div class="panel-body">
+
+    <p>Dieser Vertrag schließt eine Vereinbarung zwischen</p>
+    <p>RA Agent: <?=$raname?></p>
+    <p>und</p>
+    <p>World Privacy and Identity Association (WPIA) - Verein zur Förderung von sicheren Technologien und Grundrechten im Internet (ZVR: 910115306)</p>
+    <p>c/o realraum</p>
+    <p>Brockmangasse 15</p>
+    <p>8010 Graz</p>
+    <p>Austria</p>
+    <p>- folgend CA -</p>
+    <p>für die Durchführung von &quot;Registration Authority&quot;-Aufgaben.</p>
+    <p>§ 1 Vertragsgegenstand</p>
+    <ol style="list-style-type: decimal">
+      <li>Der RA Agent ist ermächtigt &quot;Registration Authority&quot;-Aufgaben, wie folgend aufgeführt, auf Antrag des Applicant und der vorgelegten Dokumente durchzuführen:
+        <ul>
+          <li>Validierung der Identität des Applicant</li>
+          <li>Validierung der persönlichen Daten des Applicant</li>
+        </ul></li>
+      <li>Der RA Agent ist ermächtig diese Aufgaben im Auftrag der CA auszuführen sofern die folgenden Voraussetzungen erfüllt sind:
+        <ul>
+          <li>100 Verification Points</li>
+          <li>bestandener RA Agent Test</li>
+          <li>Zustimmung zu den &quot;Terms and Condition&quot; der CA</li>
+          <li>Zustimmung zum Schiedsgerichtswesen</li>
+          <li>Unterschrift für diesen Vertrag</li>
+        </ul></li>
+      <li><p>Die Parteien vereinbaren, dass aus diesem Vertrag keine Anstellungsverhältnis entsteht.</p></li>
+      <li><p>Dieser Vertrag beginnt mit dem Tag der Unterzeichnung und endet mit der Terminierung von jeder Seite mit einer Frist von vierzehn (14) Tagen nach Ankündigung.</p></li>
+    </ol>
+    <p>§ 2 Begriffe und Definitionen</p>
+    <table>
+    <colgroup>
+    <col width="26%" />
+    <col width="73%" />
+    </colgroup>
+    <thead>
+      <tr class="header">
+        <th>Begriffe</th>
+        <th>Definition</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="odd">
+        <td><p>Applicant</p></td>
+        <td><p>Person die ein Konto bei der CA hat und ihre Identität verifiziert haben möchte.</p></td>
+      </tr>
+<tr class="even">
+<td><p>Certificate Authority (CA)</p></td>
+<td><p>Certificate Authority, die S/MIME Zertifikate für Personen und Organisationen austellt.</p></td>
+</tr>
+<tr class="odd">
+<td><p>RA Agent Registration Authority (RA)</p></td>
+<td><p>Person, die Verifications im Auftrag der CA durchführt. Registration Authority, die die Richtigkeit der Einträge eines Applicant sicherstellt.</p></td>
+</tr>
+<tr class="even">
+<td><p>Verification</p></td>
+<td><p>Prozess die Identität einer Person festzustellen.</p></td>
+</tr>
+<tr class="odd">
+<td><p>Verification Points</p></td>
+<td><p>Punkte die während der verification vergeben werden.</p></td>
+</tr>
+</tbody>
+</table>
+<p>§ 3 Rechte und Pflichten des RA Agent</p>
+<ol style="list-style-type: decimal">
+<li><p>Der RA Agent führt die auferlegten Pflichten gemäß der <a href="https://policy.wpia.club/policies/verification_policy.html">Verification Policy</a> unabhängig durch, z.B. frei von Vorgaben anderer unter Berücksichtigung der ordnungsgemäßen Durchführung der Aufgaben.</p></li>
+<li><p>Der RA Agent ist ermächtigt, die Marke und das Logo der CA für die Arbeit als RA Agent im Rahmen dieses Vertrages zu nutzen.</p></li>
+<li><p>Der RA Agent muss (MUST) sich gegenüber dem Applicant als RA Agent mit seiner von der CA zur Verfügung gestellten RA Agent Card ausweisen.</p></li>
+<li><p>Der RA Agent darf nicht (MUST NOT) andere Personen auffordern die Verification an seiner statt durchzuführen.</p></li>
+<li><p>Der RA Agent darf nicht (MUST NOT) Ehe- und Lebenspartner und Verwandte ersten Grades als Applicant verifizieren.</p></li>
+<li><p>Alle Informationen, die während der Arbeit als RA Agent gesammelt werden, sind als vertraulich zu behandeln. Diese sollten nicht (SHOULD NOT) an Dritte außer den von der CA bestimmten weitergeleitet werden und müssen (MUST) entsprechend gesichert aufbewahrt werden.</p></li>
+<li><p>Der RA Agent ist an die aktuell gültige Version der Datenschutzrichtlinie der CA in allen Belangen der Verarbeitung der Daten des Applicant gebunden. Die gesammelten und zu verarbeitenden personenbezogenen Daten sind Titel, voller Namen, Geburtsdatum und E-Mail-Adresse des Applicant. Der RA Agent ist nicht ermächtigt, personenbezogenen Daten an Dritte außer der CA weiterzuleiten es sei den das Recht der Europäischen Union oder des Landes des RA Agent verlangt dieses. In diesem Fall muss (MUST) der RA Agent die CA über den Vorfall mit Angabe der Begründung und der übergebenen Daten melden, es sei denn ein Gesetz verbietet die Offenlegung auf Grund von gesteigerten öffentlichen Interesses.</p></li>
+</ol>
+<p>§ 4 Bezahlung und Gebühren</p>
+<ol style="list-style-type: decimal">
+<li><p>Der RA Agent arbeitet ohne Bezahlung durch die CA. Dies bedeutet, dass es sich bei dieser Tätigkeit um eine freiwillige, ehrenamtliche und unentgeltliche Tätigkeit ohne jede Arbeitsleistungsverpflichtung handelt, und seitens der CA keinerlei sozialversicherungs- und arbeitsrechtliche Meldepflichten bestehen.</p></li>
+<li><p>Der RA Agent darf Reise- oder ähnliche Kosten dem Applicant in Rechnung stellen, sofern dies im Vorfeld vereinbart wird.</p></li>
+</ol>
+<p>§ 5 Schiedsgerichtsbarkeit</p>
+<p>Jede Unstimmigkeit zwischen dem RA Agent und dem Applicant oder dem RA Agent und der CA muss (MUST) bei dem Schiedsgericht der CA eingreicht werden. Jede Partei ist an den Schiedspruch gebunden.</p>
+<p>§ 6 Vertragsbeendigung</p>
+<p>Mit Vertragsbeendigung dieses Vertrages sind (MUST) alle Daten älter als neununddreißig (39) Monate zu vernichten. Daten jünger als neununddreißig (39) Monate müssen gesammelt und der CA zukommen gelassen werden, es sei denn anders von der CA bestimmt. Der RA Agent ist dafür verantwortlich, dass die Daten entsprechend vernichtet oder an die CA weitergereicht werden.</p>
+<p>§ 7 Zusätzliche Bestimmungen</p>
+<p>Zusätzliche oder abweichende Bestimmungen oder Vereinbarungen benötigen (MUST) die Schriftform.</p>
+
+       <p><?=_Signed?> <?=$csdate?></p>
+
+</div>
diff --git a/tests/club/wpia/gigi/pages/account/TestContract.java b/tests/club/wpia/gigi/pages/account/TestContract.java
new file mode 100644 (file)
index 0000000..4628ec8
--- /dev/null
@@ -0,0 +1,55 @@
+package club.wpia.gigi.pages.account;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.MatcherAssert.*;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.junit.Test;
+
+import club.wpia.gigi.testUtils.ClientTest;
+import club.wpia.gigi.testUtils.IOUtils;
+
+public class TestContract extends ClientTest {
+
+    @Test
+    public void TestContractSignRevoke() throws IOException {
+        // empty contract
+        String res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("This contract concludes an agreement between"));
+        assertThat(res, containsString("not yet"));
+
+        // sign contract
+        executeBasicWebInteraction(cookie, MyDetails.PATH, "action=signContract", 0);
+        getMailReceiver().receive(u.getEmail());
+        res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("This contract concludes an agreement between"));
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        assertThat(res, containsString(sdf.format(new Date())));
+
+        // sign contract
+        executeBasicWebInteraction(cookie, MyDetails.PATH, "action=revokeContract", 0);
+        getMailReceiver().receive(u.getEmail());
+        res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("This contract concludes an agreement between"));
+        assertThat(res, containsString("not yet"));
+    }
+
+    @Test
+    public void TestLanguageSwitch() throws IOException {
+
+        String res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("This contract concludes an agreement between"));
+        // switch to German
+        executeBasicWebInteraction(cookie, MyDetails.PATH, "lang=de", 0);
+        res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("Dieser Vertrag schließt eine Vereinbarung zwischen"));
+        // switch to Turkish, should return default language English
+        executeBasicWebInteraction(cookie, MyDetails.PATH, "lang=tr", 0);
+        res = IOUtils.readURL(get(MyContracts.PATH));
+        assertThat(res, containsString("This contract concludes an agreement between"));
+    }
+
+}