diff --git a/account-gui/docker/conf/000-default.conf b/account-gui/docker/conf/000-default.conf
index 10b2242f..cd3e502c 100644
--- a/account-gui/docker/conf/000-default.conf
+++ b/account-gui/docker/conf/000-default.conf
@@ -16,6 +16,7 @@ RewriteCond %{REQUEST_URI} !^/api/remote-creation
RewriteCond %{REQUEST_URI} !^/tiqr
RewriteCond %{REQUEST_URI} !^/config
RewriteCond %{REQUEST_URI} !^/register
+RewriteCond %{REQUEST_URI} !^/servicedesk
RewriteCond %{REQUEST_URI} !^/doLogin
RewriteCond %{REQUEST_URI} !^/doLogout
RewriteCond %{REQUEST_URI} !^/create-from-institution-login
@@ -47,6 +48,7 @@ ProxyPass /robots.txt http://myconextserver:8080/robots.txt
ProxyPass /internal http://myconextserver:8080/internal
ProxyPass /config http://myconextserver:8080/config
ProxyPass /register http://myconextserver:8080/register
+ProxyPass /servicedesk http://myconextserver:8080/servicedesk
ProxyPass /doLogin http://myconextserver:8080/doLogin
ProxyPass /doLogout http://myconextserver:8080/doLogout
ProxyPass /create-from-institution-login http://myconextserver:8080/create-from-institution-login
diff --git a/account-gui/public/styles.css b/account-gui/public/styles.css
index a14b6155..6ca3db96 100644
--- a/account-gui/public/styles.css
+++ b/account-gui/public/styles.css
@@ -124,7 +124,7 @@ h1 {
h2 {
font-size: 24px;
line-height: 34px;
- font-weight: 700;
+ font-weight: 600;
}
h2.green {
diff --git a/account-gui/src/locale/en.js b/account-gui/src/locale/en.js
index 27717cf6..087864f6 100644
--- a/account-gui/src/locale/en.js
+++ b/account-gui/src/locale/en.js
@@ -389,6 +389,7 @@ I18n.translations.en = {
verifyEuropeanId: "Verify with a European ID",
supportEuropean: "We support the majority of National digital IDs",
useEuropean: "Use a European ID",
+ cantUse: "I can't use any of the above methods",
help: "If you can't use any of the these methods, please visit our support pages "
},
bank: {
@@ -412,5 +413,15 @@ I18n.translations.en = {
idin: "Idin",
studielink: "Studielink"
}
+ },
+ serviceDesk: {
+ confirmIdentityHeader: "You need to manually confirm your identity",
+ confirmIdentity: "You must confirm your identity at one of our eduID Service Desks.",
+ stepsHeader: "Follow these steps:",
+ step1: "Enter your full name as it appears on your ID (first and last name).",
+ step2: "Generate a personal verification code.",
+ step3: "Present your code and ID to an eduID Service Desk. They will verify your identity manually.",
+ redirectWarning: "We will redirect you to another website to enter your name. You won’t be able to log in to {{service}} immediately afterward; you will first need to contact a eduID Service Desk.",
+ next: "Open website to enter your name"
}
};
diff --git a/account-gui/src/locale/nl.js b/account-gui/src/locale/nl.js
index 7b1c1dc0..73d2bfdf 100644
--- a/account-gui/src/locale/nl.js
+++ b/account-gui/src/locale/nl.js
@@ -388,8 +388,9 @@ I18n.translations.nl = {
verifyBank: "Verifïeer met een Nederlandse ban app",
selectBank: "Selecteer je bank",
verifyEuropeanId: "Verifïeer met een Europses ID",
- supportEuropean: "We ondersteunen de meederhead van de de nationalie digitale ID's",
+ supportEuropean: "We ondersteunen de meederheid van de de nationalie digitale ID's",
useEuropean: "gebruik een Europese ID",
+ cantUse: "Ik kan geen van bovenstaande manieren gebruiken",
help: "Als je geen van deze opties kan gebruiken, bezoek dan onze support pagina's "
},
bank: {
@@ -412,5 +413,15 @@ I18n.translations.nl = {
idin: "Idin",
studielink: "Studielink"
}
+ },
+ serviceDesk: {
+ confirmIdentityHeader: "Bevestig wie je bent met je identiteitsbewijs",
+ confirmIdentity: "Je kunt je identiteit ook bevestigen via een van onze eduID Service Desks.",
+ stepsHeader: "Volg deze stappen:",
+ step1: "Vul je volledige naam in zoals die op je identiteitsbewijs staat (voornamen en achternaam).",
+ step2: "Genereer een persoonlijke controlecode.",
+ step3: "Laat je controlecode en identiteitsbewijs zien aan een eduID Service Desk. Die bevestigt zo je identiteit.",
+ redirectWarning: "We sturen je door naar een andere website om je naam in te vullen. Je kunt daarna nog niet gelijk inloggen bij {{service}} , maar je moet eerst contact opnemen met een eduID Service Desk.",
+ next: "Naar gegevens invullen"
}
};
diff --git a/account-gui/src/routes/Stepup.svelte b/account-gui/src/routes/Stepup.svelte
index 0b9810be..f8c18dcd 100644
--- a/account-gui/src/routes/Stepup.svelte
+++ b/account-gui/src/routes/Stepup.svelte
@@ -86,19 +86,22 @@
{/if}
- {#if !showChooseOptions}
+ {#if showChooseOptions}
+
+ {:else}
{I18n.t("stepup.header")}
{@html I18n.t("stepup.info", {name: DOMPurify.sanitize(serviceName)})}
proceed(false)}
className="full"
label={I18n.t("stepup.link")}/>
- {:else}
-
{/if}
diff --git a/account-gui/src/stores/conf.js b/account-gui/src/stores/conf.js
index 1fa37e07..debb1d19 100644
--- a/account-gui/src/stores/conf.js
+++ b/account-gui/src/stores/conf.js
@@ -1,6 +1,7 @@
import {writable} from 'svelte/store';
export const conf = writable({
+ basePath: "",
magicLinkUrl: "",
continueAfterLoginUrl: "",
domain: "",
diff --git a/account-gui/src/verify/ServiceDesk.svelte b/account-gui/src/verify/ServiceDesk.svelte
new file mode 100644
index 00000000..92fbf352
--- /dev/null
+++ b/account-gui/src/verify/ServiceDesk.svelte
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
{I18n.t("serviceDesk.confirmIdentity")}
+
{I18n.t("serviceDesk.stepsHeader")}
+
+ {I18n.t("serviceDesk.step1")}
+ {I18n.t("serviceDesk.step2")}
+ {I18n.t("serviceDesk.step3")}
+
+
+ {@html alertSvg}
+ {@html I18n.t("serviceDesk.redirectWarning", {service: serviceName})}
+
+
proceed()}/>
+
+
+
diff --git a/account-gui/src/verify/VerifyChoice.svelte b/account-gui/src/verify/VerifyChoice.svelte
index 81685336..7e436094 100644
--- a/account-gui/src/verify/VerifyChoice.svelte
+++ b/account-gui/src/verify/VerifyChoice.svelte
@@ -10,16 +10,20 @@
import {logo} from "./banks";
import alertSvg from "../icons/alert-circle.svg?raw";
import Spinner from "../components/Spinner.svelte";
+ import ServiceDesk from "./ServiceDesk.svelte";
+ export let id;
export let addInstitution;
export let addBank;
export let addEuropean;
export let issuers = [];
export let showInstitutionOption = true;
+ export let serviceName;
let showOtherOptions = false;
let showBankOptions = false;
let busyProcessing = false;
+ let showServiceDesk = false;
const proceed = action => {
busyProcessing = true;
@@ -105,6 +109,7 @@
display: flex;
padding: 15px;
cursor: pointer;
+ text-align: center;
&:hover {
background-color: var(--color-background);
@@ -157,23 +162,23 @@
{/if}
- {#if (!showBankOptions || busyProcessing)}
+ {#if !showServiceDesk && (!showBankOptions || busyProcessing)}
{#if showInstitutionOption}
-
-
-
{I18n.t("verify.modal.info.educationalInstitution")}
- {@html studentIcon}
-
-
{/if}
{#if !showOtherOptions && showInstitutionOption}
showOtherOptions = !showOtherOptions}>
@@ -213,12 +218,12 @@
onClick={() => proceed(addEuropean)}/>
-
- {@html I18n.t("verify.modal.info.help")}
+
showServiceDesk = !showServiceDesk}>
+
{I18n.t("verify.modal.info.cantUse")}
{/if}
{/if}
- {#if showBankOptions && !busyProcessing}
+ {#if showBankOptions && !busyProcessing && !showServiceDesk}
{/if}
-{#if showBankOptions && !busyProcessing}
+{#if showBankOptions && !busyProcessing && !showServiceDesk}
{@html alertSvg}
{I18n.t("verify.modal.bank.anotherMethodPrefix")}
@@ -248,3 +253,10 @@
{/if}
+{#if !busyProcessing && showServiceDesk}
+
showServiceDesk = false}
+ />
+{/if}
+
diff --git a/myconext-gui/public/styles.css b/myconext-gui/public/styles.css
index 9de1f605..bbfa9024 100644
--- a/myconext-gui/public/styles.css
+++ b/myconext-gui/public/styles.css
@@ -160,3 +160,7 @@ table {
}
}
+
+strong {
+ font-weight: 600;
+}
diff --git a/myconext-gui/src/components/Button.svelte b/myconext-gui/src/components/Button.svelte
index bf1e8d77..5e58df0d 100644
--- a/myconext-gui/src/components/Button.svelte
+++ b/myconext-gui/src/components/Button.svelte
@@ -18,6 +18,7 @@
export let icon = undefined;
export let custom = false;
export let inline = undefined;
+ export let fullSize = false;
const handleLinkClick = e => e.key === " " && e.target.click();
@@ -119,6 +120,12 @@
width: 240px;
padding: 8px 0;
}
+ .button.full-size {
+ min-width: 100%;
+ max-width: 100%;
+ width: 100%;
+ padding: 8px 0;
+ }
.button.icon {
padding: 10px 20px 10px 24px;
@@ -233,6 +240,7 @@
class:custom={custom}
class:large={large}
class:larger={larger}
+ class:full-size={fullSize}
class:disabled={disabled}
on:click|preventDefault|stopPropagation={() => !disabled && onClick()}
on:keydown={handleLinkClick}>
diff --git a/myconext-gui/src/components/Footer.svelte b/myconext-gui/src/components/Footer.svelte
index f3e07087..d5e037e2 100644
--- a/myconext-gui/src/components/Footer.svelte
+++ b/myconext-gui/src/components/Footer.svelte
@@ -98,7 +98,7 @@
}
li.active a {
- font-weight: bold;
+ font-weight: 600;
color: black;
cursor: not-allowed;
}
diff --git a/myconext-gui/src/components/LoginOption.svelte b/myconext-gui/src/components/LoginOption.svelte
index d5414df5..33974967 100644
--- a/myconext-gui/src/components/LoginOption.svelte
+++ b/myconext-gui/src/components/LoginOption.svelte
@@ -51,7 +51,7 @@
}
span.has-sub-label {
- font-weight: bold;
+ font-weight: 600;
}
span.login-icon {
diff --git a/myconext-gui/src/components/SecurityOption.svelte b/myconext-gui/src/components/SecurityOption.svelte
index df340891..704db210 100644
--- a/myconext-gui/src/components/SecurityOption.svelte
+++ b/myconext-gui/src/components/SecurityOption.svelte
@@ -56,7 +56,7 @@
}
.login-info p {
- font-weight: bold;
+ font-weight: 600;
font-size: 18px;
color: var(--color-secondary-grey);
&.active {
diff --git a/myconext-gui/src/icons/alert-triangle.svg b/myconext-gui/src/icons/alert-triangle.svg
new file mode 100644
index 00000000..0d01d2e0
--- /dev/null
+++ b/myconext-gui/src/icons/alert-triangle.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/myconext-gui/src/icons/verify/idCard.svg b/myconext-gui/src/icons/verify/idCard.svg
new file mode 100644
index 00000000..4354933a
--- /dev/null
+++ b/myconext-gui/src/icons/verify/idCard.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/myconext-gui/src/locale/en.js b/myconext-gui/src/locale/en.js
index 77647f72..c27f3289 100644
--- a/myconext-gui/src/locale/en.js
+++ b/myconext-gui/src/locale/en.js
@@ -562,6 +562,7 @@ I18n.translations.en = {
verifyEuropeanId: "Verify with a European ID",
supportEuropean: "We accept the ID's of Austria, Belgium, Croatia, Czech Republic, Denmark, Estonia, Germany, Italy, Latvia, Liechtenstein, Lithuania, Luxembourg, Malta, Poland, Portugal, Slovakia, Slovenia, Spain and Sweden.",
useEuropean: "Use a European ID",
+ cantUse: "I can't use any of the above methods",
help: "If you can't use any of the these methods, please visit our support pages "
},
bank: {
@@ -576,6 +577,44 @@ I18n.translations.en = {
eherkenning: "eIDAS",
idin: "Idin",
studielink: "Studielink"
+ },
+ serviceDesk: {
+ confirmIdentityHeader: "You need to manually confirm your identity",
+ confirmIdentity: "You can also confirm your identity at one of our eduID Service Desks.",
+ stepsHeader: "Follow these steps:",
+ step1: "Enter your full name as it appears on your ID (first and last name).",
+ step2: "Generate a personal verification code.",
+ step3: "Present your code and ID to an eduID Service Desk. They will verify your identity manually.",
+ acceptedIds: "Accepted IDs:",
+ passports: "Passports",
+ eea: "EEA* ID cards",
+ driverLicense: "Dutch driver's license",
+ residencePermit: "Dutch residence permits",
+ note: "Please note: copies, public transport passes and student cards are not valid ID's",
+ eeaNote: "* EEA: all EU member states plus Liechtenstein, Norway and Iceland",
+ next: "Enter your details",
+ idCard: {
+ information: "Vul je gegevens in zoals die op je identiteitsbewijs staan.",
+ lastName: "Achternaam",
+ firstName: "Voornamen",
+ dateOfBirth: "Geboortedatum",
+ generateControlCode: "Genereer controlcode"
+ },
+ controlCode: {
+ yourControlCode: "Je controlecode",
+ info: "Je krijgt ook een e-mail met deze code. De code is 14 dagen geldig en is bedoeld voor:",
+ typoPrefix: "Typfout gemaakt? ",
+ typoLink: "Pas gegevens aan",
+ todo: "Wat moet je nu doen?",
+ todoDetails: "Maak een afspraak met een eduID Service Desk (digitaal of op locatie). Laat tijdens je afspraak je controlecode en identiteisbewijs zien.",
+ serviceDesks: "Bekijk eduID Service Desks",
+ serviceDesksLocations: "https://wiki.surfnet.nl/display/EDUID/eduID+Service+Desk",
+ back: "Terug naar overzicht",
+ rethink: "Wil je toch op een andere manier bewijzen wie je bent? Verwijder dan eerst je controlecode.",
+ deleteControlCode: "Verwijder controlecode",
+ banner: "Bevestig je identiteit bij een eduID Service Desk. Dit doe je door je identiteitsbewijs en controlecode te laten zien.",
+ showCode: "Toon code"
+ }
}
}
};
diff --git a/myconext-gui/src/locale/nl.js b/myconext-gui/src/locale/nl.js
index 692d1bd0..b3bb593a 100644
--- a/myconext-gui/src/locale/nl.js
+++ b/myconext-gui/src/locale/nl.js
@@ -565,6 +565,7 @@ I18n.translations.nl = {
verifyEuropeanId: "Verifieer met een Europees ID",
supportEuropean: "Dit kan met de inlogmiddelen van België, Denemarken, Duitsland, Estland, Italië, Kroatië, Litouwen, Letland, Liechtenstein, Luxemburg, Malta, Oostenrijk, Polen, Portugal, Slowakije, Slovenië, Spanje, Tsjechië en Zweden",
useEuropean: "Selecteer een Europees ID",
+ cantUse: "Ik kan geen van bovenstaande manieren gebruiken",
help: "Kun je deze opties niet gebruiken, bezoek dan onze support pagina's "
},
bank: {
@@ -579,6 +580,44 @@ I18n.translations.nl = {
eherkenning: "eIDAS",
idin: "Idin",
studielink: "Studielink"
+ },
+ serviceDesk: {
+ confirmIdentityHeader: "Bevestig wie je bent met je identiteitsbewijs",
+ confirmIdentity: "Je kunt je identiteit ook bevestigen via een van onze eduID Service Desks.",
+ stepsHeader: "Volg deze stappen:",
+ step1: "Vul je volledige naam in zoals die op je identiteitsbewijs staat (voornamen en achternaam).",
+ step2: "Genereer een persoonlijke controlecode.",
+ step3: "Laat je controlecode en identiteitsbewijs zien aan een eduID Service Desk. Die bevestigt zo je identiteit.",
+ acceptedIds: "Geldige identiteitsbewijzen:",
+ passports: "paspoorten",
+ eea: "EEA* ID-kaarten",
+ driverLicense: "Nederlandse rijbewijzen",
+ residencePermit: "Nederlandse verblijfsvergunningen",
+ note: "Let op: kopieën, OV-kaarten en studentenkaarten zijn geen geldige identiteitsbewijzen.",
+ eeaNote: "* EEA: alle EU-lidstaten + Liechtenstein, Noorwegen en IJsland.",
+ next: "Naar gegevens invullen"
+ },
+ idCard: {
+ information: "Vul je gegevens in zoals die op je identiteitsbewijs staan.",
+ lastName: "Achternaam",
+ firstName: "Voornamen",
+ dateOfBirth: "Geboortedatum",
+ generateControlCode: "Genereer controlcode"
+ },
+ controlCode: {
+ yourControlCode: "Je controlecode",
+ info: "Je krijgt ook een e-mail met deze code. De code is 14 dagen geldig en is bedoeld voor:",
+ typoPrefix: "Typfout gemaakt? ",
+ typoLink: "Pas gegevens aan",
+ todo: "Wat moet je nu doen?",
+ todoDetails: "Maak een afspraak met een eduID Service Desk (digitaal of op locatie). Laat tijdens je afspraak je controlecode en identiteisbewijs zien.",
+ serviceDesks: "Bekijk eduID Service Desks",
+ serviceDesksLocations: "https://wiki.surfnet.nl/display/EDUID/eduID+Service+Desk",
+ back: "Terug naar overzicht",
+ rethink: "Wil je toch op een andere manier bewijzen wie je bent? Verwijder dan eerst je controlecode.",
+ deleteControlCode: "Verwijder controlecode",
+ banner: "Bevestig je identiteit bij een eduID Service Desk. Dit doe je door je identiteitsbewijs en controlecode te laten zien.",
+ showCode: "Toon code"
}
}
};
diff --git a/myconext-gui/src/routes/Account.svelte b/myconext-gui/src/routes/Account.svelte
index af170bf7..f2e35b16 100644
--- a/myconext-gui/src/routes/Account.svelte
+++ b/myconext-gui/src/routes/Account.svelte
@@ -51,7 +51,7 @@
&.value {
width: 65%;
- font-weight: bold;
+ font-weight: 600;
}
}
}
diff --git a/myconext-gui/src/routes/AttributeMissing.svelte b/myconext-gui/src/routes/AttributeMissing.svelte
index acb5216a..7f6450a7 100644
--- a/myconext-gui/src/routes/AttributeMissing.svelte
+++ b/myconext-gui/src/routes/AttributeMissing.svelte
@@ -49,7 +49,7 @@
h1 {
color: var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
margin: 22px 0;
}
diff --git a/myconext-gui/src/routes/BackupCodes.svelte b/myconext-gui/src/routes/BackupCodes.svelte
index 2a9c0b79..a8ddc1ba 100644
--- a/myconext-gui/src/routes/BackupCodes.svelte
+++ b/myconext-gui/src/routes/BackupCodes.svelte
@@ -66,7 +66,7 @@
td.value {
width: 57%;
- font-weight: bold;
+ font-weight: 600;
}
}
}
diff --git a/myconext-gui/src/routes/Credential.svelte b/myconext-gui/src/routes/Credential.svelte
index e40930da..54d5412e 100644
--- a/myconext-gui/src/routes/Credential.svelte
+++ b/myconext-gui/src/routes/Credential.svelte
@@ -75,7 +75,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/DataActivity.svelte b/myconext-gui/src/routes/DataActivity.svelte
index c88c2b8c..099ec76a 100644
--- a/myconext-gui/src/routes/DataActivity.svelte
+++ b/myconext-gui/src/routes/DataActivity.svelte
@@ -143,7 +143,7 @@
}
&.value {
- font-weight: bold;
+ font-weight: 600;
}
&.logo {
diff --git a/myconext-gui/src/routes/DeleteAccount.svelte b/myconext-gui/src/routes/DeleteAccount.svelte
index 917905a5..dddbd4d6 100644
--- a/myconext-gui/src/routes/DeleteAccount.svelte
+++ b/myconext-gui/src/routes/DeleteAccount.svelte
@@ -73,7 +73,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/EditEmail.svelte b/myconext-gui/src/routes/EditEmail.svelte
index b69b04ba..d21223b5 100644
--- a/myconext-gui/src/routes/EditEmail.svelte
+++ b/myconext-gui/src/routes/EditEmail.svelte
@@ -55,7 +55,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/EditName.svelte b/myconext-gui/src/routes/EditName.svelte
index 1480bb6e..5ec0d33d 100644
--- a/myconext-gui/src/routes/EditName.svelte
+++ b/myconext-gui/src/routes/EditName.svelte
@@ -44,7 +44,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/EppnAlreadyLinked.svelte b/myconext-gui/src/routes/EppnAlreadyLinked.svelte
index b0f27849..edb1fe3e 100644
--- a/myconext-gui/src/routes/EppnAlreadyLinked.svelte
+++ b/myconext-gui/src/routes/EppnAlreadyLinked.svelte
@@ -51,7 +51,7 @@
h1 {
color: var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
margin: 22px 0;
}
diff --git a/myconext-gui/src/routes/Expired.svelte b/myconext-gui/src/routes/Expired.svelte
index ff81d874..3c969c43 100644
--- a/myconext-gui/src/routes/Expired.svelte
+++ b/myconext-gui/src/routes/Expired.svelte
@@ -11,7 +11,7 @@
margin: 16px 0;
color: var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
}
diff --git a/myconext-gui/src/routes/ExternalAccountLinkedError.svelte b/myconext-gui/src/routes/ExternalAccountLinkedError.svelte
index ba87b31b..078dfe2e 100644
--- a/myconext-gui/src/routes/ExternalAccountLinkedError.svelte
+++ b/myconext-gui/src/routes/ExternalAccountLinkedError.svelte
@@ -29,7 +29,7 @@
h1 {
color: var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
margin: 22px 0;
}
diff --git a/myconext-gui/src/routes/NotFound.svelte b/myconext-gui/src/routes/NotFound.svelte
index 76a78e1a..0bfff999 100644
--- a/myconext-gui/src/routes/NotFound.svelte
+++ b/myconext-gui/src/routes/NotFound.svelte
@@ -13,7 +13,7 @@
h1 {
color:var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
margin: 40px 0;
}
diff --git a/myconext-gui/src/routes/Password.svelte b/myconext-gui/src/routes/Password.svelte
index 31ac96e6..a8e2a698 100644
--- a/myconext-gui/src/routes/Password.svelte
+++ b/myconext-gui/src/routes/Password.svelte
@@ -108,7 +108,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/PersonalInfo.svelte b/myconext-gui/src/routes/PersonalInfo.svelte
index f8a11063..3608d034 100644
--- a/myconext-gui/src/routes/PersonalInfo.svelte
+++ b/myconext-gui/src/routes/PersonalInfo.svelte
@@ -49,6 +49,7 @@
let showManageVerifiedInformation = false;
let showModal = false;
+ let serviceDeskStart = false;
let showIdinOptions = false;
let showDeleteInstitutionModal = false;
let showNewInstitutionModal = false;
@@ -220,6 +221,7 @@
const retry = urlSearchParams.get("retry");
const verify = urlSearchParams.get("verify");
const linkedAccountIdentifier = urlSearchParams.get("institution");
+ const showServiceDeskStart = urlSearchParams.get("servicedesk");
showManageVerifiedInformation = window.location.pathname.indexOf("manage") > -1;
@@ -251,6 +253,11 @@
if ($config.featureIdVerify && isEmpty(issuers)) {
iDINIssuers().then(res => issuers = res);
}
+ if (!isEmpty(showServiceDeskStart)) {
+ serviceDeskStart = true;
+ showIdinOptions = true;
+ showModal = true;
+ }
});
@@ -628,6 +635,7 @@
addEuropean={addEuropean}
issuers={issuers}
showIdinOptions={showIdinOptions}
+ showServiceDesk={serviceDeskStart}
cancel={() => resetModalsAndQueryParams()}/>
{/if}
diff --git a/myconext-gui/src/routes/Security.svelte b/myconext-gui/src/routes/Security.svelte
index 19d51bca..fc353709 100644
--- a/myconext-gui/src/routes/Security.svelte
+++ b/myconext-gui/src/routes/Security.svelte
@@ -201,7 +201,7 @@
{I18n.t("security.title")}
{I18n.t("security.subTitle")}
- {#if !$user.loginOptions.includes("useApp")}
+ {#if !$user.loginOptions.includes("useApp") || !$user.registration?.notificationType }
{@html verifiedSvg}
{I18n.t("security.banner")}
@@ -259,7 +259,7 @@
{/each}
{/if}
- {#if !$user.loginOptions.includes("useApp")}
+ {#if !$user.loginOptions.includes("useApp") || !$user.registration?.notificationType}
{I18n.t("security.recommendedOptions")}
diff --git a/myconext-gui/src/routes/Service.svelte b/myconext-gui/src/routes/Service.svelte
index bd2570fe..6ac9f17b 100644
--- a/myconext-gui/src/routes/Service.svelte
+++ b/myconext-gui/src/routes/Service.svelte
@@ -84,7 +84,7 @@
padding: 15px 10px;
&.details {
- font-weight: bold;
+ font-weight: 600;
div.content {
display: flex;
@@ -113,14 +113,14 @@
&.value {
width: 62%;
- font-weight: bold;
+ font-weight: 600;
ul {
list-style: disc outside none;
margin-left: 18px;
li {
- font-weight: bold;
+ font-weight: 600;
&:not(:last-child) {
margin-bottom: 5px;
diff --git a/myconext-gui/src/routes/Services.svelte b/myconext-gui/src/routes/Services.svelte
index 2d8b4205..1eda1aa7 100644
--- a/myconext-gui/src/routes/Services.svelte
+++ b/myconext-gui/src/routes/Services.svelte
@@ -71,7 +71,7 @@
td.value {
width: 70%;
- font-weight: bold;
+ font-weight: 600;
padding: 20px;
}
diff --git a/myconext-gui/src/routes/Start.svelte b/myconext-gui/src/routes/Start.svelte
index ac7c307c..2dc89066 100644
--- a/myconext-gui/src/routes/Start.svelte
+++ b/myconext-gui/src/routes/Start.svelte
@@ -95,7 +95,7 @@
margin-bottom: 36px;
span.info-bold {
- font-weight: bold;
+ font-weight: 600;
}
}
diff --git a/myconext-gui/src/routes/SubjectAlreadyLinked.svelte b/myconext-gui/src/routes/SubjectAlreadyLinked.svelte
index e36a3a94..77edce1c 100644
--- a/myconext-gui/src/routes/SubjectAlreadyLinked.svelte
+++ b/myconext-gui/src/routes/SubjectAlreadyLinked.svelte
@@ -21,7 +21,7 @@
h1 {
color: var(--color-primary-red);
font-size: 32px;
- font-weight: bold;
+ font-weight: 600;
margin: 22px 0;
}
diff --git a/myconext-gui/src/routes/WebAuthn.svelte b/myconext-gui/src/routes/WebAuthn.svelte
index d09e68c3..116a447a 100644
--- a/myconext-gui/src/routes/WebAuthn.svelte
+++ b/myconext-gui/src/routes/WebAuthn.svelte
@@ -42,7 +42,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/tiqr/DeactivateApp.svelte b/myconext-gui/src/routes/tiqr/DeactivateApp.svelte
index f564dc05..8254f252 100644
--- a/myconext-gui/src/routes/tiqr/DeactivateApp.svelte
+++ b/myconext-gui/src/routes/tiqr/DeactivateApp.svelte
@@ -89,7 +89,7 @@
}
label {
- font-weight: bold;
+ font-weight: 600;
margin: 33px 0 13px 0;
display: inline-block;
}
diff --git a/myconext-gui/src/routes/tiqr/RecoveryCode.svelte b/myconext-gui/src/routes/tiqr/RecoveryCode.svelte
index 2ce82c7f..c7357bd1 100644
--- a/myconext-gui/src/routes/tiqr/RecoveryCode.svelte
+++ b/myconext-gui/src/routes/tiqr/RecoveryCode.svelte
@@ -82,8 +82,8 @@
span {
margin: auto;
- font-size: 18px;
- font-weight: bold;
+ font-size: 20px;
+ font-weight: 600;
}
}
diff --git a/myconext-gui/src/routes/tiqr/UseApp.svelte b/myconext-gui/src/routes/tiqr/UseApp.svelte
index 7c146cd4..e1c7bb9c 100644
--- a/myconext-gui/src/routes/tiqr/UseApp.svelte
+++ b/myconext-gui/src/routes/tiqr/UseApp.svelte
@@ -150,7 +150,7 @@
}
span.note {
- font-weight: bold;
+ font-weight: 600;
}
}
diff --git a/myconext-gui/src/verify/ServiceDesk.svelte b/myconext-gui/src/verify/ServiceDesk.svelte
new file mode 100644
index 00000000..827e0c44
--- /dev/null
+++ b/myconext-gui/src/verify/ServiceDesk.svelte
@@ -0,0 +1,193 @@
+
+
+
+
+
+ {#if step === 0}
+
+
{I18n.t("verify.serviceDesk.confirmIdentity")}
+
{I18n.t("verify.serviceDesk.stepsHeader")}
+
+ {I18n.t("verify.serviceDesk.step1")}
+ {I18n.t("verify.serviceDesk.step2")}
+ {I18n.t("verify.serviceDesk.step3")}
+
+
+ {@html alertSvg}
+
+
{@html I18n.t("verify.serviceDesk.acceptedIds")}
+
+ {@html I18n.t("verify.serviceDesk.passports")}
+ {@html I18n.t("verify.serviceDesk.eea")}
+ {@html I18n.t("verify.serviceDesk.driverLicense")}
+ {@html I18n.t("verify.serviceDesk.residencePermit")}
+
+
{I18n.t("verify.serviceDesk.note")}
+
{@html I18n.t("verify.serviceDesk.eeaNote")}
+
+
+
step = 1}/>
+ {:else if (step === 1)}
+
+ {@html idCard}
+
+ {I18n.t("verify.serviceDesk.idCard.information")}
+ {I18n.t("verify.serviceDesk.idCard.lastName")}
+
+ {I18n.t("verify.serviceDesk.idCard.firstName")}
+
+ {I18n.t("verify.serviceDesk.idCard.dateOfBirth")}
+
+
+ generateControlCode()}/>
+ {/if}
+
+
diff --git a/myconext-gui/src/verify/VerifyChoice.svelte b/myconext-gui/src/verify/VerifyChoice.svelte
index 68307b59..cd651d2c 100644
--- a/myconext-gui/src/verify/VerifyChoice.svelte
+++ b/myconext-gui/src/verify/VerifyChoice.svelte
@@ -11,12 +11,15 @@
import {logo} from "./banks";
import alertSvg from "../icons/alert-circle.svg?raw";
import Spinner from "../components/Spinner.svelte";
+ import ServiceDesk from "./ServiceDesk.svelte";
+ import {onMount} from "svelte";
export let addInstitution;
export let addBank;
export let addEuropean;
export let issuers;
export let showIdinOptions;
+ export let showServiceDesk = false;
let showOtherOptions = false;
let showBankOptions = false;
@@ -98,6 +101,7 @@
&:hover {
background-color: var(--color-background);
}
+
p {
margin: auto;
}
@@ -124,7 +128,7 @@
span {
color: var(--color-primary-blue);
- font-weight: bold;
+ font-weight: 600;
}
}
@@ -148,7 +152,7 @@
- {#if !showBankOptions || busyProcessing}
+ {#if !showServiceDesk && (!showBankOptions || busyProcessing)}
{showIdinOptions ? I18n.t("verify.modal.info.please") : I18n.t("profile.addInstitutionInfo")}
@@ -166,16 +170,16 @@
onClick={() => proceed(addInstitution)}/>
- {#if !showOtherOptions && $config.featureIdVerify && showIdinOptions}
+ {#if !showOtherOptions && $config.featureIdVerify && showIdinOptions && !showServiceDesk}
showOtherOptions = !showOtherOptions}>
{I18n.t("verify.modal.info.other")}
{/if}
- {#if showOtherOptions}
+ {#if showOtherOptions && !showServiceDesk}
{I18n.t("verify.modal.info.verifyBank")}
- {@html bankIcon}
+ {@html bankIcon}
proceed(addEuropean)}/>
-
- {@html I18n.t("verify.modal.info.help")}
+
showServiceDesk = !showServiceDesk}>
+
{I18n.t("verify.modal.info.cantUse")}
{/if}
{/if}
- {#if showBankOptions && !busyProcessing}
+ {#if showBankOptions && !busyProcessing && !showServiceDesk}
{/if}
-{#if showBankOptions && !busyProcessing}
+{#if showBankOptions && !busyProcessing && !showServiceDesk}
{@html alertSvg}
{I18n.t("verify.modal.bank.anotherMethodPrefix")}
@@ -239,3 +243,7 @@
{/if}
+{#if !busyProcessing && showServiceDesk}
+
showServiceDesk = false}/>
+{/if}
+
diff --git a/myconext-server/src/main/java/myconext/api/LoginController.java b/myconext-server/src/main/java/myconext/api/LoginController.java
index 1393098d..5671cb7e 100644
--- a/myconext-server/src/main/java/myconext/api/LoginController.java
+++ b/myconext-server/src/main/java/myconext/api/LoginController.java
@@ -1,27 +1,38 @@
package myconext.api;
import io.swagger.v3.oas.annotations.Hidden;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
import myconext.exceptions.UserNotFoundException;
+import myconext.model.SamlAuthenticationRequest;
import myconext.model.User;
+import myconext.repository.AuthenticationRequestRepository;
import myconext.repository.UserRepository;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.web.context.SecurityContextRepository;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.util.UriComponents;
-import jakarta.servlet.http.Cookie;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.servlet.http.HttpSession;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import static myconext.security.GuestIdpAuthenticationRequestFilter.REGISTER_MODUS_COOKIE_NAME;
import static org.springframework.security.web.context.HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY;
@@ -30,12 +41,18 @@
@Hidden
public class LoginController {
+ private static final Log LOG = LogFactory.getLog(LoginController.class);
+
private final boolean secureCookie;
private final Map config = new HashMap<>();
private final UserRepository userRepository;
+ private final AuthenticationRequestRepository authenticationRequestRepository;
+ private final SecurityContextRepository securityContextRepository;
public LoginController(UserRepository userRepository,
+ AuthenticationRequestRepository authenticationRequestRepository,
+ SecurityContextRepository securityContextRepository,
@Value("${base_path}") String basePath,
@Value("${base_domain}") String baseDomain,
@Value("${my_conext_url}") String myConextUrl,
@@ -59,6 +76,7 @@ public LoginController(UserRepository userRepository,
@Value("${mobile_app_redirect}") String mobileAppRedirect,
@Value("${feature.id_verify}") boolean idVerify
) {
+ this.config.put("basePath", basePath);
this.config.put("loginUrl", basePath + "/login");
this.config.put("continueAfterLoginUrl", continueAfterLoginUrl);
this.config.put("baseDomain", baseDomain);
@@ -83,6 +101,8 @@ public LoginController(UserRepository userRepository,
this.config.put("featureIdVerify", idVerify);
this.secureCookie = secureCookie;
this.userRepository = userRepository;
+ this.authenticationRequestRepository = authenticationRequestRepository;
+ this.securityContextRepository = securityContextRepository;
}
@GetMapping("/config")
@@ -123,6 +143,33 @@ public void register(@PathVariable("enrollmentVerificationKey") String enrollmen
response.sendRedirect(redirectLocation);
}
+ @GetMapping("/servicedesk/{id}")
+ @Hidden
+ public ResponseEntity redirectToSPServiceDeskHook(@PathVariable("id") String id,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+ Optional optionalSamlAuthenticationRequest = authenticationRequestRepository.findByIdAndNotExpired(id);
+ if (!optionalSamlAuthenticationRequest.isPresent()) {
+ String idpBaseUrl = (String) this.config.get("idpBaseUrl");
+ return ResponseEntity.status(HttpStatus.FOUND).location(URI.create(idpBaseUrl + "/expired")).build();
+ }
+ SamlAuthenticationRequest samlAuthenticationRequest = optionalSamlAuthenticationRequest.get();
+ String userId = samlAuthenticationRequest.getUserId();
+ User user = userRepository.findById(userId).orElseThrow(() -> new UserNotFoundException(userId));
+
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user, null,
+ user.getAuthorities());
+ SecurityContext context = SecurityContextHolder.getContext();
+ context.setAuthentication(authentication);
+ this.securityContextRepository.saveContext(SecurityContextHolder.getContext(), request, response);
+
+ String redirectUrl = String.format("%s/personal?servicedesk=start", this.config.get("spBaseUrl"));
+
+ LOG.info(String.format("User %s logged in to process servicedesk request. Redirecting to %s", user.getEmail(), redirectUrl));
+
+ return ResponseEntity.status(HttpStatus.FOUND).location(URI.create(redirectUrl)).build();
+ }
+
@GetMapping("/doLogin")
public void doLogin(@RequestParam(value = "lang", required = false, defaultValue = "en") String lang,
@RequestParam(value = "location", required = false) String location,
@@ -137,6 +184,9 @@ private void doRedirect(String lang, String location, HttpServletResponse respon
response.setHeader("Set-Cookie", cookieValue);
}
String redirectLocation = StringUtils.hasText(location) ? location : this.config.get("eduIDLoginUrl") + "&lang=" + lang;
+
+ LOG.info(String.format("Redirecting to %s", redirectLocation));
+
response.sendRedirect(redirectLocation);
}
@@ -158,6 +208,9 @@ public void doLogout(HttpServletRequest request,
request.getSession().invalidate();
SecurityContextHolder.clearContext();
String redirectLocation = String.format("%s/landing?%s", this.config.get("spBaseUrl"), param);
+
+ LOG.info(String.format("Logout and redirect to %s", redirectLocation));
+
response.sendRedirect(redirectLocation);
}
@@ -196,12 +249,13 @@ private void doCreateUserFromInstitutionKey(HttpServletRequest request,
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user, null,
user.getAuthorities());
- SecurityContext context = SecurityContextHolder.getContext();
- context.setAuthentication(authentication);
- HttpSession session = request.getSession();
- session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, context);
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ this.securityContextRepository.saveContext(SecurityContextHolder.getContext(), request, response);
String redirectLocation = redirectUrl + String.format("?new=%s", newUser ? "true" : "false");
+
+ LOG.info(String.format("User %s create from institutionKey. Redirecting to %s", user.getEmail(), redirectLocation));
+
response.sendRedirect(redirectLocation);
}
}
diff --git a/myconext-server/src/main/java/myconext/model/ControlCode.java b/myconext-server/src/main/java/myconext/model/ControlCode.java
new file mode 100644
index 00000000..3d3c2224
--- /dev/null
+++ b/myconext-server/src/main/java/myconext/model/ControlCode.java
@@ -0,0 +1,21 @@
+package myconext.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class ControlCode implements Serializable {
+
+ private String firstName;
+ private String lastName;
+ private String dayOfBirth;
+ @Setter
+ private String code;
+
+}
diff --git a/myconext-server/src/main/java/myconext/model/ExternalLinkedAccount.java b/myconext-server/src/main/java/myconext/model/ExternalLinkedAccount.java
index 64666778..2921bb99 100644
--- a/myconext-server/src/main/java/myconext/model/ExternalLinkedAccount.java
+++ b/myconext-server/src/main/java/myconext/model/ExternalLinkedAccount.java
@@ -124,6 +124,7 @@ public boolean areNamesValidated() {
case eherkenning -> StringUtils.hasText(firstName) && StringUtils.hasText(preferredLastName);
case studielink ->
StringUtils.hasText(firstName) && StringUtils.hasText(legalLastName) && !Verification.Ongeverifieerd.equals(verification);
+ case serviceDesk -> StringUtils.hasText(firstName) && StringUtils.hasText(legalLastName);
};
}
diff --git a/myconext-server/src/main/java/myconext/model/IdpScoping.java b/myconext-server/src/main/java/myconext/model/IdpScoping.java
index 26fb8c2f..44a89dae 100644
--- a/myconext-server/src/main/java/myconext/model/IdpScoping.java
+++ b/myconext-server/src/main/java/myconext/model/IdpScoping.java
@@ -2,5 +2,5 @@
public enum IdpScoping {
- idin, eherkenning, studielink
+ idin, eherkenning, studielink, serviceDesk
}
diff --git a/myconext-server/src/main/java/myconext/model/User.java b/myconext-server/src/main/java/myconext/model/User.java
index 538e4a57..61af4d8f 100644
--- a/myconext-server/src/main/java/myconext/model/User.java
+++ b/myconext-server/src/main/java/myconext/model/User.java
@@ -104,6 +104,9 @@ public class User implements Serializable, UserDetails {
@Setter
private List memberships = new ArrayList<>();
+ @Setter
+ private ControlCode controlCode;
+
public User(CreateInstitutionEduID createInstitutionEduID, Map userInfo) {
this.email = createInstitutionEduID.getEmail();
this.chosenName = (String) userInfo.get("given_name");
diff --git a/myconext-server/src/main/java/myconext/security/SecurityConfiguration.java b/myconext-server/src/main/java/myconext/security/SecurityConfiguration.java
index 3203f79b..6e42eb3f 100644
--- a/myconext-server/src/main/java/myconext/security/SecurityConfiguration.java
+++ b/myconext-server/src/main/java/myconext/security/SecurityConfiguration.java
@@ -58,13 +58,20 @@ public class SecurityConfiguration {
private static final Log LOG = LogFactory.getLog(SecurityConfiguration.class);
+ @Bean
+ public SecurityContextRepository securityContextRepository() {
+ return new DelegatingSecurityContextRepository(
+ new RequestAttributeSecurityContextRepository(),
+ new HttpSessionSecurityContextRepository()
+ );
+ }
+
@Configuration
@Order(1)
@EnableConfigurationProperties(IdentityProviderMetaData.class)
public static class SamlSecurity {
private final GuestIdpAuthenticationRequestFilter guestIdpAuthenticationRequestFilter;
- private final SecurityContextRepository securityContextRepository;
public SamlSecurity(@Value("${private_key_path}") Resource privateKeyPath,
@Value("${certificate_path}") Resource certificatePath,
@@ -95,7 +102,8 @@ public SamlSecurity(@Value("${private_key_path}") Resource privateKeyPath,
MailBox mailBox,
Manage serviceProviderResolver,
IdentityProviderMetaData identityProviderMetaData,
- CookieValueEncoder cookieValueEncoder) {
+ CookieValueEncoder cookieValueEncoder,
+ SecurityContextRepository securityContextRepository) {
ACR.initialize(
linkedInstitution,
validateNames,
@@ -117,7 +125,6 @@ public SamlSecurity(@Value("${private_key_path}") Resource privateKeyPath,
serviceProviders,
requiresSignedAuthnRequest
);
- this.securityContextRepository = securityContextRepository();
this.guestIdpAuthenticationRequestFilter = new GuestIdpAuthenticationRequestFilter(
redirectUrl,
serviceProviderResolver,
@@ -143,15 +150,8 @@ public SamlSecurity(@Value("${private_key_path}") Resource privateKeyPath,
);
}
- private SecurityContextRepository securityContextRepository() {
- return new DelegatingSecurityContextRepository(
- new RequestAttributeSecurityContextRepository(),
- new HttpSessionSecurityContextRepository()
- );
- }
-
@Bean
- public SecurityFilterChain samlSecurityFilterChain(HttpSecurity http) throws Exception {
+ public SecurityFilterChain samlSecurityFilterChain(HttpSecurity http, SecurityContextRepository securityContextRepository) throws Exception {
http
.securityMatcher("/saml/guest-idp/**")
.csrf(csrf -> csrf.disable())
@@ -162,7 +162,7 @@ public SecurityFilterChain samlSecurityFilterChain(HttpSecurity http) throws Exc
.anyRequest().hasRole("GUEST"))
//We need a reference to the securityContextRepository to update the authentication after an InstitutionAdmin invitation accept
.securityContext(securityContextConfigurer ->
- securityContextConfigurer.securityContextRepository(this.securityContextRepository));
+ securityContextConfigurer.securityContextRepository(securityContextRepository));
return http.build();
}
diff --git a/servicedesk-gui/src/icons/Owl_Emblem.svg b/servicedesk-gui/src/icons/Owl_Emblem.svg
deleted file mode 100644
index 0840719f..00000000
--- a/servicedesk-gui/src/icons/Owl_Emblem.svg
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/alarm_bell.svg b/servicedesk-gui/src/icons/alarm_bell.svg
deleted file mode 100644
index ab1d5eea..00000000
--- a/servicedesk-gui/src/icons/alarm_bell.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
diff --git a/servicedesk-gui/src/icons/alert-triangle.svg b/servicedesk-gui/src/icons/alert-triangle.svg
new file mode 100644
index 00000000..0d01d2e0
--- /dev/null
+++ b/servicedesk-gui/src/icons/alert-triangle.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicedesk-gui/src/icons/calendar-alt.svg b/servicedesk-gui/src/icons/calendar-alt.svg
deleted file mode 100644
index dc757af7..00000000
--- a/servicedesk-gui/src/icons/calendar-alt.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/critical.svg b/servicedesk-gui/src/icons/critical.svg
deleted file mode 100644
index 5868f553..00000000
--- a/servicedesk-gui/src/icons/critical.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/duplicate.svg b/servicedesk-gui/src/icons/duplicate.svg
deleted file mode 100644
index 39e8b996..00000000
--- a/servicedesk-gui/src/icons/duplicate.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/email_new.svg b/servicedesk-gui/src/icons/email_new.svg
deleted file mode 100644
index bf6210d2..00000000
--- a/servicedesk-gui/src/icons/email_new.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/gpt_logo.svg b/servicedesk-gui/src/icons/gpt_logo.svg
new file mode 100644
index 00000000..96386d3c
--- /dev/null
+++ b/servicedesk-gui/src/icons/gpt_logo.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicedesk-gui/src/icons/image-not-found.svg b/servicedesk-gui/src/icons/image-not-found.svg
deleted file mode 100644
index b9506206..00000000
--- a/servicedesk-gui/src/icons/image-not-found.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/informational.svg b/servicedesk-gui/src/icons/informational.svg
new file mode 100644
index 00000000..0efe5521
--- /dev/null
+++ b/servicedesk-gui/src/icons/informational.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/landing/collaborate.svg b/servicedesk-gui/src/icons/landing/collaborate.svg
deleted file mode 100644
index f2ea295f..00000000
--- a/servicedesk-gui/src/icons/landing/collaborate.svg
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/landing/happy.svg b/servicedesk-gui/src/icons/landing/happy.svg
deleted file mode 100644
index 97e6f39d..00000000
--- a/servicedesk-gui/src/icons/landing/happy.svg
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/landing/idcard.svg b/servicedesk-gui/src/icons/landing/idcard.svg
new file mode 100644
index 00000000..3565a064
--- /dev/null
+++ b/servicedesk-gui/src/icons/landing/idcard.svg
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicedesk-gui/src/icons/landing/landingpage.svg b/servicedesk-gui/src/icons/landing/landingpage.svg
new file mode 100644
index 00000000..b8bb201f
--- /dev/null
+++ b/servicedesk-gui/src/icons/landing/landingpage.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicedesk-gui/src/icons/landing/mail.svg b/servicedesk-gui/src/icons/landing/mail.svg
deleted file mode 100644
index b0675b54..00000000
--- a/servicedesk-gui/src/icons/landing/mail.svg
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/landing/screen.svg b/servicedesk-gui/src/icons/landing/screen.svg
deleted file mode 100644
index 4888f338..00000000
--- a/servicedesk-gui/src/icons/landing/screen.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/landing/sketch.svg b/servicedesk-gui/src/icons/landing/sketch.svg
deleted file mode 100644
index f6affef6..00000000
--- a/servicedesk-gui/src/icons/landing/sketch.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/landing/undraw_access_denied_re_awnf.svg b/servicedesk-gui/src/icons/landing/undraw_access_denied_re_awnf.svg
deleted file mode 100644
index 93519348..00000000
--- a/servicedesk-gui/src/icons/landing/undraw_access_denied_re_awnf.svg
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/landing/undraw_authentication_re_svpt.svg b/servicedesk-gui/src/icons/landing/undraw_authentication_re_svpt.svg
deleted file mode 100644
index 709de5f8..00000000
--- a/servicedesk-gui/src/icons/landing/undraw_authentication_re_svpt.svg
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/landing/undraw_enter_uhqk.svg b/servicedesk-gui/src/icons/landing/undraw_enter_uhqk.svg
deleted file mode 100644
index ee873cd9..00000000
--- a/servicedesk-gui/src/icons/landing/undraw_enter_uhqk.svg
+++ /dev/null
@@ -1,54 +0,0 @@
-
- enter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/landing/undraw_startled_-8-p0r.svg b/servicedesk-gui/src/icons/landing/undraw_startled_-8-p0r.svg
deleted file mode 100644
index 3b1392d8..00000000
--- a/servicedesk-gui/src/icons/landing/undraw_startled_-8-p0r.svg
+++ /dev/null
@@ -1,212 +0,0 @@
-
-
-
-
-
-
-
-
- startled
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/landing/undraw_subscriptions_re_k7jj.svg b/servicedesk-gui/src/icons/landing/undraw_subscriptions_re_k7jj.svg
deleted file mode 100644
index 3d37cf27..00000000
--- a/servicedesk-gui/src/icons/landing/undraw_subscriptions_re_k7jj.svg
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/locks.svg b/servicedesk-gui/src/icons/locks.svg
deleted file mode 100644
index 56ea3eee..00000000
--- a/servicedesk-gui/src/icons/locks.svg
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
- Openclipart
-
-
-
- Locks
-
- 2011-02-24T01:51:57
-
-
- https://openclipart.org/detail/122125/locks-by-dear_theophilus
-
-
-
- dear_theophilus
-
-
-
-
-
- lock
-
- locks
-
- padlock
-
- private
-
- public
-
- safe
-
- secure
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/logo.svg b/servicedesk-gui/src/icons/logo.svg
new file mode 100644
index 00000000..a4b4aa35
--- /dev/null
+++ b/servicedesk-gui/src/icons/logo.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/logo_blue.svg b/servicedesk-gui/src/icons/logo_blue.svg
new file mode 100644
index 00000000..16a7c9e2
--- /dev/null
+++ b/servicedesk-gui/src/icons/logo_blue.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicedesk-gui/src/icons/multi-role.svg b/servicedesk-gui/src/icons/multi-role.svg
deleted file mode 100644
index 2320811f..00000000
--- a/servicedesk-gui/src/icons/multi-role.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/servicedesk-gui/src/icons/network-information.svg b/servicedesk-gui/src/icons/network-information.svg
deleted file mode 100644
index 72f2c94c..00000000
--- a/servicedesk-gui/src/icons/network-information.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/owl.wav b/servicedesk-gui/src/icons/owl.wav
deleted file mode 100644
index a3676665..00000000
Binary files a/servicedesk-gui/src/icons/owl.wav and /dev/null differ
diff --git a/servicedesk-gui/src/icons/persons.svg b/servicedesk-gui/src/icons/persons.svg
deleted file mode 100644
index b9b09b56..00000000
--- a/servicedesk-gui/src/icons/persons.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/undraw_High_five.svg b/servicedesk-gui/src/icons/undraw_High_five.svg
new file mode 100644
index 00000000..a9d10497
--- /dev/null
+++ b/servicedesk-gui/src/icons/undraw_High_five.svg
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/undraw_page_not_found_re_e9o6.svg b/servicedesk-gui/src/icons/undraw_page_not_found_re_e9o6.svg
deleted file mode 100644
index 5442a706..00000000
--- a/servicedesk-gui/src/icons/undraw_page_not_found_re_e9o6.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/undraw_people_search_re_5rre.svg b/servicedesk-gui/src/icons/undraw_people_search_re_5rre.svg
deleted file mode 100644
index 5c0d540d..00000000
--- a/servicedesk-gui/src/icons/undraw_people_search_re_5rre.svg
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/icons/undraw_void_-3-ggu.svg b/servicedesk-gui/src/icons/undraw_void_-3-ggu.svg
deleted file mode 100644
index 2288188e..00000000
--- a/servicedesk-gui/src/icons/undraw_void_-3-ggu.svg
+++ /dev/null
@@ -1,35 +0,0 @@
-
- void
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/servicedesk-gui/src/locale/en.js b/servicedesk-gui/src/locale/en.js
index f39f7765..d1403f9b 100644
--- a/servicedesk-gui/src/locale/en.js
+++ b/servicedesk-gui/src/locale/en.js
@@ -10,12 +10,11 @@ const en = {
},
landing: {
header: {
- title: "Manage access to your applications",
+ title: "ServiceDesk",
login: "Log in",
- sup: "SURFconext Invite is by invitation only.",
+ sup: "EduID ServiceDesk is by invitation only.",
},
works: "How does it work?",
- adminFunction: "admin function",
info: [
//Arrays of titles and info blocks and if a function is an admin function
["Invites", "SURF invites institution managers who can create roles for their applications.
" +