diff --git a/bwreg-service/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressService.java b/bwreg-service/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressService.java index 6c1dc4b844dce3287978b94bd61a747e88c228d7..798cdea14f8e2a04d2d23ec5a26ea7dabeb28d22 100644 --- a/bwreg-service/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressService.java +++ b/bwreg-service/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressService.java @@ -63,7 +63,7 @@ public class IdentityEmailAddressService extends BaseServiceImpl<IdentityEmailAd public void expireEmailAddress(IdentityEmailAddressEntity entity, String executor) { entity = dao.fetch(entity.getId()); - handler.setPrimaryEmailAddress(entity, executor); + handler.expireEmailAddress(entity, executor); } public void sendExpiryEmailAddress(IdentityEmailAddressEntity entity, String executor) { diff --git a/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/EmailAddressesBean.java b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/EmailAddressesBean.java index 3e7d1dff38d568f060c5f79136f3ab0904aad52f..fa3bb290f5a70a06b48e7af7948917d122c27e2d 100644 --- a/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/EmailAddressesBean.java +++ b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/EmailAddressesBean.java @@ -76,6 +76,13 @@ public class EmailAddressesBean implements Serializable { public void deleteEmailAddress(IdentityEmailAddressEntity address) { service.deleteEmailAddress(address, "idty-" + session.getIdentityId()); identity = null; + chosenPrimary = null; + primaryEmailList = null; + } + + public void resendVerificationToken(IdentityEmailAddressEntity address) { + service.redoVerification(address, "idty-" + session.getIdentityId()); + identity = null; } public void setPrimaryEmailAddress() { @@ -91,6 +98,8 @@ public class EmailAddressesBean implements Serializable { service.checkVerification(getIdentity(), getToken(), "idty-" + session.getIdentityId()); token = null; identity = null; + chosenPrimary = null; + primaryEmailList = null; messageGenerator.addResolvedInfoMessage("email_addresses.verification_success", "email_addresses.verification_success_detail", true); } catch (VerificationException e) { diff --git a/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/admin/timer/WizardExpireEmailAddressesBean.java b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/admin/timer/WizardExpireEmailAddressesBean.java new file mode 100644 index 0000000000000000000000000000000000000000..4bb922598a35f0efcac03d1cefb1090bb56dc089 --- /dev/null +++ b/bwreg-webapp/src/main/java/edu/kit/scc/webreg/bean/admin/timer/WizardExpireEmailAddressesBean.java @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2014 Michael Simon. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Michael Simon - initial + ******************************************************************************/ +package edu.kit.scc.webreg.bean.admin.timer; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; + +import jakarta.faces.event.ComponentSystemEvent; +import jakarta.faces.view.ViewScoped; +import jakarta.inject.Inject; +import jakarta.inject.Named; + +import edu.kit.scc.webreg.entity.JobClassEntity; +import edu.kit.scc.webreg.entity.JobScheduleEntity; +import edu.kit.scc.webreg.service.JobClassService; +import edu.kit.scc.webreg.service.JobScheduleService; + +@Named +@ViewScoped +public class WizardExpireEmailAddressesBean implements Serializable { + + private static final long serialVersionUID = 1L; + + @Inject + private JobScheduleService jobScheduleService; + + @Inject + private JobClassService jobClassService; + + private JobClassEntity jobClass; + private JobScheduleEntity jobSchedule; + + private String jobName; + private String scheduleName; + private String scheduleTiming; + + private Long limit; + + private Boolean initialized = false; + + public void preRenderView(ComponentSystemEvent ev) { + if (! initialized) { + setJobName("wizard_ExpireEmailAddresses"); + setScheduleName("wizard_ExpireEmailAddressesSchedule"); + setLimit(1L); + setScheduleTiming("5m"); + + jobClass = jobClassService.findByAttr("jobClassName", "edu.kit.scc.webreg.job.ExpireVerifiedEmailAddresses"); + if (jobClass != null) { + List<JobScheduleEntity> jsList = jobScheduleService.findAllByAttr("jobClass", jobClass); + if (jsList.size() > 0) { + jobSchedule = jsList.get(0); + } + } + initialized = true; + } + } + + public void createJobClass() { + jobClass = jobClassService.createNew(); + if (getJobName() != null) + jobClass.setName(getJobName()); + else + jobClass.setName("wizard_ExpireEmailAddresses"); + jobClass.setSingleton(true); + jobClass.setJobClassName("edu.kit.scc.webreg.job.ExpireVerifiedEmailAddresses"); + jobClass.setJobStore(new HashMap<String, String>()); + jobClass.getJobStore().put("limit", getLimit().toString()); + jobClass = jobClassService.save(jobClass); + } + + public void createSchedule() { + jobSchedule = jobScheduleService.createNew(); + if (getScheduleName() != null) + jobSchedule.setName(getScheduleName()); + else + jobSchedule.setName("wizard_ExpireEmailAddressesSchedule"); + jobSchedule.setJobClass(getJobClass()); + jobSchedule.setYear("*"); + jobSchedule.setMonth("*"); + jobSchedule.setDayOfMonth("*"); + jobSchedule.setDayOfWeek("*"); + jobSchedule.setHour("*"); + if (scheduleTiming.equals("1m")) { + jobSchedule.setMinute("0/1"); + jobSchedule.setSecond("15"); + } + else if (scheduleTiming.equals("10m")) { + jobSchedule.setMinute("0/10"); + jobSchedule.setSecond("15"); + } + else { + jobSchedule.setMinute("0/5"); + jobSchedule.setSecond("15"); + } + jobSchedule.setDisabled(false); + jobSchedule = jobScheduleService.save(jobSchedule); + } + + public JobClassEntity getJobClass() { + return jobClass; + } + + public JobScheduleEntity getJobSchedule() { + return jobSchedule; + } + + public String getJobName() { + return jobName; + } + + public void setJobName(String jobName) { + this.jobName = jobName; + } + + public String getScheduleName() { + return scheduleName; + } + + public void setScheduleName(String scheduleName) { + this.scheduleName = scheduleName; + } + + public String getScheduleTiming() { + return scheduleTiming; + } + + public void setScheduleTiming(String scheduleTiming) { + this.scheduleTiming = scheduleTiming; + } + + public Long getLimit() { + return limit; + } + + public void setLimit(Long limit) { + this.limit = limit; + } +} diff --git a/bwreg-webapp/src/main/resources/msg/messages_de.properties b/bwreg-webapp/src/main/resources/msg/messages_de.properties index 40ae7a38bddcf91d728b423a568171d8e8fa8417..f5721f55b8e7da12ff300d8924570341278c3880 100644 --- a/bwreg-webapp/src/main/resources/msg/messages_de.properties +++ b/bwreg-webapp/src/main/resources/msg/messages_de.properties @@ -547,6 +547,8 @@ imprint = Impressum index = \u00DCbersicht +index.no_primaray_email_set = Es wurde keine prim\u00E4re E-Mail-Adresse festgelegt. Bitte legen Sie <a href="user/email-addresses.xhtml">hier</a> eine prim\u00E4re E-Mail-Adresse fest. + index_text1 = Sie haben sich bereits bei den folgenden Diensten registriert: index_text2 = Details zu den Registrierungen k\u00F6nnen Sie unter "Registrierungsdetails" beim jeweiligen Dienst aufrufen. @@ -1210,28 +1212,6 @@ timer_info = Timer Info timer_singleton_configured = Konfigupdate Singleton Timer -timer_wizard_clear_expired_authn_requests = Einen Zeitplan zum L\u00F6schen von abgelaufenen SAML Authentication Requests erstellen. - -timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard - -timer_wizard_clear_expired_login_info = Einen Zeitplan zum L\u00F6schen von abgelaufenen Benutzer Login Informationen erstellen. - -timer_wizard_clear_expired_login_info_header = Clear expired login user information - -timer_wizard_clear_expired_oidc_tokens = Einen Zeitplan zum L\u00F6schen von abgelaufenen OIDC login Token erstellen. - -timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard - -timer_wizard_clear_old_audit_entries = Einen Zeitplan zum L\u00F6schen von alten Audit Eintr\u00E4gen erstellen. - -timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard - -timer_wizard_update_federation_metadata = Einen Zeitplan erstellen, um alle F\u00F6derationsmetadaten zu aktualisieren. - -timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard - -timer_wizards = Scheduler wizards - title = bwServices to = An @@ -1334,8 +1314,6 @@ unknown-token = Das im Link gesetzte Token ist ung\u00FCltig update = Aktualisieren -update_metadata = Metadaten updaten - updated_at = Letztes Update am url = URL @@ -1386,6 +1364,21 @@ welcome_register = Sie nutzen die f\u00F6derierten Dienste zum ersten Mal. Um fo welcome_sns_guest = Willkommen bei der Sync&Share Gast Registrierung. Bitte lesen und akzeptieren Sie die Nutzungsbedingungen und f\u00FCllen Sie das untenstehende Formular aus, um Ihren Account zu aktivieren. +wizard.expire_email_addresses = E-Mail-Adressen ablaufen lassen +wizard.expire_email_addresses_info = F\u00FCgen Sie einen Zeitplan f\u00FCr das Auslaufen von E-Mail-Adressen hinzu, bei denen das \u00DCberpr\u00FCfungsdatum f\u00E4llig ist. +wizard.timer_wizard_clear_expired_authn_requests = Einen Zeitplan zum L\u00F6schen von abgelaufenen SAML Authentication Requests erstellen. +wizard.timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard +wizard.timer_wizard_clear_expired_login_info = Einen Zeitplan zum L\u00F6schen von abgelaufenen Benutzer Login Informationen erstellen. +wizard.timer_wizard_clear_expired_login_info_header = Clear expired login user information +wizard.timer_wizard_clear_expired_oidc_tokens = Einen Zeitplan zum L\u00F6schen von abgelaufenen OIDC login Token erstellen. +wizard.timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard +wizard.timer_wizard_clear_old_audit_entries = Einen Zeitplan zum L\u00F6schen von alten Audit Eintr\u00E4gen erstellen. +wizard.timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard +wizard.timer_wizard_update_federation_metadata = Einen Zeitplan erstellen, um alle F\u00F6derationsmetadaten zu aktualisieren. +wizard.timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard +wizard.timer_wizards = Scheduler wizards +wizard.update_metadata = Metadaten updaten + year = Jahr yes = Ja diff --git a/bwreg-webapp/src/main/resources/msg/messages_en.properties b/bwreg-webapp/src/main/resources/msg/messages_en.properties index 5a89177f6787cac7d2235ed62704f4b7d06833d3..16cff493f5a9c3f99ba699aeda372f22d3b2f975 100644 --- a/bwreg-webapp/src/main/resources/msg/messages_en.properties +++ b/bwreg-webapp/src/main/resources/msg/messages_en.properties @@ -547,6 +547,8 @@ imprint = Imprint index = Index +index.no_primaray_email_set = No primary e-mail address has been set. Please specify a primary e-mail address <a href="user/email-addresses.xhtml">here</a>. + index_text1 = You have already registered with the following services: index_text2 = In order to see details of the services you registered with, click on the link 'Registry info' under the service. @@ -1210,28 +1212,6 @@ timer_info = Timer info timer_singleton_configured = Singleton timer configured -timer_wizard_clear_expired_authn_requests = Add a schedule to delete expired SAML authentication requests. - -timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard - -timer_wizard_clear_expired_login_info = Add a schedule to delete expired user login information. - -timer_wizard_clear_expired_login_info_header = Clear expired login user information - -timer_wizard_clear_expired_oidc_tokens = Add a schedule to delete expired OIDC login token. - -timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard - -timer_wizard_clear_old_audit_entries = Add a schedule to delete old audit entries. - -timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard - -timer_wizard_update_federation_metadata = Add a schedule to update all SAML federation metadata. - -timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard - -timer_wizards = Scheduler wizards - title = bwServices to = To @@ -1334,8 +1314,6 @@ unknown-token = Your account token is invalid. update = Update -update_metadata = Update Metadata - updated_at = Updated at url = URL @@ -1386,6 +1364,21 @@ welcome_register = You are using the federated services for the first time. In o welcome_sns_guest = Welcome to the sync and share guest registration. Please read and accept the agreement and fill in the form to activate your account. +wizard.expire_email_addresses = Expire Email-addresses +wizard.expire_email_addresses_info = Add a schedule to expire e-mail-addresses where the verification date is due. +wizard.timer_wizard_clear_expired_authn_requests = Add a schedule to delete expired SAML authentication requests. +wizard.timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard +wizard.timer_wizard_clear_expired_login_info = Add a schedule to delete expired user login information. +wizard.timer_wizard_clear_expired_login_info_header = Clear expired login user information +wizard.timer_wizard_clear_expired_oidc_tokens = Add a schedule to delete expired OIDC login token. +wizard.timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard +wizard.timer_wizard_clear_old_audit_entries = Add a schedule to delete old audit entries. +wizard.timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard +wizard.timer_wizard_update_federation_metadata = Add a schedule to update all SAML federation metadata. +wizard.timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard +wizard.timer_wizards = Scheduler wizards +wizard.update_metadata = Update Metadata + year = Year yes = Yes diff --git a/bwreg-webapp/src/main/resources/msg/messages_fr.properties b/bwreg-webapp/src/main/resources/msg/messages_fr.properties index 37db47dbd3451c64d730342e1b0a8474918ad1b6..6ecaee28d542671796a753b0945b4e3f66a7005a 100644 --- a/bwreg-webapp/src/main/resources/msg/messages_fr.properties +++ b/bwreg-webapp/src/main/resources/msg/messages_fr.properties @@ -547,6 +547,8 @@ imprint = Empreinte index = Index +index.no_primaray_email_set = Aucune adresse e-mail principale n'a \u00E9t\u00E9 d\u00E9finie. Veuillez d\u00E9finir <a href="user/email-addresses.xhtml">ici</a> une adresse e-mail primaire. + index_text1 = Vous vous \u00EAtes d\u00E9j\u00E0 enregistr\u00E9 aupr\u00E8s des services suivants : index_text2 = Pour voir les d\u00E9tails des services auxquels vous vous \u00EAtes inscrit, cliquez sur le lien 'Registry info' sous le service. @@ -1210,28 +1212,6 @@ timer_info = Informations sur le minuteur timer_singleton_configured = Minuteur singleton configur\u00E9 -timer_wizard_clear_expired_authn_requests = Ajouter une planification pour supprimer SAML Authentication Requests expir\u00E9s. - -timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard - -timer_wizard_clear_expired_login_info = Ajouter une planification pour supprimer user login information expir\u00E9s. - -timer_wizard_clear_expired_login_info_header = Clear expired login user information - -timer_wizard_clear_expired_oidc_tokens = Ajouter une planification pour supprimer OIDC login token expir\u00E9s. - -timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard - -timer_wizard_clear_old_audit_entries = Ajouter une planification pour supprimer les anciennes entr\u00E9es d'audit. - -timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard - -timer_wizard_update_federation_metadata = Ajouter un calendrier pour mettre \u00E0 jour toutes les metadata de f\u00E9d\u00E9ration SAML. - -timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard - -timer_wizards = Scheduler wizards - title = bwServices to = To @@ -1334,8 +1314,6 @@ unknown-token = Votre jeton de compte n'est pas valide. update = Mise \u00E0 jour -update_metadata = Update Metadata - updated_at = Mis \u00E0 jour \u00E0 url = URL @@ -1386,6 +1364,21 @@ welcome_register = Vous utilisez les services f\u00E9d\u00E9r\u00E9s pour la pre welcome_sns_guest = Bienvenue \u00E0 l'enregistrement des invit\u00E9s de sync and share. Veuillez lire et accepter l'accord et remplir le formulaire pour activer votre compte. +wizard.expire_email_addresses = Expirer les adresses \u00E9lectroniques +wizard.expire_email_addresses_info = Ajoutez un calendrier d'expiration des adresses \u00E9lectroniques dont la date de v\u00E9rification est d\u00E9pass\u00E9e. +wizard.timer_wizard_clear_expired_authn_requests = Ajouter une planification pour supprimer SAML Authentication Requests expir\u00E9s. +wizard.timer_wizard_clear_expired_authn_requests_header = Clear expired SAML authentication requests wizard +wizard.timer_wizard_clear_expired_login_info = Ajouter une planification pour supprimer user login information expir\u00E9s. +wizard.timer_wizard_clear_expired_login_info_header = Clear expired login user information +wizard.timer_wizard_clear_expired_oidc_tokens = Ajouter une planification pour supprimer OIDC login token expir\u00E9s. +wizard.timer_wizard_clear_expired_oidc_tokens_header = Clear expired OIDC login token wizard +wizard.timer_wizard_clear_old_audit_entries = Ajouter une planification pour supprimer les anciennes entr\u00E9es d'audit. +wizard.timer_wizard_clear_old_audit_entries_header = Clear old audit entries wizard +wizard.timer_wizard_update_federation_metadata = Ajouter un calendrier pour mettre \u00E0 jour toutes les metadata de f\u00E9d\u00E9ration SAML. +wizard.timer_wizard_update_federation_metadata_header = Update all SAML federation metadata wizard +wizard.timer_wizards = Scheduler wizards +wizard.update_metadata = Update Metadata + year = Ann\u00E9e yes = Oui diff --git a/bwreg-webapp/src/main/webapp/admin/timer/list-wizards.xhtml b/bwreg-webapp/src/main/webapp/admin/timer/list-wizards.xhtml index 6443e10620ece24b50bef0ffc8a293aaa969e42c..1cad4cd06d24f133c352e049f97c4123bec08e32 100644 --- a/bwreg-webapp/src/main/webapp/admin/timer/list-wizards.xhtml +++ b/bwreg-webapp/src/main/webapp/admin/timer/list-wizards.xhtml @@ -19,20 +19,23 @@ <h:form id="form"> <p:panelGrid columns="2"> - <p:linkButton outcome="wizard-update-federation-metadata" value="#{messages.update_metadata}" /> - <h:outputText value="#{messages.timer_wizard_update_federation_metadata}" /> + <p:linkButton outcome="wizard-update-federation-metadata" value="#{messages['wizard.update_metadata']}" /> + <h:outputText value="#{messages['wizard.timer_wizard_update_federation_metadata']}" /> - <p:linkButton outcome="wizard-clear-old-audit-entries" value="#{messages.clear_audit}" /> - <h:outputText value="#{messages.timer_wizard_clear_old_audit_entries}" /> + <p:linkButton outcome="wizard-clear-old-audit-entries" value="#{messages['wizard.clear_audit']}" /> + <h:outputText value="#{messages['wizard.timer_wizard_clear_old_audit_entries']}" /> - <p:linkButton outcome="wizard-clear-expired-authn-requests" value="#{messages.clear_expired_authn_requests}" /> - <h:outputText value="#{messages.timer_wizard_clear_expired_authn_requests}" /> + <p:linkButton outcome="wizard-clear-expired-authn-requests" value="#{messages['wizard.clear_expired_authn_requests']}" /> + <h:outputText value="#{messages['wizard.timer_wizard_clear_expired_authn_requests']}" /> - <p:linkButton outcome="wizard-clear-expired-oidc-tokens" value="#{messages.clear_expired_oidc_tokens}" /> - <h:outputText value="#{messages.timer_wizard_clear_expired_oidc_tokens}" /> + <p:linkButton outcome="wizard-clear-expired-oidc-tokens" value="#{messages['wizard.clear_expired_oidc_tokens']}" /> + <h:outputText value="#{messages['wizard.timer_wizard_clear_expired_oidc_tokens']}" /> - <p:linkButton outcome="wizard-clear-expired-login-info" value="#{messages.clear_expired_login_info}" /> - <h:outputText value="#{messages.timer_wizard_clear_expired_login_info}" /> + <p:linkButton outcome="wizard-clear-expired-login-info" value="#{messages['wizard.clear_expired_login_info']}" /> + <h:outputText value="#{messages['wizard.timer_wizard_clear_expired_login_info']}" /> + + <p:linkButton outcome="wizard-expire-email-addresses" value="#{messages['wizard.expire_email_addresses']}" /> + <h:outputText value="#{messages['wizard.expire_email_addresses_info']}" /> </p:panelGrid> diff --git a/bwreg-webapp/src/main/webapp/admin/timer/wizard-expire-email-addresses.xhtml b/bwreg-webapp/src/main/webapp/admin/timer/wizard-expire-email-addresses.xhtml new file mode 100644 index 0000000000000000000000000000000000000000..9dc7e6b944bebef4f176a7089836cabf5f168fe1 --- /dev/null +++ b/bwreg-webapp/src/main/webapp/admin/timer/wizard-expire-email-addresses.xhtml @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:f="jakarta.faces.core" + xmlns:h="jakarta.faces.html" + xmlns:ui="jakarta.faces.facelets" + xmlns:bw="http://www.scc.kit.edu/bwfacelets" + xmlns:p="http://primefaces.org/ui"> +<head> +<title></title> +</head> +<body> +<f:view> + <f:metadata> + <f:event type="jakarta.faces.event.PreRenderViewEvent" + listener="#{wizardExpireEmailAddressesBean.preRenderView}" /> + </f:metadata> + +<ui:composition template="/template/default-admin.xhtml"> + <ui:param name="title" value="#{messages.title}"/> + + <ui:define name="content"> + <h:form id="form"> + <h2><h:outputText value="#{messages.timer_wizard_clear_expired_login_info_header}"/></h2> + + <p:panel rendered="#{wizardExpireEmailAddressesBean.jobClass == null}"> + <p:panelGrid columns="2" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <i class="pi pi-times" style="font-size: 2rem;"></i> + <p:outputPanel> + <div> + No job class yet. Create one here. You can choose a name, or use the predefined one. + Set the days and hours to determine the age from which on login infos are deleted. + </div> + <p:panelGrid columns="2" style="margin-top: 0.5em;" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <p:outputLabel value="Name:" for="@next"/> + <p:inputText value="#{wizardExpireEmailAddressesBean.scheduleName}" style="width: 320px;"/> + + <p:outputLabel value="Limit:" for="@next"/> + <p:inputNumber value="#{wizardExpireEmailAddressesBean.limit}" decimalPlaces="0" required="true"/> + </p:panelGrid> + <p:commandButton action="#{wizardExpireEmailAddressesBean.createJobClass()}" update="@form" value="Create Job" + style="margin-top: 0.5em;"/> + </p:outputPanel> + </p:panelGrid> + </p:panel> + + <p:panel rendered="#{wizardExpireEmailAddressesBean.jobClass != null}"> + <p:panelGrid columns="2" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <i class="pi pi-check" style="font-size: 2rem;"></i> + <p:outputPanel> + <div> + Job for clearing user login info is defined: <b>#{wizardExpireEmailAddressesBean.jobClass.name}</b> + </div> + <div style="margin-top: 1em;"> + Items older than #{wizardExpireEmailAddressesBean.jobClass.jobStore.get('purge_millis')} milliseconds are deleted. + </div> + </p:outputPanel> + </p:panelGrid> + </p:panel> + + <p:panel rendered="#{wizardExpireEmailAddressesBean.jobSchedule == null and wizardExpireEmailAddressesBean.jobClass != null}"> + <p:panelGrid columns="2" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <i class="pi pi-times" style="font-size: 2rem;"></i> + <p:outputPanel> + No job schedule yet. Create one in order to execute the job on regular basis: + <p:panelGrid columns="2" style="margin-top: 0.5em;" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <p:outputLabel value="Name:" for="@next"/> + <p:inputText value="#{wizardExpireEmailAddressesBean.scheduleName}" style="width: 320px;"/> + + <p:outputLabel value="Schedule:" for="@next"/> + <p:selectOneListbox id="basic" value="#{wizardExpireEmailAddressesBean.scheduleTiming}"> + <f:selectItem itemLabel="Every minute" itemValue="1m"/> + <f:selectItem itemLabel="Every 5 minutes" itemValue="5m"/> + <f:selectItem itemLabel="Every 10 minutes" itemValue="10m"/> + </p:selectOneListbox> + </p:panelGrid> + <p:commandButton action="#{wizardExpireEmailAddressesBean.createSchedule()}" update="@form" value="Create Schedule" + style="margin-top: 0.5em;"/> + </p:outputPanel> + </p:panelGrid> + </p:panel> + + <p:panel rendered="#{wizardExpireEmailAddressesBean.jobSchedule != null}"> + <p:panelGrid columns="2" layout="flex" columnClasses="col-12 md:col-3 xl:col-3, col-12 md:col-9 xl:col-9"> + <h:panelGroup> + <p:outputPanel rendered="#{! wizardExpireEmailAddressesBean.jobSchedule.disabled}"><i class="pi pi-check" style="font-size: 2rem;"></i></p:outputPanel> + <p:outputPanel rendered="#{wizardExpireEmailAddressesBean.jobSchedule.disabled}"><i class="pi pi-pause" style="font-size: 2rem;"></i></p:outputPanel> + </h:panelGroup> + <p:outputPanel> + <div> + Job schedule is defined: <b>#{wizardExpireEmailAddressesBean.jobSchedule.name}</b> + </div> + <div style="margin-top: 1em;"> + Cron pattern: + <h:outputText value="#{wizardExpireEmailAddressesBean.jobSchedule.second} #{wizardExpireEmailAddressesBean.jobSchedule.minute} #{wizardExpireEmailAddressesBean.jobSchedule.hour} #{wizardExpireEmailAddressesBean.jobSchedule.dayOfWeek} #{wizardExpireEmailAddressesBean.jobSchedule.dayOfMonth} #{wizardExpireEmailAddressesBean.jobSchedule.month} #{wizardExpireEmailAddressesBean.jobSchedule.year}" /> + </div> + <p:outputPanel rendered="#{wizardExpireEmailAddressesBean.jobSchedule.disabled}" style="margin-top: 0.5em;"> + The schedule is currently disabled! + </p:outputPanel> + </p:outputPanel> + </p:panelGrid> + </p:panel> + + </h:form> + + </ui:define> +</ui:composition> +</f:view> +</body> +</html> diff --git a/bwreg-webapp/src/main/webapp/index.xhtml b/bwreg-webapp/src/main/webapp/index.xhtml index 261fc3f109814b1cc8438986b28e1e03ffcd1d4b..bf5408a7e20e89d1e04d393d1550e7798ffa7821 100644 --- a/bwreg-webapp/src/main/webapp/index.xhtml +++ b/bwreg-webapp/src/main/webapp/index.xhtml @@ -21,9 +21,14 @@ style="margin-bottom: 8px;" styleClass="full"> <h:outputText value="#{messages.index_motd_text1}" escape="false" /> </p:panel> + + <h:panelGroup layout="block" styleClass="full text" rendered="#{empty userIndexBean.identity.primaryEmail}"> + <i class="pi pi-times-circle"></i> + <h:outputText value="#{messages['index.no_primaray_email_set']}" escape="false" style="margin-left: 1em;" /> + </h:panelGroup> <h5 class="full"><h:outputText value="#{messages.index_text1}"/></h5> - + <h:panelGroup rendered="#{not empty userIndexBean.userRegistryList}"> <ui:repeat var="registry" value="#{userIndexBean.userRegistryList}"> <div class="news-element third"> diff --git a/bwreg-webapp/src/main/webapp/user/email-addresses.xhtml b/bwreg-webapp/src/main/webapp/user/email-addresses.xhtml index 3a31c9b79adfd4fe464f5e359a43f8000b856e03..5a29913b41b244984d62d5bf16f78a5900b391c0 100644 --- a/bwreg-webapp/src/main/webapp/user/email-addresses.xhtml +++ b/bwreg-webapp/src/main/webapp/user/email-addresses.xhtml @@ -76,6 +76,8 @@ <div class="form"> <p:commandButton action="#{emailAddressesBean.deleteEmailAddress(email)}" value="#{messages['delete']}" ajax="true" update="@all" /> + <p:commandButton action="#{emailAddressesBean.resendVerificationToken(email)}" value="#{messages['email_addresses.resend_token']}" ajax="true" update="@all" + style="margin-left: 1em;"/> </div> </h:panelGroup> <h:panelGroup rendered="#{email.emailStatus == 'VERIFIED'}"> diff --git a/regapp-idty/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressHandler.java b/regapp-idty/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressHandler.java index 481903c12bb6ecc49963bd6f0f4601aa8be2dfdf..cd0e39294c1981aca2897cf53ec3f0232c03ab0f 100644 --- a/regapp-idty/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressHandler.java +++ b/regapp-idty/src/main/java/edu/kit/scc/webreg/service/identity/IdentityEmailAddressHandler.java @@ -148,6 +148,7 @@ public class IdentityEmailAddressHandler implements Serializable { entity.setExpireWarningSent(null); entity.setVerificationToken(null); + entity.setTokenValidUntil(null); entity.setVerifiedOn(new Date()); entity.setValidUntil(generateValidity()); entity.setEmailStatus(EmailAddressStatus.VERIFIED);