new configuration version

This commit is contained in:
haburger 2024-12-18 18:27:54 +00:00
parent 29ada34680
commit 405d009d0a
89 changed files with 2042 additions and 595 deletions

View File

@ -45,7 +45,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-0d4f317ecee462cf51ce783f04b4590ea6d580fb"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/auth"
credentials: "git-credentials"
keystores:

View File

@ -64,16 +64,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -182,6 +185,19 @@ policyInfo.regex.nonLetter=▪ must contain at least {0} non-letter characte
policyInfo.regex.numeric=▪ must contain at least {0} numeric characters.
policyInfo.regex.upper=▪ must contain at least {0} upper case characters.
policyInfo.title=The password has to comply with the following password policy:
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -194,9 +210,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -53,6 +53,7 @@ general.edit=&Auml;ndern
general.email=E-Mail
general.email.address=E-Mail-Adresse
general.entryCode=Code-Eingabe
general.fieldRequired=Erforderliches Feld.
general.getStarted=Get started
general.goAGOVHelp=Weiter zur AGOV help
general.goAccessApp=Login mit AGOV access
@ -63,6 +64,10 @@ general.loginSecurityKey=Sicherheitsschl&uuml;ssel-Login starten
general.or=ODER
general.otherOptions=WEITERE OPTIONEN
general.recovery=Wiederherstellung
general.recoveryCode.inputLabel=Wiederherstellungscode
general.recoveryCode.repeatCodeError=Der von Ihnen eingegebene Code war nicht korrekt. Bitte vergewissern Sie sich, dass Sie ihn richtig abgespeichert haben, und fahren Sie dann mit der erneuten Eingabe fort.
general.recoveryCode.repeatCodeModal.description=Ein verlorener oder falsch gespeicherter Wiederherstellungscode kann die Wiederherstellung Ihres Kontos erschweren. Um sicherzustellen, dass Sie Ihren Code richtig gespeichert haben, wiederholen Sie ihn bitte unten.
general.recoveryCode.repeatCodeModal.title=Wiederherstellungscode wiederholen
general.recoveryOngoing=Wiederherstellung nicht abgeschlossen
general.register=Registrieren
general.registerNow=Jetzt registrieren!
@ -189,9 +194,9 @@ recovery_check_code.invalid.code.tooLong=Eingegebener Code ist zu lang
recovery_check_code.noAccess=Ich kann auf meinen Code nicht zugreifen
recovery_check_code.noCodeAccess=Sind Sie sicher, dass Sie auf Ihren Wiederherstellungscode nicht zugreifen k&ouml;nnen?
recovery_check_code.noCodeAccessInstructions=Wenn Sie auf Ihren Wiederherstellungscode nicht mehr zugreifen k&ouml;nnen, gehen Sie bitte zur AGOV-Hilfe, um jemanden vom AGOV-Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Versuche oder Ihr Wiederherstellungscode ist abgelaufen.
recovery_check_noCode.instruction1=Der von Ihnen eingegebene Wiederherstellungscode ist m&ouml;glicherweise abgelaufen oder Sie haben zu oft versucht, einen Code einzugeben.
recovery_check_noCode.instruction2=Gehen Sie bitte zur AGOV-Hilfe, um jemanden vom Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Fehlversuche.
recovery_check_noCode.instruction1=Sie haben zu oft versucht, einen Wiederherstellungscode einzugeben.
recovery_check_noCode.instruction2=Bitte schliessen Sie den Webbrowser und starten Sie die Kontowiederherstellung in zehn Minuten erneut unter <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Bitte enth&uuml;llen Sie den Code, um fortfahren zu k&ouml;nnen.
recovery_code.instruction=Der Wiederherstellungscode hilft Ihnen, Zugriff auf Ihr AGOV-Login zu erhalten, falls Sie alle Ihre Login-Faktoren verloren haben. Bitte bewahren Sie den Wiederherstellungscode an einem sicheren Ort auf.
recovery_code.newRecoveryCode=Einf&uuml;hrung von Wiederherstellungscode

View File

@ -64,16 +64,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -182,6 +185,19 @@ policyInfo.regex.nonLetter=&#9642; must contain at least {0} non-letter characte
policyInfo.regex.numeric=&#9642; must contain at least {0} numeric characters.
policyInfo.regex.upper=&#9642; must contain at least {0} upper case characters.
policyInfo.title=The password has to comply with the following password policy:
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -194,9 +210,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -53,6 +53,7 @@ general.edit=Editer
general.email=E-mail
general.email.address=Adresse e-mail
general.entryCode=Entrer le code
general.fieldRequired=Champ requis.
general.getStarted=D&eacute;marrer
general.goAGOVHelp=Rendez-vous sur AGOV help
general.goAccessApp=Login avec AGOV access
@ -63,6 +64,10 @@ general.loginSecurityKey=D&eacute;marrer la connexion avec la cl&eacute; de s&ea
general.or=OU
general.otherOptions=AUTRES OPTIONS
general.recovery=R&eacute;cup&eacute;ration
general.recoveryCode.inputLabel=Code de r&eacute;cup&eacute;ration
general.recoveryCode.repeatCodeError=Le code que vous avez saisi est incorrect. Veuillez vous assurer que vous l'avez enregistr&eacute; correctement, puis essayer de le soumettre &agrave; nouveau.
general.recoveryCode.repeatCodeModal.description=Un code de r&eacute;cup&eacute;ration perdu ou mal enregistr&eacute; peut rendre la r&eacute;cup&eacute;ration de votre compte plus difficile. Pour vous assurer que vous avez correctement enregistr&eacute; votre code, veuillez le r&eacute;p&eacute;ter ci-dessous.
general.recoveryCode.repeatCodeModal.title=R&eacute;p&eacute;ter le code de r&eacute;cup&eacute;ration
general.recoveryOngoing=R&eacute;cup&eacute;ration en cours
general.register=Cr&eacute;er un compte
general.registerNow=Enregistrez-vous d&egrave;s maintenant!
@ -189,9 +194,9 @@ recovery_check_code.invalid.code.tooLong=Le code est trop long
recovery_check_code.noAccess=Je n&rsquo;ai pas acc&egrave;s &agrave; mon code de r&eacute;cup&eacute;ration
recovery_check_code.noCodeAccess=&Ecirc;tes-vous s&ucirc;r de ne pas avoir acc&egrave;s &agrave; votre code de r&eacute;cup&eacute;ration ?
recovery_check_code.noCodeAccessInstructions=En cas de perte de votre code de r&eacute;cup&eacute;ration, veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance AGOV. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives ou expiration de votre code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction1=Le code de r&eacute;cup&eacute;ration que vous avez saisi a peut-&ecirc;tre expir&eacute; ou vous avez peut-&ecirc;tre essay&eacute; de le saisir trop de fois.
recovery_check_noCode.instruction2=Veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives.
recovery_check_noCode.instruction1=Vous avez peut-&ecirc;tre essay&eacute; de saisir trop de fois le code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction2=Veuillez fermer le navigateur et relancer la r&eacute;cup&eacute;ration du compte dans dix minutes depuis <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Veuillez indiquer votre nouveau code pour pouvoir continuer.
recovery_code.instruction=Les codes de r&eacute;cup&eacute;ration vous permettent d'acc&eacute;der &agrave; votre compte au cas o&ugrave; vous auriez perdu tous vos identifiants. Conservez le code de r&eacute;cup&eacute;ration en lieu s&ucirc;r.
recovery_code.newRecoveryCode=Introduction du code de r&eacute;cup&eacute;ration

View File

@ -53,6 +53,7 @@ general.edit=Modificare
general.email=e-mail
general.email.address=Indirizzo e-mail
general.entryCode=Codice
general.fieldRequired=Campo obbligatorio.
general.getStarted=Iniziare
general.goAGOVHelp=Vai ad AGOV help
general.goAccessApp=Login con AGOV access
@ -63,6 +64,10 @@ general.loginSecurityKey=Iniziare il login con la chiave di sicurezza
general.or=O
general.otherOptions=ALTRE OPZIONI
general.recovery=Ripristino
general.recoveryCode.inputLabel=Codice di ripristino
general.recoveryCode.repeatCodeError=Il codice inserito non &egrave; corretto. Assicurati di averlo memorizzato correttamente, quindi riprova a inviarlo.
general.recoveryCode.repeatCodeModal.description=Un codice di ripristino perso o memorizzato in modo errato pu&ograve; rendere pi&ugrave; difficile il recupero del tuo account. Per assicurarti di aver registrato correttamente il codice, inseriscilo di nuovo qui sotto.
general.recoveryCode.repeatCodeModal.title=Ripeti il codice di ripristino
general.recoveryOngoing=Ripristino in corso
general.register=Registrarsi
general.registerNow=Si registri ora!
@ -189,9 +194,9 @@ recovery_check_code.invalid.code.tooLong=Il codice &egrave; troppo lungo
recovery_check_code.noAccess=Non ho il mio codice.
recovery_check_code.noCodeAccess=Conferma di non avere il codice di ripristino?
recovery_check_code.noCodeAccessInstructions=Se non ha pi&ugrave; il codice di ripristino, acceda ad AGOV help per contattare il supporto AGOV, che la assister&agrave; nel processo di ripristino.
recovery_check_noCode.banner.error=Troppi tentativi o codice di ripristino scaduto
recovery_check_noCode.instruction1=Il codice di ripristino inserito pu&ograve; essere scaduto o &egrave; stato inserito troppe volte.
recovery_check_noCode.instruction2=Si prega di andare alla guida di AGOV aiuto per contattare un agente dell'assistenza. Saranno in grado di aiutarla con il processo di recupero.
recovery_check_noCode.banner.error=Troppi tentativi
recovery_check_noCode.instruction1=&Egrave; stato inserito troppe volte il codice di ripristino.
recovery_check_noCode.instruction2=Si prega di chiudi il browser web e avvia nuovamente il recupero dell'account entro dieci minuti da <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Per procedere, inserire il nuovo codice.
recovery_code.instruction=Il codice di ripristino le aiuta ad accedere al suo conto in caso in cui lei abbia perso le credentiali di accesso. Per favore, conservi il codice di ripristino in un luogo sicuro.
recovery_code.newRecoveryCode=Introduzione del codice di ripristino

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-ea50f2ef1ae49b730adae6a5cd141c33b1be1c9a"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/idm-job"
credentials: "git-credentials"
keystores:

View File

@ -3,16 +3,18 @@
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="exportScheduler">
<property name="jobDetails">
<list>
<ref bean="IDM_Prune_History_Job"/>
<ref bean="IDM_Default_Prune_History_Job"/>
<ref bean="pruneShadowAccountsJob"/>
<ref bean="pruneOperationsAccountsJob"/>
<ref bean="IDM_Login_Event_Prune_History_Job"/>
</list>
</property>
<property name="triggers">
<list>
<ref bean="IDM_Prune_History_Job_Trigger"/>
<ref bean="IDM_Default_Prune_History_Job_Trigger"/>
<ref bean="pruneShadowAccountsJobTrigger"/>
<ref bean="pruneOperationsAccountsJobTrigger"/>
<ref bean="IDM_Login_Event_Prune_History_Job_Trigger"/>
</list>
</property>
<property name="dataSource">
@ -35,9 +37,9 @@
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
</bean>
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" id="IDM_Prune_History_Job">
<property name="name" value="IDM_Prune_History_Job"/>
<property name="description" value="Batch Job IDM Prune History Job"/>
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" id="IDM_Default_Prune_History_Job">
<property name="name" value="IDM_Default_Prune_History_Job"/>
<property name="description" value="Batch Job IDM Default Prune History Job"/>
<property name="group" value="BatchGroup"/>
<property name="jobClass" value="ch.nevis.idm.batch.jobs.PruneHistoryJob"/>
<property name="durability" value="true"/>
@ -46,6 +48,7 @@
<constructor-arg>
<map>
<entry key="days" value="365"/>
<entry key="skipList" value="tidma_user_login_info_v,tidma_cred_login_info_v,tidma_credential_v,tidma_fido2_v,tidma_fido_uaf_v"/>
</map>
</constructor-arg>
</bean>
@ -97,12 +100,29 @@
</bean>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="IDM_Prune_History_Job_Trigger">
<property name="name" value="IDM_Prune_History_Job_Trigger"/>
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" id="IDM_Login_Event_Prune_History_Job">
<property name="name" value="IDM_Login_Event_Prune_History_Job"/>
<property name="description" value="Batch Job IDM Login Event Prune History Job"/>
<property name="group" value="BatchGroup"/>
<property name="jobClass" value="ch.nevis.idm.batch.jobs.PruneHistoryJob"/>
<property name="durability" value="true"/>
<property name="jobDataMap">
<bean class="org.quartz.JobDataMap">
<constructor-arg>
<map>
<entry key="days" value="31"/>
<entry key="skipList" value="tidma_application_v,tidma_authorization_appl_v,tidma_authorization_client_v,tidma_authorization_erole_v,tidma_authorization_unit_v,tidma_authorization_v,tidma_cert_info_v,tidma_client_application_v,tidma_client_v,tidma_consent_v,tidma_dict_entry_v,tidma_dict_entry_value_v,tidma_enterprise_auth_v,tidma_enterprise_role_v,tidma_erole_member_v,tidma_mobile_signature_v,tidma_oath_v,tidma_personal_answer_v,tidma_personal_question_v,tidma_policy_configuration_v,tidma_policy_parameter_v,tidma_profile_v,tidma_property_allowed_val_v,tidma_property_v,tidma_property_value_v,tidma_role_v,tidma_saml_federation_v,tidma_template_collection_v,tidma_template_text_v,tidma_template_v,tidma_terms_application_v,tidma_terms_url_v,tidma_terms_v,tidma_unit_cred_policy_v,tidma_unit_v,tidma_user_v"/>
</map>
</constructor-arg>
</bean>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="IDM_Default_Prune_History_Job_Trigger">
<property name="name" value="IDM_Default_Prune_History_Job_Trigger"/>
<property name="description" value="Generated by nevisAdmin 4 pattern 0957497767812057fbf138cf"/>
<property name="group" value="BatchGroup"/>
<property name="jobDetail" ref="IDM_Prune_History_Job"/>
<property name="cronExpression" value="0 0 0 * * ?"/>
<property name="jobDetail" ref="IDM_Default_Prune_History_Job"/>
<property name="cronExpression" value="10 0 0 18 * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="pruneShadowAccountsJobTrigger">
<property name="description" value="Archive and delete obsolete shadow accounts"/>
@ -114,4 +134,11 @@
<property name="jobDetail" ref="pruneOperationsAccountsJob"/>
<property name="cronExpression" value="30 1 0 * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="IDM_Login_Event_Prune_History_Job_Trigger">
<property name="name" value="IDM_Login_Event_Prune_History_Job_Trigger"/>
<property name="description" value="Generated by nevisAdmin 4 pattern d4c123d7dd5d7126ff7a03b0"/>
<property name="group" value="BatchGroup"/>
<property name="jobDetail" ref="IDM_Login_Event_Prune_History_Job"/>
<property name="cronExpression" value="05 0 0 18 * ?"/>
</bean>
</beans>

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-cf63f13a99c537e7132c544cde2b238ac9f94461"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/idm"
credentials: "git-credentials"
keystores:

View File

@ -3,12 +3,12 @@
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="exportScheduler">
<property name="jobDetails">
<list>
<ref bean="pruneUrlTicketsJob"/>
<ref bean="pruneAgovAccountsJob"/>
</list>
</property>
<property name="triggers">
<list>
<ref bean="pruneUrlTicketsJobTrigger"/>
<ref bean="pruneAgovAccountsJobTrigger"/>
</list>
</property>
<property name="dataSource">
@ -31,26 +31,32 @@
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
</bean>
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" id="pruneUrlTicketsJob">
<property name="description" value="Delete expired URL Tickets"/>
<property name="jobClass" value="ch.nevis.idm.batch.jobs.UpdateCredentialStateJob"/>
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean" id="pruneAgovAccountsJob">
<property name="description" value="Archive and delete obsolete AGOV accounts (100d no activity)"/>
<property name="jobClass" value="ch.nevis.idm.batch.jobs.UpdateUserStateJob"/>
<property name="durability" value="true"/>
<property name="jobDataMap">
<bean class="org.quartz.JobDataMap">
<constructor-arg>
<map>
<entry key="restrictToClients" value="d9a334a6-b6f5-4982-a24e-13ae095a60fa"/>
<entry key="sendingMethod" value="None"/>
<entry key="credentialTypes" value="URL_TICKET"/>
<entry key="expireAction" value="delete"/>
<entry key="daysNoActivity" value="100"/>
<entry key="neverLoggedInDaysNoActivity" value="100"/>
<entry key="considerUsersNeverLoggedIn" value="true"/>
<entry key="sendWarning" value="false"/>
<entry key="daysGracePeriod" value="1"/>
<entry key="daysStatusDisabled" value="100"/>
<entry key="daysStatusArchived" value="10"/>
<entry key="disableOutdatedUsers" value="true"/>
<entry key="disableNotYetActiveUsers" value="false"/>
<entry key="excludeTechnicalUsers" value="true"/>
<entry key="restrictToClients" value="cfa9c9b9-119f-4dff-9bb8-86d7c0cf2720"/>
</map>
</constructor-arg>
</bean>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="pruneUrlTicketsJobTrigger">
<property name="description" value="Delete expired URL Tickets"/>
<property name="jobDetail" ref="pruneUrlTicketsJob"/>
<property name="cronExpression" value="45 0 0 * * ?"/>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" id="pruneAgovAccountsJobTrigger">
<property name="description" value="Archive and delete obsolete AGOV accounts (100d no activity)"/>
<property name="jobDetail" ref="pruneAgovAccountsJob"/>
</bean>
</beans>

View File

@ -44,7 +44,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-0d4f317ecee462cf51ce783f04b4590ea6d580fb"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/logrend"
credentials: "git-credentials"
podSecurity:

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=&Auml;ndern
general.email=E-Mail
general.email.address=E-Mail-Adresse
general.entryCode=Code-Eingabe
general.fieldRequired=Erforderliches Feld.
general.getStarted=Get started
general.goAGOVHelp=Weiter zur AGOV help
general.goAccessApp=Login mit AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Sicherheitsschl&uuml;ssel-Login starten
general.or=ODER
general.otherOptions=WEITERE OPTIONEN
general.recovery=Wiederherstellung
general.recoveryCode.inputLabel=Wiederherstellungscode
general.recoveryCode.repeatCodeError=Der von Ihnen eingegebene Code war nicht korrekt. Bitte vergewissern Sie sich, dass Sie ihn richtig abgespeichert haben, und fahren Sie dann mit der erneuten Eingabe fort.
general.recoveryCode.repeatCodeModal.description=Ein verlorener oder falsch gespeicherter Wiederherstellungscode kann die Wiederherstellung Ihres Kontos erschweren. Um sicherzustellen, dass Sie Ihren Code richtig gespeichert haben, wiederholen Sie ihn bitte unten.
general.recoveryCode.repeatCodeModal.title=Wiederherstellungscode wiederholen
general.recoveryOngoing=Wiederherstellung nicht abgeschlossen
general.register=Registrieren
general.registerNow=Jetzt registrieren!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Eingegebener Code ist zu lang
recovery_check_code.noAccess=Ich kann auf meinen Code nicht zugreifen
recovery_check_code.noCodeAccess=Sind Sie sicher, dass Sie auf Ihren Wiederherstellungscode nicht zugreifen k&ouml;nnen?
recovery_check_code.noCodeAccessInstructions=Wenn Sie auf Ihren Wiederherstellungscode nicht mehr zugreifen k&ouml;nnen, gehen Sie bitte zur AGOV-Hilfe, um jemanden vom AGOV-Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Versuche oder Ihr Wiederherstellungscode ist abgelaufen.
recovery_check_noCode.instruction1=Der von Ihnen eingegebene Wiederherstellungscode ist m&ouml;glicherweise abgelaufen oder Sie haben zu oft versucht, einen Code einzugeben.
recovery_check_noCode.instruction2=Gehen Sie bitte zur AGOV-Hilfe, um jemanden vom Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Fehlversuche.
recovery_check_noCode.instruction1=Sie haben zu oft versucht, einen Wiederherstellungscode einzugeben.
recovery_check_noCode.instruction2=Bitte schliessen Sie den Webbrowser und starten Sie die Kontowiederherstellung in zehn Minuten erneut unter <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Bitte enth&uuml;llen Sie den Code, um fortfahren zu k&ouml;nnen.
recovery_code.instruction=Der Wiederherstellungscode hilft Ihnen, Zugriff auf Ihr AGOV-Login zu erhalten, falls Sie alle Ihre Login-Faktoren verloren haben. Bitte bewahren Sie den Wiederherstellungscode an einem sicheren Ort auf.
recovery_code.newRecoveryCode=Einf&uuml;hrung von Wiederherstellungscode

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=Editer
general.email=E-mail
general.email.address=Adresse e-mail
general.entryCode=Entrer le code
general.fieldRequired=Champ requis.
general.getStarted=D&eacute;marrer
general.goAGOVHelp=Rendez-vous sur AGOV help
general.goAccessApp=Login avec AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=D&eacute;marrer la connexion avec la cl&eacute; de s&ea
general.or=OU
general.otherOptions=AUTRES OPTIONS
general.recovery=R&eacute;cup&eacute;ration
general.recoveryCode.inputLabel=Code de r&eacute;cup&eacute;ration
general.recoveryCode.repeatCodeError=Le code que vous avez saisi est incorrect. Veuillez vous assurer que vous l'avez enregistr&eacute; correctement, puis essayer de le soumettre &agrave; nouveau.
general.recoveryCode.repeatCodeModal.description=Un code de r&eacute;cup&eacute;ration perdu ou mal enregistr&eacute; peut rendre la r&eacute;cup&eacute;ration de votre compte plus difficile. Pour vous assurer que vous avez correctement enregistr&eacute; votre code, veuillez le r&eacute;p&eacute;ter ci-dessous.
general.recoveryCode.repeatCodeModal.title=R&eacute;p&eacute;ter le code de r&eacute;cup&eacute;ration
general.recoveryOngoing=R&eacute;cup&eacute;ration en cours
general.register=Cr&eacute;er un compte
general.registerNow=Enregistrez-vous d&egrave;s maintenant!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Le code est trop long
recovery_check_code.noAccess=Je n&rsquo;ai pas acc&egrave;s &agrave; mon code de r&eacute;cup&eacute;ration
recovery_check_code.noCodeAccess=&Ecirc;tes-vous s&ucirc;r de ne pas avoir acc&egrave;s &agrave; votre code de r&eacute;cup&eacute;ration ?
recovery_check_code.noCodeAccessInstructions=En cas de perte de votre code de r&eacute;cup&eacute;ration, veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance AGOV. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives ou expiration de votre code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction1=Le code de r&eacute;cup&eacute;ration que vous avez saisi a peut-&ecirc;tre expir&eacute; ou vous avez peut-&ecirc;tre essay&eacute; de le saisir trop de fois.
recovery_check_noCode.instruction2=Veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives.
recovery_check_noCode.instruction1=Vous avez peut-&ecirc;tre essay&eacute; de saisir trop de fois le code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction2=Veuillez fermer le navigateur et relancer la r&eacute;cup&eacute;ration du compte dans dix minutes depuis <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Veuillez indiquer votre nouveau code pour pouvoir continuer.
recovery_code.instruction=Les codes de r&eacute;cup&eacute;ration vous permettent d'acc&eacute;der &agrave; votre compte au cas o&ugrave; vous auriez perdu tous vos identifiants. Conservez le code de r&eacute;cup&eacute;ration en lieu s&ucirc;r.
recovery_code.newRecoveryCode=Introduction du code de r&eacute;cup&eacute;ration

View File

@ -48,6 +48,7 @@ general.edit=Modificare
general.email=e-mail
general.email.address=Indirizzo e-mail
general.entryCode=Codice
general.fieldRequired=Campo obbligatorio.
general.getStarted=Iniziare
general.goAGOVHelp=Vai ad AGOV help
general.goAccessApp=Login con AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Iniziare il login con la chiave di sicurezza
general.or=O
general.otherOptions=ALTRE OPZIONI
general.recovery=Ripristino
general.recoveryCode.inputLabel=Codice di ripristino
general.recoveryCode.repeatCodeError=Il codice inserito non &egrave; corretto. Assicurati di averlo memorizzato correttamente, quindi riprova a inviarlo.
general.recoveryCode.repeatCodeModal.description=Un codice di ripristino perso o memorizzato in modo errato pu&ograve; rendere pi&ugrave; difficile il recupero del tuo account. Per assicurarti di aver registrato correttamente il codice, inseriscilo di nuovo qui sotto.
general.recoveryCode.repeatCodeModal.title=Ripeti il codice di ripristino
general.recoveryOngoing=Ripristino in corso
general.register=Registrarsi
general.registerNow=Si registri ora!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Il codice &egrave; troppo lungo
recovery_check_code.noAccess=Non ho il mio codice.
recovery_check_code.noCodeAccess=Conferma di non avere il codice di ripristino?
recovery_check_code.noCodeAccessInstructions=Se non ha pi&ugrave; il codice di ripristino, acceda ad AGOV help per contattare il supporto AGOV, che la assister&agrave; nel processo di ripristino.
recovery_check_noCode.banner.error=Troppi tentativi o codice di ripristino scaduto
recovery_check_noCode.instruction1=Il codice di ripristino inserito pu&ograve; essere scaduto o &egrave; stato inserito troppe volte.
recovery_check_noCode.instruction2=Si prega di andare alla guida di AGOV aiuto per contattare un agente dell'assistenza. Saranno in grado di aiutarla con il processo di recupero.
recovery_check_noCode.banner.error=Troppi tentativi
recovery_check_noCode.instruction1=&Egrave; stato inserito troppe volte il codice di ripristino.
recovery_check_noCode.instruction2=Si prega di chiudi il browser web e avvia nuovamente il recupero dell'account entro dieci minuti da <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Per procedere, inserire il nuovo codice.
recovery_code.instruction=Il codice di ripristino le aiuta ad accedere al suo conto in caso in cui lei abbia perso le credentiali di accesso. Per favore, conservi il codice di ripristino in un luogo sicuro.
recovery_code.newRecoveryCode=Introduzione del codice di ripristino

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="#453F4F"/>
<path d="M315.87 194.157L338.759 274.59L372.321 288.431L370.709 312.806L292.056 339.054L295.324 204.15L308.885 192.119C311.253 190.018 315.004 191.112 315.87 194.157Z" fill="#2F2E43"/>
<path d="M254.071 99.3203C258.34 75.2985 281.274 59.2858 305.296 63.5551C329.318 67.8243 345.331 90.7588 341.062 114.781C337.599 134.263 321.86 148.474 303.221 150.874L284.936 204.949L248.42 161.61C248.42 161.61 259.776 151.461 267.106 139.043C256.753 129.168 251.38 114.463 254.071 99.3203Z" fill="#F3C6C8"/>
<path d="M300.903 178.872L241.344 136.491C241.344 136.491 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.248 184.505 223.096C180.767 265.943 186.307 388.999 186.307 388.999L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.619 300.903 178.872Z" fill="#1778D3"/>
<path d="M228.184 159.93C228.184 159.93 275.707 179.436 282.199 202.795" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.456L313.893 337.777L317.75 304.922L394.424 286.427C397.202 281.312 402.465 277.057 409.186 275.18C420.947 271.895 432.684 277.123 435.402 286.855C438.121 296.588 430.791 307.141 419.03 310.426C412.309 312.303 405.603 311.391 400.576 308.456Z" fill="#F3C6C8"/>
<path d="M281.991 290.319L266.001 213.382C266.001 213.382 233.372 151.67 191.579 195.333C191.579 195.333 238.434 350.645 264.171 352.381C289.907 354.117 322.346 336.691 322.346 336.691L326.292 296.448L281.991 290.319Z" fill="#1778D3"/>
<path d="M191.582 195.328C191.582 195.328 238.436 350.64 264.173 352.376C289.909 354.112 322.348 336.686 322.348 336.686" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.442L281.993 290.313L266.004 213.375" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.675C265.066 137.675 265.15 113.706 277.44 105.926C289.703 98.1636 286.701 114.495 286.701 114.495L293.981 114.82C293.981 114.82 296.902 98.938 311.084 99.8077L307.313 78.9529C307.313 78.9529 338.84 94.1981 340.607 91.2217C354.515 67.8019 291.481 27.9758 262.264 61.5896C216.823 113.87 265.066 137.675 265.066 137.675Z" fill="#BE7800"/>
<rect x="436.242" y="218.391" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.391)" fill="#9268E9"/>
<path d="M405.463 303.885L318.78 333.207L322.636 300.352L399.31 281.857C402.089 276.742 407.352 272.487 414.073 270.61C425.833 267.325 437.571 272.552 440.289 282.285C443.007 292.018 435.677 302.57 423.917 305.855C417.195 307.732 410.49 306.82 405.463 303.885Z" fill="#F3C6C8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="white"/>
<path d="M315.87 194.156L338.759 274.589L372.321 288.429L370.709 312.805L292.056 339.053L295.324 204.149L308.885 192.117C311.253 190.016 315.004 191.11 315.87 194.156Z" fill="#2F2E43"/>
<path d="M254.069 99.3193C258.338 75.2975 281.272 59.2848 305.294 63.5541C329.316 67.8234 345.329 90.7578 341.06 114.78C337.597 134.262 321.858 148.473 303.219 150.873L284.934 204.948L248.418 161.609C248.418 161.609 259.774 151.46 267.104 139.042C256.751 129.167 251.378 114.462 254.069 99.3193Z" fill="#E29295"/>
<path d="M300.903 178.872L241.344 136.492C241.344 136.492 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.249 184.505 223.096C180.767 265.943 186.307 389 186.307 389L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.62 300.903 178.872Z" fill="#2F2E43"/>
<path d="M228.184 159.928C228.184 159.928 275.707 179.434 282.199 202.793" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.455L313.893 337.776L317.75 304.921L394.424 286.427C397.202 281.311 402.465 277.057 409.186 275.179C420.947 271.895 432.684 277.122 435.402 286.855C438.121 296.588 430.791 307.14 419.03 310.425C412.309 312.302 405.603 311.39 400.576 308.455Z" fill="#E29295"/>
<path d="M281.991 290.315L266.001 213.378C266.001 213.378 233.372 151.667 191.579 195.329C191.579 195.329 238.434 350.641 264.171 352.377C289.907 354.113 322.346 336.687 322.346 336.687L326.292 296.444L281.991 290.315Z" fill="#2F2E43"/>
<path d="M191.582 195.329C191.582 195.329 238.436 350.64 264.173 352.377C289.909 354.113 322.348 336.687 322.348 336.687" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.444L281.993 290.315L266.004 213.377" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.676C265.066 137.676 265.15 113.707 277.44 105.927C289.703 98.1645 286.701 114.496 286.701 114.496L293.981 114.821C293.981 114.821 296.902 98.939 311.084 99.8087L307.313 78.9539C307.313 78.9539 338.84 94.199 340.607 91.2226C354.515 67.8029 291.481 27.9768 262.264 61.5906C216.823 113.871 265.066 137.676 265.066 137.676Z" fill="#2F2E43"/>
<rect x="436.242" y="218.39" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.39)" fill="#734BC5"/>
<path d="M405.461 303.882L318.778 333.203L322.634 300.348L399.308 281.853C402.087 276.738 407.35 272.484 414.071 270.606C425.831 267.322 437.569 272.549 440.287 282.282C443.005 292.014 435.675 302.567 423.915 305.852C417.194 307.729 410.488 306.817 405.461 303.882Z" fill="#E29295"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,148 @@
class ProvidePhoneNumber {
modal;
laterModal;
providePhoneNumberLaterButton;
phoneNumberInput;
agovInputPhoneNumberInput;
repeatPhoneNumberInput;
agovInputRepeatPhoneNumberInput;
constructor() {
this.modal = document.querySelector('#modal');
this.laterModal = document.querySelector('#laterModal');
this.providePhoneNumberLaterButton = document.querySelector('#providePhoneNumberLaterButton');
this.phoneNumberInput = document.querySelector('#phoneNumberInput');
this.agovInputPhoneNumberInput = document.querySelector('#agovInputPhoneNumberInput');
this.agovInputRepeatPhoneNumberInput = document.querySelector('#agovInputRepeatPhoneNumberInput');
this.repeatPhoneNumberInput = document.querySelector('#repeatPhoneNumberInput');
document.querySelector('#laterCheckbox').checked = true;
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.providePhoneNumberLaterButton.addEventListener('click', () => {
this.setVisible(this.laterModal);
});
document.querySelector('#laterModalBack').addEventListener('click', () => {
this.resetValidation(this.agovInputPhoneNumberInput);
this.setInvisible(this.laterModal);
});
document.querySelector('#repeatPhoneNumberModalBack').addEventListener('click', () => {
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.setInvisible(this.modal);
});
document.querySelector('#repeatPhoneNumberModalContinue').addEventListener('click', () => {
if (this.validateInput(this.agovInputRepeatPhoneNumberInput)) {
this.evaluatePhoneNumbersAndSubmit();
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
}
});
document.querySelector('#providePhoneNumberContinueButton').addEventListener('click', () => {
if (this.validateInput(this.agovInputPhoneNumberInput)) {
this.repeatPhoneNumberInput.value = '';
this.initializePhoneInput(this.repeatPhoneNumberInput);
this.addPhoneInputEventHandlers(this.repeatPhoneNumberInput);
this.resetValidation(this.agovInputRepeatPhoneNumberInput);
this.showErrorBanner(false);
this.setVisible(this.modal);
}
});
}
addPhoneInputEventHandlers(phoneInputElement) {
phoneInputElement.addEventListener('input', () => {
this.formatAndEmitPhoneNumberValue(phoneInputElement);
});
phoneInputElement.addEventListener('countrychange', () => {
this.onPhoneNumberCountryChange(phoneInputElement);
});
}
initializePhoneInput(inputElement) {
window.phoneNumberUtils.initializePhoneNumberField(inputElement);
if (inputElement.value) {
window.phoneNumberUtils.setNumber(inputElement.value);
this.formatAndEmitPhoneNumberValue(inputElement);
}
else {
window.phoneNumberUtils.formatAfterCountryChange();
inputElement.value = window.phoneNumberUtils.getInputValue();
}
}
onPhoneNumberCountryChange(inputElement) {
inputElement.value = window.phoneNumberUtils.formatAfterCountryChange();
}
formatAndEmitPhoneNumberValue(inputElement) {
inputElement.value = window.phoneNumberUtils.formatUsingInputValue();
}
resetValidation(agovInput) {
agovInput.validity = true;
}
validateInput(agovInput) {
const innerInput = agovInput.querySelector('input');
if (innerInput.value.trim().length === 0) {
agovInput.supportingText = 0;
agovInput.focus();
agovInput.validity = false;
return false;
}
else if (!window.phoneNumberUtils.validatePhoneNumber(false, true)) {
agovInput.supportingText = 2;
agovInput.focus();
agovInput.validity = false;
return false;
}
return true;
}
setInvisible(modalElement) {
window.utils.changeDisplay(modalElement, 'hidden', 'block');
}
setVisible(modalElement) {
window.utils.changeDisplay(modalElement, 'block', 'hidden');
const isMobile = !!/(iPhone|Android)/.test(window.navigator.userAgent);
if (isMobile) {
modalElement.classList.add('mobileDrawer');
document.dispatchEvent(new Event('initDrawerPopup'));
}
}
arePhoneNumbersEqual() {
const phoneNumber = this.phoneNumberInput.value.trim();
const repeatedPhoneNumber = this.repeatPhoneNumberInput.value.trim();
return phoneNumber === repeatedPhoneNumber;
}
evaluatePhoneNumbersAndSubmit() {
if (this.arePhoneNumbersEqual()) {
document.querySelector('#mobile').value = this.repeatPhoneNumberInput.value.trim().replaceAll(' ', '');
document.querySelector('#submit').click();
}
else {
this.setInvisible(this.modal);
this.showErrorBanner(true);
}
}
showErrorBanner(visible) {
const errorBanner = document.getElementById('errorBanner');
if (visible) {
window.utils.changeDisplay(errorBanner, 'block', 'hidden');
}
else {
window.utils.changeDisplay(errorBanner, 'hidden', 'block');
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.dispatchEvent(new Event('initPhoneNumberUtils'));
window.providePhoneNumber = new ProvidePhoneNumber();
});

View File

@ -0,0 +1,221 @@
#parse("${templatePath}/header.vm")
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<agov-backdrop></agov-backdrop>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-8 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("providePhoneNumber.title")
</h3>
</div>
<div class="flex flex-col gap-8">
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 hidden"
id="errorBanner">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.errorBanner")
</p>
</div>
<div class="flex flex-col gap-4">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.description")
</p>
<agov-input
id="agovInputPhoneNumberInput"
data-label="$text.get("providePhoneNumber.inputLabel")"
data-id="phoneNumberInput"
data-name="phoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
</div>
</div>
<div class="flex flex-col gap-4">
<div class="info flex rounded-xl bg-info-background dark:bg-dark-info-background items-center p-4">
<i class="fa-regular fa-info-circle rounded-full p-3 text-info dark:text-dark-info bg-info/10 dark:bg-dark-info-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.banner")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex flex-col-reverse sm:flex-row gap-4">
<agov-button
id="providePhoneNumberLaterButton"
class="w-full"
data-style="secondary"
data-label="$text.get("loainfo.later")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
id="providePhoneNumberContinueButton"
class="w-full"
data-style="primary"
data-label="$text.get("providePhoneNumber.saveButtonText")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden block sm:hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number-dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:block dark:sm:hidden dark:md:block">
</div>
</div>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.modal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.modal.description")
</p>
</div>
<agov-input
id="agovInputRepeatPhoneNumberInput"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="repeatPhoneNumberInput"
data-name="repeatPhoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="hidden flex flex-col flex-auto block">
<agov-input
id="agovInputMobile"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="mobile"
data-name="mobile"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true">
</agov-input>
<agov-button
class="basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
class="block"
id="repeatPhoneNumberModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
class="block"
id="repeatPhoneNumberModalContinue"
data-style="primary"
data-label="$text.get("general.continue")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
</div>
<div id="laterModal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.laterModal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-4" id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description2")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description3")
</p>
</div>
<div class="w-full sm:static mt-auto sm:justify-items-end">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="laterModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-button
id="ask_mobile_continue"
data-name="submit"
data-value="submit"
data-id="submit"
data-label="$text.get("general.continue")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input id="laterCheckbox" class="hidden" type="checkbox" name="skip" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="${login.appDataPath}/static/js-code/ask_mobile.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -3,7 +3,7 @@
$text.get("footer.text")
<a target="_blank" class='text-hyperlink dark:text-dark-hyperlink underline' href='$text.get("footer.link")'>$text.get("footer.link.label")</a>
</div>
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="${login.appDataPath}/static/bundle.js"></script>
</body>

View File

@ -1,139 +1,128 @@
#parse("${templatePath}/header.vm")
<agov-backdrop></agov-backdrop>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("recovery_check_code.noCodeAccess")
</h4>
<div id="modalDescription" class="mb-20">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.noCodeAccessInstructions")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="recovery_check_code"
class="block"
data-style="secondary"
data-label="$text.get("general.cancel")"
data-type="button"
data-fullwidth="true">
</agov-button>
<a href="$text.get("general.help.link")" target="_blank" rel="noopener noreferrer">
<agov-button
class="block"
data-label="$text.get("general.goAGOVHelp")"
data-type="button"
data-fullwidth="true">
</agov-button>
</a>
</div>
</div>
</div>
</div>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<span id="spinner" class="hidden absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-30">
<img src="${login.appDataPath}/static/images/spinner.svg" class="animate-spin block dark:hidden">
<img src="${login.appDataPath}/static/images/spinner-dark.svg" class="animate-spin hidden dark:block">
</span>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-6">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
#end
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_check_code.instruction")
</p>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
#if (($error.value == "locked"))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.banner.error")
</p>
</div>
<div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction2")
</p>
</div>
#else
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
#else
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
</div>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<form class="hidden"
id="$gui.name"
name="$gui.name"
method="POST"
target="_self"
action="$formTarget"
autocomplete="off"
accept-charset="UTF-8">
<agov-button
data-name="submit"
data-id="submitFormButton"
data-value="submit"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="no_code" id="noCodeCheckbox" type="checkbox" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
</div>
<script src="${login.appDataPath}/static/js-code/recovery_check_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -10,45 +10,47 @@
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
</p>
</div>
</div>
</div>
<agov-button
id="showCode"
class="block basis-full mb-20"
data-style="secondary"
data-label="<i class='fa-regular fa-eye align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Reveal code"
data-label="$text.get("general.recoveryCode.reveal")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -59,7 +61,7 @@
<agov-button
class="block basis-full"
data-style="secondary"
data-label="<i class='fa-regular fa-arrow-down-to-line align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Download as PDF"
data-label="$text.get("general.recoveryCode.downloadPdf")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -96,11 +98,9 @@
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("general.recoveryCode.repeatCodeModal.title")
</h4>
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
@ -142,11 +142,11 @@
accept-charset="UTF-8"
class="hidden">
<agov-button
class="block basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
class="block basis-full"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
@ -160,5 +160,4 @@
<script src="${login.appDataPath}/static/js-code/recovery_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=&Auml;ndern
general.email=E-Mail
general.email.address=E-Mail-Adresse
general.entryCode=Code-Eingabe
general.fieldRequired=Erforderliches Feld.
general.getStarted=Get started
general.goAGOVHelp=Weiter zur AGOV help
general.goAccessApp=Login mit AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Sicherheitsschl&uuml;ssel-Login starten
general.or=ODER
general.otherOptions=WEITERE OPTIONEN
general.recovery=Wiederherstellung
general.recoveryCode.inputLabel=Wiederherstellungscode
general.recoveryCode.repeatCodeError=Der von Ihnen eingegebene Code war nicht korrekt. Bitte vergewissern Sie sich, dass Sie ihn richtig abgespeichert haben, und fahren Sie dann mit der erneuten Eingabe fort.
general.recoveryCode.repeatCodeModal.description=Ein verlorener oder falsch gespeicherter Wiederherstellungscode kann die Wiederherstellung Ihres Kontos erschweren. Um sicherzustellen, dass Sie Ihren Code richtig gespeichert haben, wiederholen Sie ihn bitte unten.
general.recoveryCode.repeatCodeModal.title=Wiederherstellungscode wiederholen
general.recoveryOngoing=Wiederherstellung nicht abgeschlossen
general.register=Registrieren
general.registerNow=Jetzt registrieren!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Eingegebener Code ist zu lang
recovery_check_code.noAccess=Ich kann auf meinen Code nicht zugreifen
recovery_check_code.noCodeAccess=Sind Sie sicher, dass Sie auf Ihren Wiederherstellungscode nicht zugreifen k&ouml;nnen?
recovery_check_code.noCodeAccessInstructions=Wenn Sie auf Ihren Wiederherstellungscode nicht mehr zugreifen k&ouml;nnen, gehen Sie bitte zur AGOV-Hilfe, um jemanden vom AGOV-Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Versuche oder Ihr Wiederherstellungscode ist abgelaufen.
recovery_check_noCode.instruction1=Der von Ihnen eingegebene Wiederherstellungscode ist m&ouml;glicherweise abgelaufen oder Sie haben zu oft versucht, einen Code einzugeben.
recovery_check_noCode.instruction2=Gehen Sie bitte zur AGOV-Hilfe, um jemanden vom Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Fehlversuche.
recovery_check_noCode.instruction1=Sie haben zu oft versucht, einen Wiederherstellungscode einzugeben.
recovery_check_noCode.instruction2=Bitte schliessen Sie den Webbrowser und starten Sie die Kontowiederherstellung in zehn Minuten erneut unter <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Bitte enth&uuml;llen Sie den Code, um fortfahren zu k&ouml;nnen.
recovery_code.instruction=Der Wiederherstellungscode hilft Ihnen, Zugriff auf Ihr AGOV-Login zu erhalten, falls Sie alle Ihre Login-Faktoren verloren haben. Bitte bewahren Sie den Wiederherstellungscode an einem sicheren Ort auf.
recovery_code.newRecoveryCode=Einf&uuml;hrung von Wiederherstellungscode

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=Editer
general.email=E-mail
general.email.address=Adresse e-mail
general.entryCode=Entrer le code
general.fieldRequired=Champ requis.
general.getStarted=D&eacute;marrer
general.goAGOVHelp=Rendez-vous sur AGOV help
general.goAccessApp=Login avec AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=D&eacute;marrer la connexion avec la cl&eacute; de s&ea
general.or=OU
general.otherOptions=AUTRES OPTIONS
general.recovery=R&eacute;cup&eacute;ration
general.recoveryCode.inputLabel=Code de r&eacute;cup&eacute;ration
general.recoveryCode.repeatCodeError=Le code que vous avez saisi est incorrect. Veuillez vous assurer que vous l'avez enregistr&eacute; correctement, puis essayer de le soumettre &agrave; nouveau.
general.recoveryCode.repeatCodeModal.description=Un code de r&eacute;cup&eacute;ration perdu ou mal enregistr&eacute; peut rendre la r&eacute;cup&eacute;ration de votre compte plus difficile. Pour vous assurer que vous avez correctement enregistr&eacute; votre code, veuillez le r&eacute;p&eacute;ter ci-dessous.
general.recoveryCode.repeatCodeModal.title=R&eacute;p&eacute;ter le code de r&eacute;cup&eacute;ration
general.recoveryOngoing=R&eacute;cup&eacute;ration en cours
general.register=Cr&eacute;er un compte
general.registerNow=Enregistrez-vous d&egrave;s maintenant!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Le code est trop long
recovery_check_code.noAccess=Je n&rsquo;ai pas acc&egrave;s &agrave; mon code de r&eacute;cup&eacute;ration
recovery_check_code.noCodeAccess=&Ecirc;tes-vous s&ucirc;r de ne pas avoir acc&egrave;s &agrave; votre code de r&eacute;cup&eacute;ration ?
recovery_check_code.noCodeAccessInstructions=En cas de perte de votre code de r&eacute;cup&eacute;ration, veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance AGOV. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives ou expiration de votre code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction1=Le code de r&eacute;cup&eacute;ration que vous avez saisi a peut-&ecirc;tre expir&eacute; ou vous avez peut-&ecirc;tre essay&eacute; de le saisir trop de fois.
recovery_check_noCode.instruction2=Veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives.
recovery_check_noCode.instruction1=Vous avez peut-&ecirc;tre essay&eacute; de saisir trop de fois le code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction2=Veuillez fermer le navigateur et relancer la r&eacute;cup&eacute;ration du compte dans dix minutes depuis <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Veuillez indiquer votre nouveau code pour pouvoir continuer.
recovery_code.instruction=Les codes de r&eacute;cup&eacute;ration vous permettent d'acc&eacute;der &agrave; votre compte au cas o&ugrave; vous auriez perdu tous vos identifiants. Conservez le code de r&eacute;cup&eacute;ration en lieu s&ucirc;r.
recovery_code.newRecoveryCode=Introduction du code de r&eacute;cup&eacute;ration

View File

@ -48,6 +48,7 @@ general.edit=Modificare
general.email=e-mail
general.email.address=Indirizzo e-mail
general.entryCode=Codice
general.fieldRequired=Campo obbligatorio.
general.getStarted=Iniziare
general.goAGOVHelp=Vai ad AGOV help
general.goAccessApp=Login con AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Iniziare il login con la chiave di sicurezza
general.or=O
general.otherOptions=ALTRE OPZIONI
general.recovery=Ripristino
general.recoveryCode.inputLabel=Codice di ripristino
general.recoveryCode.repeatCodeError=Il codice inserito non &egrave; corretto. Assicurati di averlo memorizzato correttamente, quindi riprova a inviarlo.
general.recoveryCode.repeatCodeModal.description=Un codice di ripristino perso o memorizzato in modo errato pu&ograve; rendere pi&ugrave; difficile il recupero del tuo account. Per assicurarti di aver registrato correttamente il codice, inseriscilo di nuovo qui sotto.
general.recoveryCode.repeatCodeModal.title=Ripeti il codice di ripristino
general.recoveryOngoing=Ripristino in corso
general.register=Registrarsi
general.registerNow=Si registri ora!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Il codice &egrave; troppo lungo
recovery_check_code.noAccess=Non ho il mio codice.
recovery_check_code.noCodeAccess=Conferma di non avere il codice di ripristino?
recovery_check_code.noCodeAccessInstructions=Se non ha pi&ugrave; il codice di ripristino, acceda ad AGOV help per contattare il supporto AGOV, che la assister&agrave; nel processo di ripristino.
recovery_check_noCode.banner.error=Troppi tentativi o codice di ripristino scaduto
recovery_check_noCode.instruction1=Il codice di ripristino inserito pu&ograve; essere scaduto o &egrave; stato inserito troppe volte.
recovery_check_noCode.instruction2=Si prega di andare alla guida di AGOV aiuto per contattare un agente dell'assistenza. Saranno in grado di aiutarla con il processo di recupero.
recovery_check_noCode.banner.error=Troppi tentativi
recovery_check_noCode.instruction1=&Egrave; stato inserito troppe volte il codice di ripristino.
recovery_check_noCode.instruction2=Si prega di chiudi il browser web e avvia nuovamente il recupero dell'account entro dieci minuti da <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Per procedere, inserire il nuovo codice.
recovery_code.instruction=Il codice di ripristino le aiuta ad accedere al suo conto in caso in cui lei abbia perso le credentiali di accesso. Per favore, conservi il codice di ripristino in un luogo sicuro.
recovery_code.newRecoveryCode=Introduzione del codice di ripristino

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="#453F4F"/>
<path d="M315.87 194.157L338.759 274.59L372.321 288.431L370.709 312.806L292.056 339.054L295.324 204.15L308.885 192.119C311.253 190.018 315.004 191.112 315.87 194.157Z" fill="#2F2E43"/>
<path d="M254.071 99.3203C258.34 75.2985 281.274 59.2858 305.296 63.5551C329.318 67.8243 345.331 90.7588 341.062 114.781C337.599 134.263 321.86 148.474 303.221 150.874L284.936 204.949L248.42 161.61C248.42 161.61 259.776 151.461 267.106 139.043C256.753 129.168 251.38 114.463 254.071 99.3203Z" fill="#F3C6C8"/>
<path d="M300.903 178.872L241.344 136.491C241.344 136.491 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.248 184.505 223.096C180.767 265.943 186.307 388.999 186.307 388.999L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.619 300.903 178.872Z" fill="#1778D3"/>
<path d="M228.184 159.93C228.184 159.93 275.707 179.436 282.199 202.795" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.456L313.893 337.777L317.75 304.922L394.424 286.427C397.202 281.312 402.465 277.057 409.186 275.18C420.947 271.895 432.684 277.123 435.402 286.855C438.121 296.588 430.791 307.141 419.03 310.426C412.309 312.303 405.603 311.391 400.576 308.456Z" fill="#F3C6C8"/>
<path d="M281.991 290.319L266.001 213.382C266.001 213.382 233.372 151.67 191.579 195.333C191.579 195.333 238.434 350.645 264.171 352.381C289.907 354.117 322.346 336.691 322.346 336.691L326.292 296.448L281.991 290.319Z" fill="#1778D3"/>
<path d="M191.582 195.328C191.582 195.328 238.436 350.64 264.173 352.376C289.909 354.112 322.348 336.686 322.348 336.686" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.442L281.993 290.313L266.004 213.375" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.675C265.066 137.675 265.15 113.706 277.44 105.926C289.703 98.1636 286.701 114.495 286.701 114.495L293.981 114.82C293.981 114.82 296.902 98.938 311.084 99.8077L307.313 78.9529C307.313 78.9529 338.84 94.1981 340.607 91.2217C354.515 67.8019 291.481 27.9758 262.264 61.5896C216.823 113.87 265.066 137.675 265.066 137.675Z" fill="#BE7800"/>
<rect x="436.242" y="218.391" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.391)" fill="#9268E9"/>
<path d="M405.463 303.885L318.78 333.207L322.636 300.352L399.31 281.857C402.089 276.742 407.352 272.487 414.073 270.61C425.833 267.325 437.571 272.552 440.289 282.285C443.007 292.018 435.677 302.57 423.917 305.855C417.195 307.732 410.49 306.82 405.463 303.885Z" fill="#F3C6C8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="white"/>
<path d="M315.87 194.156L338.759 274.589L372.321 288.429L370.709 312.805L292.056 339.053L295.324 204.149L308.885 192.117C311.253 190.016 315.004 191.11 315.87 194.156Z" fill="#2F2E43"/>
<path d="M254.069 99.3193C258.338 75.2975 281.272 59.2848 305.294 63.5541C329.316 67.8234 345.329 90.7578 341.06 114.78C337.597 134.262 321.858 148.473 303.219 150.873L284.934 204.948L248.418 161.609C248.418 161.609 259.774 151.46 267.104 139.042C256.751 129.167 251.378 114.462 254.069 99.3193Z" fill="#E29295"/>
<path d="M300.903 178.872L241.344 136.492C241.344 136.492 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.249 184.505 223.096C180.767 265.943 186.307 389 186.307 389L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.62 300.903 178.872Z" fill="#2F2E43"/>
<path d="M228.184 159.928C228.184 159.928 275.707 179.434 282.199 202.793" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.455L313.893 337.776L317.75 304.921L394.424 286.427C397.202 281.311 402.465 277.057 409.186 275.179C420.947 271.895 432.684 277.122 435.402 286.855C438.121 296.588 430.791 307.14 419.03 310.425C412.309 312.302 405.603 311.39 400.576 308.455Z" fill="#E29295"/>
<path d="M281.991 290.315L266.001 213.378C266.001 213.378 233.372 151.667 191.579 195.329C191.579 195.329 238.434 350.641 264.171 352.377C289.907 354.113 322.346 336.687 322.346 336.687L326.292 296.444L281.991 290.315Z" fill="#2F2E43"/>
<path d="M191.582 195.329C191.582 195.329 238.436 350.64 264.173 352.377C289.909 354.113 322.348 336.687 322.348 336.687" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.444L281.993 290.315L266.004 213.377" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.676C265.066 137.676 265.15 113.707 277.44 105.927C289.703 98.1645 286.701 114.496 286.701 114.496L293.981 114.821C293.981 114.821 296.902 98.939 311.084 99.8087L307.313 78.9539C307.313 78.9539 338.84 94.199 340.607 91.2226C354.515 67.8029 291.481 27.9768 262.264 61.5906C216.823 113.871 265.066 137.676 265.066 137.676Z" fill="#2F2E43"/>
<rect x="436.242" y="218.39" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.39)" fill="#734BC5"/>
<path d="M405.461 303.882L318.778 333.203L322.634 300.348L399.308 281.853C402.087 276.738 407.35 272.484 414.071 270.606C425.831 267.322 437.569 272.549 440.287 282.282C443.005 292.014 435.675 302.567 423.915 305.852C417.194 307.729 410.488 306.817 405.461 303.882Z" fill="#E29295"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,148 @@
class ProvidePhoneNumber {
modal;
laterModal;
providePhoneNumberLaterButton;
phoneNumberInput;
agovInputPhoneNumberInput;
repeatPhoneNumberInput;
agovInputRepeatPhoneNumberInput;
constructor() {
this.modal = document.querySelector('#modal');
this.laterModal = document.querySelector('#laterModal');
this.providePhoneNumberLaterButton = document.querySelector('#providePhoneNumberLaterButton');
this.phoneNumberInput = document.querySelector('#phoneNumberInput');
this.agovInputPhoneNumberInput = document.querySelector('#agovInputPhoneNumberInput');
this.agovInputRepeatPhoneNumberInput = document.querySelector('#agovInputRepeatPhoneNumberInput');
this.repeatPhoneNumberInput = document.querySelector('#repeatPhoneNumberInput');
document.querySelector('#laterCheckbox').checked = true;
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.providePhoneNumberLaterButton.addEventListener('click', () => {
this.setVisible(this.laterModal);
});
document.querySelector('#laterModalBack').addEventListener('click', () => {
this.resetValidation(this.agovInputPhoneNumberInput);
this.setInvisible(this.laterModal);
});
document.querySelector('#repeatPhoneNumberModalBack').addEventListener('click', () => {
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.setInvisible(this.modal);
});
document.querySelector('#repeatPhoneNumberModalContinue').addEventListener('click', () => {
if (this.validateInput(this.agovInputRepeatPhoneNumberInput)) {
this.evaluatePhoneNumbersAndSubmit();
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
}
});
document.querySelector('#providePhoneNumberContinueButton').addEventListener('click', () => {
if (this.validateInput(this.agovInputPhoneNumberInput)) {
this.repeatPhoneNumberInput.value = '';
this.initializePhoneInput(this.repeatPhoneNumberInput);
this.addPhoneInputEventHandlers(this.repeatPhoneNumberInput);
this.resetValidation(this.agovInputRepeatPhoneNumberInput);
this.showErrorBanner(false);
this.setVisible(this.modal);
}
});
}
addPhoneInputEventHandlers(phoneInputElement) {
phoneInputElement.addEventListener('input', () => {
this.formatAndEmitPhoneNumberValue(phoneInputElement);
});
phoneInputElement.addEventListener('countrychange', () => {
this.onPhoneNumberCountryChange(phoneInputElement);
});
}
initializePhoneInput(inputElement) {
window.phoneNumberUtils.initializePhoneNumberField(inputElement);
if (inputElement.value) {
window.phoneNumberUtils.setNumber(inputElement.value);
this.formatAndEmitPhoneNumberValue(inputElement);
}
else {
window.phoneNumberUtils.formatAfterCountryChange();
inputElement.value = window.phoneNumberUtils.getInputValue();
}
}
onPhoneNumberCountryChange(inputElement) {
inputElement.value = window.phoneNumberUtils.formatAfterCountryChange();
}
formatAndEmitPhoneNumberValue(inputElement) {
inputElement.value = window.phoneNumberUtils.formatUsingInputValue();
}
resetValidation(agovInput) {
agovInput.validity = true;
}
validateInput(agovInput) {
const innerInput = agovInput.querySelector('input');
if (innerInput.value.trim().length === 0) {
agovInput.supportingText = 0;
agovInput.focus();
agovInput.validity = false;
return false;
}
else if (!window.phoneNumberUtils.validatePhoneNumber(false, true)) {
agovInput.supportingText = 2;
agovInput.focus();
agovInput.validity = false;
return false;
}
return true;
}
setInvisible(modalElement) {
window.utils.changeDisplay(modalElement, 'hidden', 'block');
}
setVisible(modalElement) {
window.utils.changeDisplay(modalElement, 'block', 'hidden');
const isMobile = !!/(iPhone|Android)/.test(window.navigator.userAgent);
if (isMobile) {
modalElement.classList.add('mobileDrawer');
document.dispatchEvent(new Event('initDrawerPopup'));
}
}
arePhoneNumbersEqual() {
const phoneNumber = this.phoneNumberInput.value.trim();
const repeatedPhoneNumber = this.repeatPhoneNumberInput.value.trim();
return phoneNumber === repeatedPhoneNumber;
}
evaluatePhoneNumbersAndSubmit() {
if (this.arePhoneNumbersEqual()) {
document.querySelector('#mobile').value = this.repeatPhoneNumberInput.value.trim().replaceAll(' ', '');
document.querySelector('#submit').click();
}
else {
this.setInvisible(this.modal);
this.showErrorBanner(true);
}
}
showErrorBanner(visible) {
const errorBanner = document.getElementById('errorBanner');
if (visible) {
window.utils.changeDisplay(errorBanner, 'block', 'hidden');
}
else {
window.utils.changeDisplay(errorBanner, 'hidden', 'block');
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.dispatchEvent(new Event('initPhoneNumberUtils'));
window.providePhoneNumber = new ProvidePhoneNumber();
});

View File

@ -0,0 +1,221 @@
#parse("${templatePath}/header.vm")
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<agov-backdrop></agov-backdrop>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-8 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("providePhoneNumber.title")
</h3>
</div>
<div class="flex flex-col gap-8">
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 hidden"
id="errorBanner">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.errorBanner")
</p>
</div>
<div class="flex flex-col gap-4">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.description")
</p>
<agov-input
id="agovInputPhoneNumberInput"
data-label="$text.get("providePhoneNumber.inputLabel")"
data-id="phoneNumberInput"
data-name="phoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
</div>
</div>
<div class="flex flex-col gap-4">
<div class="info flex rounded-xl bg-info-background dark:bg-dark-info-background items-center p-4">
<i class="fa-regular fa-info-circle rounded-full p-3 text-info dark:text-dark-info bg-info/10 dark:bg-dark-info-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.banner")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex flex-col-reverse sm:flex-row gap-4">
<agov-button
id="providePhoneNumberLaterButton"
class="w-full"
data-style="secondary"
data-label="$text.get("loainfo.later")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
id="providePhoneNumberContinueButton"
class="w-full"
data-style="primary"
data-label="$text.get("providePhoneNumber.saveButtonText")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden block sm:hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number-dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:block dark:sm:hidden dark:md:block">
</div>
</div>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.modal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.modal.description")
</p>
</div>
<agov-input
id="agovInputRepeatPhoneNumberInput"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="repeatPhoneNumberInput"
data-name="repeatPhoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="hidden flex flex-col flex-auto block">
<agov-input
id="agovInputMobile"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="mobile"
data-name="mobile"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true">
</agov-input>
<agov-button
class="basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
class="block"
id="repeatPhoneNumberModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
class="block"
id="repeatPhoneNumberModalContinue"
data-style="primary"
data-label="$text.get("general.continue")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
</div>
<div id="laterModal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.laterModal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-4" id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description2")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description3")
</p>
</div>
<div class="w-full sm:static mt-auto sm:justify-items-end">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="laterModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-button
id="ask_mobile_continue"
data-name="submit"
data-value="submit"
data-id="submit"
data-label="$text.get("general.continue")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input id="laterCheckbox" class="hidden" type="checkbox" name="skip" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="${login.appDataPath}/static/js-code/ask_mobile.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -3,7 +3,7 @@
$text.get("footer.text")
<a target="_blank" class='text-hyperlink dark:text-dark-hyperlink underline' href='$text.get("footer.link")'>$text.get("footer.link.label")</a>
</div>
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="${login.appDataPath}/static/bundle.js"></script>
</body>

View File

@ -1,139 +1,128 @@
#parse("${templatePath}/header.vm")
<agov-backdrop></agov-backdrop>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("recovery_check_code.noCodeAccess")
</h4>
<div id="modalDescription" class="mb-20">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.noCodeAccessInstructions")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="recovery_check_code"
class="block"
data-style="secondary"
data-label="$text.get("general.cancel")"
data-type="button"
data-fullwidth="true">
</agov-button>
<a href="$text.get("general.help.link")" target="_blank" rel="noopener noreferrer">
<agov-button
class="block"
data-label="$text.get("general.goAGOVHelp")"
data-type="button"
data-fullwidth="true">
</agov-button>
</a>
</div>
</div>
</div>
</div>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<span id="spinner" class="hidden absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-30">
<img src="${login.appDataPath}/static/images/spinner.svg" class="animate-spin block dark:hidden">
<img src="${login.appDataPath}/static/images/spinner-dark.svg" class="animate-spin hidden dark:block">
</span>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-6">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
#end
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_check_code.instruction")
</p>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
#if (($error.value == "locked"))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.banner.error")
</p>
</div>
<div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction2")
</p>
</div>
#else
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
#else
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
</div>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<form class="hidden"
id="$gui.name"
name="$gui.name"
method="POST"
target="_self"
action="$formTarget"
autocomplete="off"
accept-charset="UTF-8">
<agov-button
data-name="submit"
data-id="submitFormButton"
data-value="submit"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="no_code" id="noCodeCheckbox" type="checkbox" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
</div>
<script src="${login.appDataPath}/static/js-code/recovery_check_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -10,45 +10,47 @@
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
</p>
</div>
</div>
</div>
<agov-button
id="showCode"
class="block basis-full mb-20"
data-style="secondary"
data-label="<i class='fa-regular fa-eye align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Reveal code"
data-label="$text.get("general.recoveryCode.reveal")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -59,7 +61,7 @@
<agov-button
class="block basis-full"
data-style="secondary"
data-label="<i class='fa-regular fa-arrow-down-to-line align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Download as PDF"
data-label="$text.get("general.recoveryCode.downloadPdf")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -96,11 +98,9 @@
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("general.recoveryCode.repeatCodeModal.title")
</h4>
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
@ -142,11 +142,11 @@
accept-charset="UTF-8"
class="hidden">
<agov-button
class="block basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
class="block basis-full"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
@ -160,5 +160,4 @@
<script src="${login.appDataPath}/static/js-code/recovery_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=&Auml;ndern
general.email=E-Mail
general.email.address=E-Mail-Adresse
general.entryCode=Code-Eingabe
general.fieldRequired=Erforderliches Feld.
general.getStarted=Get started
general.goAGOVHelp=Weiter zur AGOV help
general.goAccessApp=Login mit AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Sicherheitsschl&uuml;ssel-Login starten
general.or=ODER
general.otherOptions=WEITERE OPTIONEN
general.recovery=Wiederherstellung
general.recoveryCode.inputLabel=Wiederherstellungscode
general.recoveryCode.repeatCodeError=Der von Ihnen eingegebene Code war nicht korrekt. Bitte vergewissern Sie sich, dass Sie ihn richtig abgespeichert haben, und fahren Sie dann mit der erneuten Eingabe fort.
general.recoveryCode.repeatCodeModal.description=Ein verlorener oder falsch gespeicherter Wiederherstellungscode kann die Wiederherstellung Ihres Kontos erschweren. Um sicherzustellen, dass Sie Ihren Code richtig gespeichert haben, wiederholen Sie ihn bitte unten.
general.recoveryCode.repeatCodeModal.title=Wiederherstellungscode wiederholen
general.recoveryOngoing=Wiederherstellung nicht abgeschlossen
general.register=Registrieren
general.registerNow=Jetzt registrieren!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Eingegebener Code ist zu lang
recovery_check_code.noAccess=Ich kann auf meinen Code nicht zugreifen
recovery_check_code.noCodeAccess=Sind Sie sicher, dass Sie auf Ihren Wiederherstellungscode nicht zugreifen k&ouml;nnen?
recovery_check_code.noCodeAccessInstructions=Wenn Sie auf Ihren Wiederherstellungscode nicht mehr zugreifen k&ouml;nnen, gehen Sie bitte zur AGOV-Hilfe, um jemanden vom AGOV-Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Versuche oder Ihr Wiederherstellungscode ist abgelaufen.
recovery_check_noCode.instruction1=Der von Ihnen eingegebene Wiederherstellungscode ist m&ouml;glicherweise abgelaufen oder Sie haben zu oft versucht, einen Code einzugeben.
recovery_check_noCode.instruction2=Gehen Sie bitte zur AGOV-Hilfe, um jemanden vom Support zu kontaktieren. Die Person wird Sie beim Wiederherstellungsprozess unterst&uuml;tzen.
recovery_check_noCode.banner.error=Zu viele Fehlversuche.
recovery_check_noCode.instruction1=Sie haben zu oft versucht, einen Wiederherstellungscode einzugeben.
recovery_check_noCode.instruction2=Bitte schliessen Sie den Webbrowser und starten Sie die Kontowiederherstellung in zehn Minuten erneut unter <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Bitte enth&uuml;llen Sie den Code, um fortfahren zu k&ouml;nnen.
recovery_code.instruction=Der Wiederherstellungscode hilft Ihnen, Zugriff auf Ihr AGOV-Login zu erhalten, falls Sie alle Ihre Login-Faktoren verloren haben. Bitte bewahren Sie den Wiederherstellungscode an einem sicheren Ort auf.
recovery_code.newRecoveryCode=Einf&uuml;hrung von Wiederherstellungscode

View File

@ -59,16 +59,19 @@ general.loginSecurityKey=Start Security key login
general.or=OR
general.otherOptions=OTHER OPTIONS
general.recovery=Recovery
general.recoveryCode.downloadPdf=Download as PDF
general.recoveryCode.inputLabel=Recovery code
general.recoveryCode.repeatCodeError=The code you entered was incorrect. Please ensure you have stored it correctly, then continue to resubmit.
general.recoveryCode.repeatCodeModal.description=A lost or incorrectly stored recovery code can make it more difficult to recover your account. To ensure you have recorded your code correctly, please repeat it below.
general.recoveryCode.repeatCodeModal.title=Repeat recovery code
general.recoveryCode.reveal=Reveal recovery code
general.recoveryOngoing=Ongoing recovery
general.register=Register
general.registerNow=Register now!
general.registration=Registration
general.securityKey=Security key
general.skip.content=Skip to main content
general.wrongPhoneNumber=Please enter a valid phone number
generic.auth.error.message=There was a service interruption. We are working on it.
generic.auth.error.next.steps=Please try again later. Please consult AGOV help if the problem persists.
generic.auth.error.subtitle=Something went wrong
@ -132,6 +135,19 @@ op-onboarding.intro.message3=If you are using AGOV, and your account doesn't mee
op-onboarding.intro.title=START
op-onboarding.onboarding=AGOV op on-boarding
op-onboarding.process.message=During the processing something went wrong. Please contact AGOV support if necessary and ask also for a new on-boarding link.
providePhoneNumber.banner=Phone number must be able to receive SMS.<br>This phone number will not be used to contact you.
providePhoneNumber.description=AGOV now supports recovery with your phone number. This will allow you to continue with an SMS during recovery if you have lost access to your recovery code.
providePhoneNumber.errorBanner=Phone numbers do not match. Please try again.
providePhoneNumber.inputLabel=Phone number (optional)
providePhoneNumber.laterModal.description1=Without a phone number, a recovery of your account might take up to 4 days if you lose access to your recovery code.
providePhoneNumber.laterModal.description2=Adding a phone number helps you to recover your account in a matter of minutes.
providePhoneNumber.laterModal.description3=This phone number will not be used to contact you.
providePhoneNumber.laterModal.title=Continue without a phone number?
providePhoneNumber.modal.description=An incorrectly stored phone number can make it more difficult to recover your account. To ensure you have recorded your phone number correctly, please repeat it below.
providePhoneNumber.modal.inputLabel=Phone number
providePhoneNumber.modal.title=Repeat phone number
providePhoneNumber.saveButtonText=Save
providePhoneNumber.title=Add phone number
recovery_accessapp_auth.accessAppRegistered=AGOV access app already registered
recovery_accessapp_auth.instruction1=You have already registered a new AGOV access app !!!ACCESS_APP_NAME!!! as part of the recovery process.
recovery_accessapp_auth.instruction2=Please use !!!ACCESS_APP_NAME!!! to identify you.
@ -144,9 +160,9 @@ recovery_check_code.invalid.code.tooLong=The code is too long
recovery_check_code.noAccess=I do not have access to my code
recovery_check_code.noCodeAccess=Are you sure you don't have access to your recovery code?
recovery_check_code.noCodeAccessInstructions=If you have lost access to your recovery code please go to AGOV help in order to contact a AGOV support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts or your recovery code has expired.
recovery_check_noCode.instruction1=The recovery code you have entered might have expired or you might have tried to enter it too many times.
recovery_check_noCode.instruction2=Please go to AGOV help in order to contact a support agent. They will be able to help you with the recovery process.
recovery_check_noCode.banner.error=Too many attempts.
recovery_check_noCode.instruction1=You might have tried to enter the recovery code too many times.
recovery_check_noCode.instruction2=Please close the web browser and start the account recovery again in ten minutes from <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Please reveal your new code to be able to continue.
recovery_code.instruction=Recovery codes help you gain access to your account in case you lost all of your login factors. Please store the recovery code in a safe place.
recovery_code.newRecoveryCode=Introducing Recovery Code

View File

@ -48,6 +48,7 @@ general.edit=Editer
general.email=E-mail
general.email.address=Adresse e-mail
general.entryCode=Entrer le code
general.fieldRequired=Champ requis.
general.getStarted=D&eacute;marrer
general.goAGOVHelp=Rendez-vous sur AGOV help
general.goAccessApp=Login avec AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=D&eacute;marrer la connexion avec la cl&eacute; de s&ea
general.or=OU
general.otherOptions=AUTRES OPTIONS
general.recovery=R&eacute;cup&eacute;ration
general.recoveryCode.inputLabel=Code de r&eacute;cup&eacute;ration
general.recoveryCode.repeatCodeError=Le code que vous avez saisi est incorrect. Veuillez vous assurer que vous l'avez enregistr&eacute; correctement, puis essayer de le soumettre &agrave; nouveau.
general.recoveryCode.repeatCodeModal.description=Un code de r&eacute;cup&eacute;ration perdu ou mal enregistr&eacute; peut rendre la r&eacute;cup&eacute;ration de votre compte plus difficile. Pour vous assurer que vous avez correctement enregistr&eacute; votre code, veuillez le r&eacute;p&eacute;ter ci-dessous.
general.recoveryCode.repeatCodeModal.title=R&eacute;p&eacute;ter le code de r&eacute;cup&eacute;ration
general.recoveryOngoing=R&eacute;cup&eacute;ration en cours
general.register=Cr&eacute;er un compte
general.registerNow=Enregistrez-vous d&egrave;s maintenant!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Le code est trop long
recovery_check_code.noAccess=Je n&rsquo;ai pas acc&egrave;s &agrave; mon code de r&eacute;cup&eacute;ration
recovery_check_code.noCodeAccess=&Ecirc;tes-vous s&ucirc;r de ne pas avoir acc&egrave;s &agrave; votre code de r&eacute;cup&eacute;ration ?
recovery_check_code.noCodeAccessInstructions=En cas de perte de votre code de r&eacute;cup&eacute;ration, veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance AGOV. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives ou expiration de votre code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction1=Le code de r&eacute;cup&eacute;ration que vous avez saisi a peut-&ecirc;tre expir&eacute; ou vous avez peut-&ecirc;tre essay&eacute; de le saisir trop de fois.
recovery_check_noCode.instruction2=Veuillez vous rendre sur AGOV help et contacter le service d&rsquo;assistance. Un agent pourra vous aider dans le processus de r&eacute;cup&eacute;ration.
recovery_check_noCode.banner.error=Trop de tentatives.
recovery_check_noCode.instruction1=Vous avez peut-&ecirc;tre essay&eacute; de saisir trop de fois le code de r&eacute;cup&eacute;ration.
recovery_check_noCode.instruction2=Veuillez fermer le navigateur et relancer la r&eacute;cup&eacute;ration du compte dans dix minutes depuis <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Veuillez indiquer votre nouveau code pour pouvoir continuer.
recovery_code.instruction=Les codes de r&eacute;cup&eacute;ration vous permettent d'acc&eacute;der &agrave; votre compte au cas o&ugrave; vous auriez perdu tous vos identifiants. Conservez le code de r&eacute;cup&eacute;ration en lieu s&ucirc;r.
recovery_code.newRecoveryCode=Introduction du code de r&eacute;cup&eacute;ration

View File

@ -48,6 +48,7 @@ general.edit=Modificare
general.email=e-mail
general.email.address=Indirizzo e-mail
general.entryCode=Codice
general.fieldRequired=Campo obbligatorio.
general.getStarted=Iniziare
general.goAGOVHelp=Vai ad AGOV help
general.goAccessApp=Login con AGOV access
@ -58,6 +59,10 @@ general.loginSecurityKey=Iniziare il login con la chiave di sicurezza
general.or=O
general.otherOptions=ALTRE OPZIONI
general.recovery=Ripristino
general.recoveryCode.inputLabel=Codice di ripristino
general.recoveryCode.repeatCodeError=Il codice inserito non &egrave; corretto. Assicurati di averlo memorizzato correttamente, quindi riprova a inviarlo.
general.recoveryCode.repeatCodeModal.description=Un codice di ripristino perso o memorizzato in modo errato pu&ograve; rendere pi&ugrave; difficile il recupero del tuo account. Per assicurarti di aver registrato correttamente il codice, inseriscilo di nuovo qui sotto.
general.recoveryCode.repeatCodeModal.title=Ripeti il codice di ripristino
general.recoveryOngoing=Ripristino in corso
general.register=Registrarsi
general.registerNow=Si registri ora!
@ -139,9 +144,9 @@ recovery_check_code.invalid.code.tooLong=Il codice &egrave; troppo lungo
recovery_check_code.noAccess=Non ho il mio codice.
recovery_check_code.noCodeAccess=Conferma di non avere il codice di ripristino?
recovery_check_code.noCodeAccessInstructions=Se non ha pi&ugrave; il codice di ripristino, acceda ad AGOV help per contattare il supporto AGOV, che la assister&agrave; nel processo di ripristino.
recovery_check_noCode.banner.error=Troppi tentativi o codice di ripristino scaduto
recovery_check_noCode.instruction1=Il codice di ripristino inserito pu&ograve; essere scaduto o &egrave; stato inserito troppe volte.
recovery_check_noCode.instruction2=Si prega di andare alla guida di AGOV aiuto per contattare un agente dell'assistenza. Saranno in grado di aiutarla con il processo di recupero.
recovery_check_noCode.banner.error=Troppi tentativi
recovery_check_noCode.instruction1=&Egrave; stato inserito troppe volte il codice di ripristino.
recovery_check_noCode.instruction2=Si prega di chiudi il browser web e avvia nuovamente il recupero dell'account entro dieci minuti da <a class='link' href='https://agov.ch/me'>https://agov.ch/me</a>.
recovery_code.banner.error=Per procedere, inserire il nuovo codice.
recovery_code.instruction=Il codice di ripristino le aiuta ad accedere al suo conto in caso in cui lei abbia perso le credentiali di accesso. Per favore, conservi il codice di ripristino in un luogo sicuro.
recovery_code.newRecoveryCode=Introduzione del codice di ripristino

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="#453F4F"/>
<path d="M315.87 194.157L338.759 274.59L372.321 288.431L370.709 312.806L292.056 339.054L295.324 204.15L308.885 192.119C311.253 190.018 315.004 191.112 315.87 194.157Z" fill="#2F2E43"/>
<path d="M254.071 99.3203C258.34 75.2985 281.274 59.2858 305.296 63.5551C329.318 67.8243 345.331 90.7588 341.062 114.781C337.599 134.263 321.86 148.474 303.221 150.874L284.936 204.949L248.42 161.61C248.42 161.61 259.776 151.461 267.106 139.043C256.753 129.168 251.38 114.463 254.071 99.3203Z" fill="#F3C6C8"/>
<path d="M300.903 178.872L241.344 136.491C241.344 136.491 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.248 184.505 223.096C180.767 265.943 186.307 388.999 186.307 388.999L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.619 300.903 178.872Z" fill="#1778D3"/>
<path d="M228.184 159.93C228.184 159.93 275.707 179.436 282.199 202.795" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.456L313.893 337.777L317.75 304.922L394.424 286.427C397.202 281.312 402.465 277.057 409.186 275.18C420.947 271.895 432.684 277.123 435.402 286.855C438.121 296.588 430.791 307.141 419.03 310.426C412.309 312.303 405.603 311.391 400.576 308.456Z" fill="#F3C6C8"/>
<path d="M281.991 290.319L266.001 213.382C266.001 213.382 233.372 151.67 191.579 195.333C191.579 195.333 238.434 350.645 264.171 352.381C289.907 354.117 322.346 336.691 322.346 336.691L326.292 296.448L281.991 290.319Z" fill="#1778D3"/>
<path d="M191.582 195.328C191.582 195.328 238.436 350.64 264.173 352.376C289.909 354.112 322.348 336.686 322.348 336.686" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.442L281.993 290.313L266.004 213.375" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.675C265.066 137.675 265.15 113.706 277.44 105.926C289.703 98.1636 286.701 114.495 286.701 114.495L293.981 114.82C293.981 114.82 296.902 98.938 311.084 99.8077L307.313 78.9529C307.313 78.9529 338.84 94.1981 340.607 91.2217C354.515 67.8019 291.481 27.9758 262.264 61.5896C216.823 113.87 265.066 137.675 265.066 137.675Z" fill="#BE7800"/>
<rect x="436.242" y="218.391" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.391)" fill="#9268E9"/>
<path d="M405.463 303.885L318.78 333.207L322.636 300.352L399.31 281.857C402.089 276.742 407.352 272.487 414.073 270.61C425.833 267.325 437.571 272.552 440.289 282.285C443.007 292.018 435.677 302.57 423.917 305.855C417.195 307.732 410.49 306.82 405.463 303.885Z" fill="#F3C6C8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="white"/>
<path d="M315.87 194.156L338.759 274.589L372.321 288.429L370.709 312.805L292.056 339.053L295.324 204.149L308.885 192.117C311.253 190.016 315.004 191.11 315.87 194.156Z" fill="#2F2E43"/>
<path d="M254.069 99.3193C258.338 75.2975 281.272 59.2848 305.294 63.5541C329.316 67.8234 345.329 90.7578 341.06 114.78C337.597 134.262 321.858 148.473 303.219 150.873L284.934 204.948L248.418 161.609C248.418 161.609 259.774 151.46 267.104 139.042C256.751 129.167 251.378 114.462 254.069 99.3193Z" fill="#E29295"/>
<path d="M300.903 178.872L241.344 136.492C241.344 136.492 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.249 184.505 223.096C180.767 265.943 186.307 389 186.307 389L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.62 300.903 178.872Z" fill="#2F2E43"/>
<path d="M228.184 159.928C228.184 159.928 275.707 179.434 282.199 202.793" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.455L313.893 337.776L317.75 304.921L394.424 286.427C397.202 281.311 402.465 277.057 409.186 275.179C420.947 271.895 432.684 277.122 435.402 286.855C438.121 296.588 430.791 307.14 419.03 310.425C412.309 312.302 405.603 311.39 400.576 308.455Z" fill="#E29295"/>
<path d="M281.991 290.315L266.001 213.378C266.001 213.378 233.372 151.667 191.579 195.329C191.579 195.329 238.434 350.641 264.171 352.377C289.907 354.113 322.346 336.687 322.346 336.687L326.292 296.444L281.991 290.315Z" fill="#2F2E43"/>
<path d="M191.582 195.329C191.582 195.329 238.436 350.64 264.173 352.377C289.909 354.113 322.348 336.687 322.348 336.687" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.444L281.993 290.315L266.004 213.377" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.676C265.066 137.676 265.15 113.707 277.44 105.927C289.703 98.1645 286.701 114.496 286.701 114.496L293.981 114.821C293.981 114.821 296.902 98.939 311.084 99.8087L307.313 78.9539C307.313 78.9539 338.84 94.199 340.607 91.2226C354.515 67.8029 291.481 27.9768 262.264 61.5906C216.823 113.871 265.066 137.676 265.066 137.676Z" fill="#2F2E43"/>
<rect x="436.242" y="218.39" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.39)" fill="#734BC5"/>
<path d="M405.461 303.882L318.778 333.203L322.634 300.348L399.308 281.853C402.087 276.738 407.35 272.484 414.071 270.606C425.831 267.322 437.569 272.549 440.287 282.282C443.005 292.014 435.675 302.567 423.915 305.852C417.194 307.729 410.488 306.817 405.461 303.882Z" fill="#E29295"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,148 @@
class ProvidePhoneNumber {
modal;
laterModal;
providePhoneNumberLaterButton;
phoneNumberInput;
agovInputPhoneNumberInput;
repeatPhoneNumberInput;
agovInputRepeatPhoneNumberInput;
constructor() {
this.modal = document.querySelector('#modal');
this.laterModal = document.querySelector('#laterModal');
this.providePhoneNumberLaterButton = document.querySelector('#providePhoneNumberLaterButton');
this.phoneNumberInput = document.querySelector('#phoneNumberInput');
this.agovInputPhoneNumberInput = document.querySelector('#agovInputPhoneNumberInput');
this.agovInputRepeatPhoneNumberInput = document.querySelector('#agovInputRepeatPhoneNumberInput');
this.repeatPhoneNumberInput = document.querySelector('#repeatPhoneNumberInput');
document.querySelector('#laterCheckbox').checked = true;
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.providePhoneNumberLaterButton.addEventListener('click', () => {
this.setVisible(this.laterModal);
});
document.querySelector('#laterModalBack').addEventListener('click', () => {
this.resetValidation(this.agovInputPhoneNumberInput);
this.setInvisible(this.laterModal);
});
document.querySelector('#repeatPhoneNumberModalBack').addEventListener('click', () => {
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
this.setInvisible(this.modal);
});
document.querySelector('#repeatPhoneNumberModalContinue').addEventListener('click', () => {
if (this.validateInput(this.agovInputRepeatPhoneNumberInput)) {
this.evaluatePhoneNumbersAndSubmit();
this.initializePhoneInput(this.phoneNumberInput);
this.addPhoneInputEventHandlers(this.phoneNumberInput);
}
});
document.querySelector('#providePhoneNumberContinueButton').addEventListener('click', () => {
if (this.validateInput(this.agovInputPhoneNumberInput)) {
this.repeatPhoneNumberInput.value = '';
this.initializePhoneInput(this.repeatPhoneNumberInput);
this.addPhoneInputEventHandlers(this.repeatPhoneNumberInput);
this.resetValidation(this.agovInputRepeatPhoneNumberInput);
this.showErrorBanner(false);
this.setVisible(this.modal);
}
});
}
addPhoneInputEventHandlers(phoneInputElement) {
phoneInputElement.addEventListener('input', () => {
this.formatAndEmitPhoneNumberValue(phoneInputElement);
});
phoneInputElement.addEventListener('countrychange', () => {
this.onPhoneNumberCountryChange(phoneInputElement);
});
}
initializePhoneInput(inputElement) {
window.phoneNumberUtils.initializePhoneNumberField(inputElement);
if (inputElement.value) {
window.phoneNumberUtils.setNumber(inputElement.value);
this.formatAndEmitPhoneNumberValue(inputElement);
}
else {
window.phoneNumberUtils.formatAfterCountryChange();
inputElement.value = window.phoneNumberUtils.getInputValue();
}
}
onPhoneNumberCountryChange(inputElement) {
inputElement.value = window.phoneNumberUtils.formatAfterCountryChange();
}
formatAndEmitPhoneNumberValue(inputElement) {
inputElement.value = window.phoneNumberUtils.formatUsingInputValue();
}
resetValidation(agovInput) {
agovInput.validity = true;
}
validateInput(agovInput) {
const innerInput = agovInput.querySelector('input');
if (innerInput.value.trim().length === 0) {
agovInput.supportingText = 0;
agovInput.focus();
agovInput.validity = false;
return false;
}
else if (!window.phoneNumberUtils.validatePhoneNumber(false, true)) {
agovInput.supportingText = 2;
agovInput.focus();
agovInput.validity = false;
return false;
}
return true;
}
setInvisible(modalElement) {
window.utils.changeDisplay(modalElement, 'hidden', 'block');
}
setVisible(modalElement) {
window.utils.changeDisplay(modalElement, 'block', 'hidden');
const isMobile = !!/(iPhone|Android)/.test(window.navigator.userAgent);
if (isMobile) {
modalElement.classList.add('mobileDrawer');
document.dispatchEvent(new Event('initDrawerPopup'));
}
}
arePhoneNumbersEqual() {
const phoneNumber = this.phoneNumberInput.value.trim();
const repeatedPhoneNumber = this.repeatPhoneNumberInput.value.trim();
return phoneNumber === repeatedPhoneNumber;
}
evaluatePhoneNumbersAndSubmit() {
if (this.arePhoneNumbersEqual()) {
document.querySelector('#mobile').value = this.repeatPhoneNumberInput.value.trim().replaceAll(' ', '');
document.querySelector('#submit').click();
}
else {
this.setInvisible(this.modal);
this.showErrorBanner(true);
}
}
showErrorBanner(visible) {
const errorBanner = document.getElementById('errorBanner');
if (visible) {
window.utils.changeDisplay(errorBanner, 'block', 'hidden');
}
else {
window.utils.changeDisplay(errorBanner, 'hidden', 'block');
}
}
}
document.addEventListener('DOMContentLoaded', () => {
document.dispatchEvent(new Event('initPhoneNumberUtils'));
window.providePhoneNumber = new ProvidePhoneNumber();
});

View File

@ -0,0 +1,221 @@
#parse("${templatePath}/header.vm")
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<agov-backdrop></agov-backdrop>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-8 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("providePhoneNumber.title")
</h3>
</div>
<div class="flex flex-col gap-8">
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 hidden"
id="errorBanner">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.errorBanner")
</p>
</div>
<div class="flex flex-col gap-4">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.description")
</p>
<agov-input
id="agovInputPhoneNumberInput"
data-label="$text.get("providePhoneNumber.inputLabel")"
data-id="phoneNumberInput"
data-name="phoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
</div>
</div>
<div class="flex flex-col gap-4">
<div class="info flex rounded-xl bg-info-background dark:bg-dark-info-background items-center p-4">
<i class="fa-regular fa-info-circle rounded-full p-3 text-info dark:text-dark-info bg-info/10 dark:bg-dark-info-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.banner")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex flex-col-reverse sm:flex-row gap-4">
<agov-button
id="providePhoneNumberLaterButton"
class="w-full"
data-style="secondary"
data-label="$text.get("loainfo.later")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
id="providePhoneNumberContinueButton"
class="w-full"
data-style="primary"
data-label="$text.get("providePhoneNumber.saveButtonText")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden block sm:hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/provide-phone-number-dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:block dark:sm:hidden dark:md:block">
</div>
</div>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.modal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.modal.description")
</p>
</div>
<agov-input
id="agovInputRepeatPhoneNumberInput"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="repeatPhoneNumberInput"
data-name="repeatPhoneNumberInput"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true"
data-is_icon_padding_ignored="true"
data-email_invalid="$text.get("general.wrongPhoneNumber")"
data-email_required="$text.get("general.fieldRequired")">
</agov-input>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="hidden flex flex-col flex-auto block">
<agov-input
id="agovInputMobile"
data-label="$text.get("providePhoneNumber.modal.inputLabel")"
data-id="mobile"
data-name="mobile"
data-placeholder=""
data-value=""
data-type="tel"
data-autofocus="true">
</agov-input>
<agov-button
class="basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
class="block"
id="repeatPhoneNumberModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<agov-button
class="block"
id="repeatPhoneNumberModalContinue"
data-style="primary"
data-label="$text.get("general.continue")"
data-type="button"
data-fullwidth="true">
</agov-button>
</div>
</div>
</div>
</div>
</div>
<div id="laterModal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("providePhoneNumber.laterModal.title")
</h4>
<div class="flex flex-col gap-[72px]">
<div class="flex flex-col gap-4" id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description2")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("providePhoneNumber.laterModal.description3")
</p>
</div>
<div class="w-full sm:static mt-auto sm:justify-items-end">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="laterModalBack"
data-style="secondary"
data-label="$text.get("general.back")"
data-type="button"
data-fullwidth="true">
</agov-button>
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-button
id="ask_mobile_continue"
data-name="submit"
data-value="submit"
data-id="submit"
data-label="$text.get("general.continue")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input id="laterCheckbox" class="hidden" type="checkbox" name="skip" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="${login.appDataPath}/static/js-code/ask_mobile.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -3,7 +3,7 @@
$text.get("footer.text")
<a target="_blank" class='text-hyperlink dark:text-dark-hyperlink underline' href='$text.get("footer.link")'>$text.get("footer.link.label")</a>
</div>
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="${login.appDataPath}/static/bundle.js"></script>
</body>

View File

@ -1,139 +1,128 @@
#parse("${templatePath}/header.vm")
<agov-backdrop></agov-backdrop>
<div id="modal" class="fixed top-0 bottom-0 left-0 right-0 pb-20 z-50 hidden">
<div class="fixed top-0 bottom-0 left-0 right-0 backdrop-blur-[10px]" id="modal_light"></div>
<div class="fixed top-0 bottom-0 left-0 right-0 bg-[#E2E2E2E5]/80 dark:bg-[#111111]/90" id="modal_dark"></div>
<div id="drawer"
class="fixed bg-white dark:bg-surface-black rounded-[20px] p-10 w-11/12 sm:max-w-[660px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("recovery_check_code.noCodeAccess")
</h4>
<div id="modalDescription" class="mb-20">
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.noCodeAccessInstructions")
</p>
</div>
<div class="w-full sm:static mt-auto">
<div class="flex justify-end flex-col-reverse sm:flex-row gap-4">
<agov-button
id="recovery_check_code"
class="block"
data-style="secondary"
data-label="$text.get("general.cancel")"
data-type="button"
data-fullwidth="true">
</agov-button>
<a href="$text.get("general.help.link")" target="_blank" rel="noopener noreferrer">
<agov-button
class="block"
data-label="$text.get("general.goAGOVHelp")"
data-type="button"
data-fullwidth="true">
</agov-button>
</a>
</div>
</div>
</div>
</div>
<div id="mainContent" class="container mx-auto sm:mt-32 sm:max-w-full flex flex-auto sm:block">
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<span id="spinner" class="hidden absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-30">
<img src="${login.appDataPath}/static/images/spinner.svg" class="animate-spin block dark:hidden">
<img src="${login.appDataPath}/static/images/spinner-dark.svg" class="animate-spin hidden dark:block">
</span>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-6">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
#end
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_check_code.instruction")
</p>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block ">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
<div id="blurBackdrop" class="hidden absolute backdrop-blur-sm -top-1 -bottom-96 -left-4 -right-4 z-20"></div>
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">$text.get("general.recovery")</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">$text.get("general.entryCode")</h4>
</div>
#set($error = $gui.getGuiElem("lasterror"))
#if (($error.value && $error.value != ""))
#if (($error.value == "locked"))
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.banner.error")
</p>
</div>
<div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction1")
</p>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_noCode.instruction2")
</p>
</div>
#else
<div class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.codeIncorrect")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
#else
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_check_code.instruction")
</p>
#end
</div>
#set ($formTarget = $utils.escapeHtmlAttribute($gui.target.replaceAll('&?language=[^&]*','')))
<form id="$gui.name" name="$gui.name" method="POST" target="_self" action="$formTarget" autocomplete="off"
accept-charset="UTF-8"
class="flex flex-col flex-auto block">
<agov-input
id="recovery_code_input"
class="mb-4 py-16"
data-label="$text.get("recovery_check_code.enterRecoveryCode")"
data-isLabelHidden="true"
data-placeholder=""
data-id="code"
data-name="code"
data-value=""
data-type="text"
data-autofocus="true"
data-email_invalid="$text.get("recovery_check_code.invalid.code")"
data-email_too_long="$text.get("recovery_check_code.invalid.code.tooLong")"
data-email_required="$text.get("recovery_check_code.invalid.code.required")">
</agov-input>
<div class="w-full sm:static mt-auto mb-6 sm:mb-0">
<div class="flex flex-col flex-row-reverse gap-4">
<agov-button
id="recovery_code_btn"
class="block basis-full"
data-name="confirm"
data-value="confirm"
data-id="confirm"
data-label="$text.get("general.confirm")"
data-type="submit"
data-fullwidth="true">
</agov-button>
<agov-button
id="recovery_code_btn_cancel"
class="block basis-full"
data-style="frameless"
data-name="cancelFido2"
data-value="cancelFido2"
data-id="cancelFido2"
data-label="$text.get("recovery_check_code.noAccess")"
data-type="button"
data-fullwidth="true"
data-validate="false">
</agov-button>
</div>
</div>
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
</div>
<form class="hidden"
id="$gui.name"
name="$gui.name"
method="POST"
target="_self"
action="$formTarget"
autocomplete="off"
accept-charset="UTF-8">
<agov-button
data-name="submit"
data-id="submitFormButton"
data-value="submit"
data-type="submit"
data-fullwidth="true">
</agov-button>
<input class="hidden" name="no_code" id="noCodeCheckbox" type="checkbox" value="true">
<input class="hidden" name="authRequestId" type="hidden" value="$gui.getGuiElem('authRequestId').value"/>
</form>
<img alt="" src="${login.appDataPath}/static/images/recovery.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 dark:hidden hidden md:block">
<img alt="" src="${login.appDataPath}/static/images/recovery_dark.svg"
class="md:max-w-[520px] max-w-[350px] sm:max-w-[300px] w-full md:basis-1/2 hidden dark:md:block">
</div>
</div>
<script src="${login.appDataPath}/static/js-code/recovery_check_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -10,45 +10,47 @@
<div class="flex flex-col-reverse sm:flex-row justify-evenly items-center gap-5 w-full">
<div class="flex flex-col sm:bg-white sm:dark:bg-surface-black rounded-[20px] sm:px-10 sm:py-10 max-w-[550px] w-full
basis-full md:basis-1/2">
<div class="flex mb-6 items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white mb-2">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
<div class="flex flex-col gap-8">
<div class="flex items-baseline">
<h3 class="font-header text-h3 text-space-blue dark:text-white mr-3">
$text.get("general.login")
</h3>
<h4 class="font-header text-h4 text-disabled-grey dark:text-silver">
$text.get("recovery_code.newRecoveryCode")
</h4>
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
<div id="codeNotSeen"
class="error flex rounded-xl bg-error-background dark:bg-dark-error-background items-center p-4 mb-4 hidden">
<i class="fa-regular fa-exclamation-circle rounded-full p-3 text-error dark:text-dark-error bg-error/10 dark:bg-dark-error-icon mr-4 text-xl leading-none"></i>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.banner.error")
</p>
</div>
<p class="font-body text-body-l text-space-blue dark:text-white">
$text.get("recovery_code.instruction")
</p>
<div class="flex justify-center items-center relative mb-4 py-4 pr-4 pl-8 rounded-xl bg-indigo-light
dark:bg-purple-black">
<div id="codeBlur"
class="absolute top-0 bottom-0 left-0 right-0 backdrop-blur-sm rounded-xl z-50">
</div>
<div>
<p class="font-header text-h5 text-space-blue dark:text-white select-none"
id="recoveryCode">
$gui.getGuiElem('isiwebpasswd').value
</p>
<p class="font-body text-body-m text-space-blue dark:text-white text-center">
$text.get("recovery_code.validUntil")
$gui.getGuiElem('validTil').value
</p>
</div>
</div>
</div>
<agov-button
id="showCode"
class="block basis-full mb-20"
data-style="secondary"
data-label="<i class='fa-regular fa-eye align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Reveal code"
data-label="$text.get("general.recoveryCode.reveal")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -59,7 +61,7 @@
<agov-button
class="block basis-full"
data-style="secondary"
data-label="<i class='fa-regular fa-arrow-down-to-line align-middle text-xl text-indigo dark:text-lilac mr-2'></i>Download as PDF"
data-label="$text.get("general.recoveryCode.downloadPdf")"
data-type="button"
data-fullwidth="true">
</agov-button>
@ -96,11 +98,9 @@
<div id="modalTab" class="mb-6 cursor-pointer hidden">
<div class="w-10 h-1 rounded-full bg-light-grey dark:bg-ash mx-auto"></div>
</div>
<h4 id="modalTitle" class="font-header text-h4 text-space-blue dark:text-white mb-8">
$text.get("general.recoveryCode.repeatCodeModal.title")
</h4>
<div class="flex flex-col gap-8">
<div id="modalDescription">
<p class="font-body text-body-l text-space-blue dark:text-white">
@ -142,11 +142,11 @@
accept-charset="UTF-8"
class="hidden">
<agov-button
class="block basis-full"
data-name="submit"
data-id="submit"
data-value="submit"
data-type="submit"
class="block basis-full"
data-label="$text.get("general.continue")"
data-fullwidth="true">
</agov-button>
@ -160,5 +160,4 @@
<script src="${login.appDataPath}/static/js-code/recovery_code.js">
</script>
#parse("${templatePath}/footer.vm")

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-0d4f317ecee462cf51ce783f04b4590ea6d580fb"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/proxy-idm"
credentials: "git-credentials"
keystores:

View File

@ -682,6 +682,11 @@
<mime-type>application/x-font-ttf</mime-type>
</mime-mapping>
<!-- source: pattern://1200a58c76686d520c21edb0 -->
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<!-- source: pattern://1200a58c76686d520c21edb0 -->
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>

View File

@ -63,7 +63,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -60,7 +60,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -61,7 +61,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -62,7 +62,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -59,7 +59,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -66,7 +66,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -63,7 +63,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="#453F4F"/>
<path d="M315.87 194.157L338.759 274.59L372.321 288.431L370.709 312.806L292.056 339.054L295.324 204.15L308.885 192.119C311.253 190.018 315.004 191.112 315.87 194.157Z" fill="#2F2E43"/>
<path d="M254.071 99.3203C258.34 75.2985 281.274 59.2858 305.296 63.5551C329.318 67.8243 345.331 90.7588 341.062 114.781C337.599 134.263 321.86 148.474 303.221 150.874L284.936 204.949L248.42 161.61C248.42 161.61 259.776 151.461 267.106 139.043C256.753 129.168 251.38 114.463 254.071 99.3203Z" fill="#F3C6C8"/>
<path d="M300.903 178.872L241.344 136.491C241.344 136.491 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.248 184.505 223.096C180.767 265.943 186.307 388.999 186.307 388.999L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.619 300.903 178.872Z" fill="#1778D3"/>
<path d="M228.184 159.93C228.184 159.93 275.707 179.436 282.199 202.795" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.456L313.893 337.777L317.75 304.922L394.424 286.427C397.202 281.312 402.465 277.057 409.186 275.18C420.947 271.895 432.684 277.123 435.402 286.855C438.121 296.588 430.791 307.141 419.03 310.426C412.309 312.303 405.603 311.391 400.576 308.456Z" fill="#F3C6C8"/>
<path d="M281.991 290.319L266.001 213.382C266.001 213.382 233.372 151.67 191.579 195.333C191.579 195.333 238.434 350.645 264.171 352.381C289.907 354.117 322.346 336.691 322.346 336.691L326.292 296.448L281.991 290.319Z" fill="#1778D3"/>
<path d="M191.582 195.328C191.582 195.328 238.436 350.64 264.173 352.376C289.909 354.112 322.348 336.686 322.348 336.686" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.442L281.993 290.313L266.004 213.375" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.675C265.066 137.675 265.15 113.706 277.44 105.926C289.703 98.1636 286.701 114.495 286.701 114.495L293.981 114.82C293.981 114.82 296.902 98.938 311.084 99.8077L307.313 78.9529C307.313 78.9529 338.84 94.1981 340.607 91.2217C354.515 67.8019 291.481 27.9758 262.264 61.5896C216.823 113.87 265.066 137.675 265.066 137.675Z" fill="#BE7800"/>
<rect x="436.242" y="218.391" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.391)" fill="#9268E9"/>
<path d="M405.463 303.885L318.78 333.207L322.636 300.352L399.31 281.857C402.089 276.742 407.352 272.487 414.073 270.61C425.833 267.325 437.571 272.552 440.289 282.285C443.007 292.018 435.677 302.57 423.917 305.855C417.195 307.732 410.49 306.82 405.463 303.885Z" fill="#F3C6C8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="white"/>
<path d="M315.87 194.156L338.759 274.589L372.321 288.429L370.709 312.805L292.056 339.053L295.324 204.149L308.885 192.117C311.253 190.016 315.004 191.11 315.87 194.156Z" fill="#2F2E43"/>
<path d="M254.069 99.3193C258.338 75.2975 281.272 59.2848 305.294 63.5541C329.316 67.8234 345.329 90.7578 341.06 114.78C337.597 134.262 321.858 148.473 303.219 150.873L284.934 204.948L248.418 161.609C248.418 161.609 259.774 151.46 267.104 139.042C256.751 129.167 251.378 114.462 254.069 99.3193Z" fill="#E29295"/>
<path d="M300.903 178.872L241.344 136.492C241.344 136.492 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.249 184.505 223.096C180.767 265.943 186.307 389 186.307 389L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.62 300.903 178.872Z" fill="#2F2E43"/>
<path d="M228.184 159.928C228.184 159.928 275.707 179.434 282.199 202.793" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.455L313.893 337.776L317.75 304.921L394.424 286.427C397.202 281.311 402.465 277.057 409.186 275.179C420.947 271.895 432.684 277.122 435.402 286.855C438.121 296.588 430.791 307.14 419.03 310.425C412.309 312.302 405.603 311.39 400.576 308.455Z" fill="#E29295"/>
<path d="M281.991 290.315L266.001 213.378C266.001 213.378 233.372 151.667 191.579 195.329C191.579 195.329 238.434 350.641 264.171 352.377C289.907 354.113 322.346 336.687 322.346 336.687L326.292 296.444L281.991 290.315Z" fill="#2F2E43"/>
<path d="M191.582 195.329C191.582 195.329 238.436 350.64 264.173 352.377C289.909 354.113 322.348 336.687 322.348 336.687" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.444L281.993 290.315L266.004 213.377" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.676C265.066 137.676 265.15 113.707 277.44 105.927C289.703 98.1645 286.701 114.496 286.701 114.496L293.981 114.821C293.981 114.821 296.902 98.939 311.084 99.8087L307.313 78.9539C307.313 78.9539 338.84 94.199 340.607 91.2226C354.515 67.8029 291.481 27.9768 262.264 61.5906C216.823 113.871 265.066 137.676 265.066 137.676Z" fill="#2F2E43"/>
<rect x="436.242" y="218.39" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.39)" fill="#734BC5"/>
<path d="M405.461 303.882L318.778 333.203L322.634 300.348L399.308 281.853C402.087 276.738 407.35 272.484 414.071 270.606C425.831 267.322 437.569 272.549 440.287 282.282C443.005 292.014 435.675 302.567 423.915 305.852C417.194 307.729 410.488 306.817 405.461 303.882Z" fill="#E29295"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -46,7 +46,7 @@ spec:
podDisruptionBudget:
maxUnavailable: "50%"
git:
tag: "r-0d4f317ecee462cf51ce783f04b4590ea6d580fb"
tag: "r-dbf48dcf25b8493a86353bec25f882a800ce190e"
dir: "DEFAULT-ADN-AGOV-ADMIN-PROJECT/DEFAULT-ADN-AGOV-ADMIN-INV/proxy-sp"
credentials: "git-credentials"
keystores:

View File

@ -964,6 +964,11 @@
<mime-type>application/x-font-ttf</mime-type>
</mime-mapping>
<!-- source: pattern://39ecde9a0d101628fed3e3be -->
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<!-- source: pattern://39ecde9a0d101628fed3e3be -->
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>

View File

@ -63,7 +63,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -60,7 +60,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -61,7 +61,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -62,7 +62,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -59,7 +59,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -66,7 +66,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -63,7 +63,7 @@
</div>
</div>
<footer class="hidden sm:flex mt-auto font-body text-body-s text-disabled-grey dark:text-silver w-full p-2 justify-end">
<p>1.8.0.2418-20241128T144505Z</p>
<p>1.8.0.local-20241218T173806Z-haburger: Wed Dec 18 19:16:25 CET 2024</p>
</footer>
<script src="/resources/static/bundle.js"></script>
</body>

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="#453F4F"/>
<path d="M315.87 194.157L338.759 274.59L372.321 288.431L370.709 312.806L292.056 339.054L295.324 204.15L308.885 192.119C311.253 190.018 315.004 191.112 315.87 194.157Z" fill="#2F2E43"/>
<path d="M254.071 99.3203C258.34 75.2985 281.274 59.2858 305.296 63.5551C329.318 67.8243 345.331 90.7588 341.062 114.781C337.599 134.263 321.86 148.474 303.221 150.874L284.936 204.949L248.42 161.61C248.42 161.61 259.776 151.461 267.106 139.043C256.753 129.168 251.38 114.463 254.071 99.3203Z" fill="#F3C6C8"/>
<path d="M300.903 178.872L241.344 136.491C241.344 136.491 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.248 184.505 223.096C180.767 265.943 186.307 388.999 186.307 388.999L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.619 300.903 178.872Z" fill="#1778D3"/>
<path d="M228.184 159.93C228.184 159.93 275.707 179.436 282.199 202.795" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.456L313.893 337.777L317.75 304.922L394.424 286.427C397.202 281.312 402.465 277.057 409.186 275.18C420.947 271.895 432.684 277.123 435.402 286.855C438.121 296.588 430.791 307.141 419.03 310.426C412.309 312.303 405.603 311.391 400.576 308.456Z" fill="#F3C6C8"/>
<path d="M281.991 290.319L266.001 213.382C266.001 213.382 233.372 151.67 191.579 195.333C191.579 195.333 238.434 350.645 264.171 352.381C289.907 354.117 322.346 336.691 322.346 336.691L326.292 296.448L281.991 290.319Z" fill="#1778D3"/>
<path d="M191.582 195.328C191.582 195.328 238.436 350.64 264.173 352.376C289.909 354.112 322.348 336.686 322.348 336.686" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.442L281.993 290.313L266.004 213.375" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.675C265.066 137.675 265.15 113.706 277.44 105.926C289.703 98.1636 286.701 114.495 286.701 114.495L293.981 114.82C293.981 114.82 296.902 98.938 311.084 99.8077L307.313 78.9529C307.313 78.9529 338.84 94.1981 340.607 91.2217C354.515 67.8019 291.481 27.9758 262.264 61.5896C216.823 113.87 265.066 137.675 265.066 137.675Z" fill="#BE7800"/>
<rect x="436.242" y="218.391" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.391)" fill="#9268E9"/>
<path d="M405.463 303.885L318.78 333.207L322.636 300.352L399.31 281.857C402.089 276.742 407.352 272.487 414.073 270.61C425.833 267.325 437.571 272.552 440.289 282.285C443.007 292.018 435.677 302.57 423.917 305.855C417.195 307.732 410.49 306.82 405.463 303.885Z" fill="#F3C6C8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,14 @@
<svg width="538" height="428" viewBox="0 0 538 428" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.6" d="M25.5216 12.9464C101.117 -51.0418 123.063 147.074 258.436 68.7657C393.808 -9.54251 434.824 51.0683 434.824 170.197C434.824 289.325 580.948 321.32 525.401 400.285C469.854 479.25 329.899 364.323 239.366 364.887C108.83 365.699 19.072 335.977 37.78 251.204C69.4629 107.637 -50.0735 76.9347 25.5216 12.9464Z" fill="white"/>
<path d="M315.87 194.156L338.759 274.589L372.321 288.429L370.709 312.805L292.056 339.053L295.324 204.149L308.885 192.117C311.253 190.016 315.004 191.11 315.87 194.156Z" fill="#2F2E43"/>
<path d="M254.069 99.3193C258.338 75.2975 281.272 59.2848 305.294 63.5541C329.316 67.8234 345.329 90.7578 341.06 114.78C337.597 134.262 321.858 148.473 303.219 150.873L284.934 204.948L248.418 161.609C248.418 161.609 259.774 151.46 267.104 139.042C256.751 129.167 251.378 114.462 254.069 99.3193Z" fill="#E29295"/>
<path d="M300.903 178.872L241.344 136.492C241.344 136.492 220.277 131.521 219.729 161.017C219.729 161.017 188.243 180.249 184.505 223.096C180.767 265.943 186.307 389 186.307 389L331.942 350.72L316.015 197.663C315.11 188.973 309.197 181.62 300.903 178.872Z" fill="#2F2E43"/>
<path d="M228.184 159.928C228.184 159.928 275.707 179.434 282.199 202.793" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M400.576 308.455L313.893 337.776L317.75 304.921L394.424 286.427C397.202 281.311 402.465 277.057 409.186 275.179C420.947 271.895 432.684 277.122 435.402 286.855C438.121 296.588 430.791 307.14 419.03 310.425C412.309 312.302 405.603 311.39 400.576 308.455Z" fill="#E29295"/>
<path d="M281.991 290.315L266.001 213.378C266.001 213.378 233.372 151.667 191.579 195.329C191.579 195.329 238.434 350.641 264.171 352.377C289.907 354.113 322.346 336.687 322.346 336.687L326.292 296.444L281.991 290.315Z" fill="#2F2E43"/>
<path d="M191.582 195.329C191.582 195.329 238.436 350.64 264.173 352.377C289.909 354.113 322.348 336.687 322.348 336.687" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M326.295 296.444L281.993 290.315L266.004 213.377" stroke="#E6E6E6" stroke-miterlimit="10"/>
<path d="M265.066 137.676C265.066 137.676 265.15 113.707 277.44 105.927C289.703 98.1645 286.701 114.496 286.701 114.496L293.981 114.821C293.981 114.821 296.902 98.939 311.084 99.8087L307.313 78.9539C307.313 78.9539 338.84 94.199 340.607 91.2226C354.515 67.8029 291.481 27.9768 262.264 61.5906C216.823 113.871 265.066 137.676 265.066 137.676Z" fill="#2F2E43"/>
<rect x="436.242" y="218.39" width="11.8658" height="54.8795" rx="4" transform="rotate(15.4151 436.242 218.39)" fill="#734BC5"/>
<path d="M405.461 303.882L318.778 333.203L322.634 300.348L399.308 281.853C402.087 276.738 407.35 272.484 414.071 270.606C425.831 267.322 437.569 272.549 440.287 282.282C443.005 292.014 435.675 302.567 423.915 305.852C417.194 307.729 410.488 306.817 405.461 303.882Z" fill="#E29295"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB