Repository: syncope Updated Branches: refs/heads/master 14e06e0f1 -> 50ecf0d80
Security questions page: SYNCOPE-156 Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/50ecf0d8 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/50ecf0d8 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/50ecf0d8 Branch: refs/heads/master Commit: 50ecf0d80163d6d828417bb71f3b52a910dfc716 Parents: 14e06e0 Author: Massimiliano Perrone <massimiliano.perr...@tirasa.net> Authored: Mon Dec 21 17:11:42 2015 +0100 Committer: Massimiliano Perrone <massimiliano.perr...@tirasa.net> Committed: Mon Dec 21 17:11:47 2015 +0100 ---------------------------------------------------------------------- .../client/console/commons/Constants.java | 6 +- .../syncope/client/console/pages/BasePage.java | 25 ++- .../syncope/client/console/pages/Logs.java | 42 +--- .../client/console/pages/SecurityQuestions.java | 78 ++++++- .../client/console/panels/ConsoleLogPanel.java | 3 +- .../client/console/panels/CoreLogPanel.java | 3 +- .../panels/SecurityQuestionDetailsPanel.java | 65 ++++++ .../panels/SecurityQuestionModalPanel.java | 67 ++++++ .../console/panels/SecurityQuestionsPanel.java | 223 +++++++++++++++++++ .../markup/html/bootstrap/dialog/BaseModal.java | 2 +- .../client/console/pages/Logs.properties | 1 + .../client/console/pages/Logs_it.properties | 1 + .../client/console/pages/Logs_pt_BR.properties | 1 + .../client/console/pages/SecurityQuestions.html | 38 ++-- .../console/pages/SecurityQuestions.properties | 19 ++ .../pages/SecurityQuestions_it.properties | 19 ++ .../pages/SecurityQuestions_pt_BR.properties | 19 ++ .../panels/SecurityQuestionDetailsPanel.html | 34 +++ .../SecurityQuestionDetailsPanel.properties | 18 ++ .../SecurityQuestionDetailsPanel_it.properties | 18 ++ ...ecurityQuestionDetailsPanel_pt_BR.properties | 18 ++ .../panels/SecurityQuestionModalPanel.html | 24 ++ 22 files changed, 653 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java index e5edbf3..8f78562 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java @@ -58,8 +58,10 @@ public final class Constants { public static final String PREF_ANYTYPE_PAGINATOR_ROWS = "anytype.paginator.rows"; - public static final String PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS = "relationshiptype.painator.rows" ; - + public static final String PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS = "secutiry.questions.paginator.rows"; + + public static final String PREF_RELATIONSHIPTYPE_PAGINATOR_ROWS = "relationshiptype.painator.rows"; + public static final String PREF_GROUP_DETAILS_VIEW = "group.details.view"; public static final String PREF_GROUP_ATTRIBUTES_VIEW = "group.attributes.view"; http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java index 3d03ab2..9b50853 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java @@ -96,18 +96,27 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware { WebMarkupContainer confULContainer = new WebMarkupContainer(getULContainerId("configuration")); confLIContainer.add(confULContainer); + liContainer = new WebMarkupContainer(getLIContainerId("securityQuestions")); + confULContainer.add(liContainer); + final BookmarkablePageLink<Page> securityQuestionLink = new BookmarkablePageLink<>( + "securityQuestions", SecurityQuestions.class); + MetaDataRoleAuthorizationStrategy.authorize( + securityQuestionLink, WebPage.ENABLE, StandardEntitlement.SECURITY_QUESTION_CREATE); + liContainer.add(securityQuestionLink); + liContainer = new WebMarkupContainer(getLIContainerId("workflow")); confULContainer.add(liContainer); - BookmarkablePageLink<Page> link = new BookmarkablePageLink<>("workflow", Workflow.class); - MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.WORKFLOW_DEF_READ); - liContainer.add(link); - + final BookmarkablePageLink<Page> workflowLink = new BookmarkablePageLink<>("workflow", Workflow.class); + MetaDataRoleAuthorizationStrategy.authorize( + workflowLink, WebPage.ENABLE, StandardEntitlement.WORKFLOW_DEF_READ); + liContainer.add(workflowLink); + liContainer = new WebMarkupContainer(getLIContainerId("logs")); confULContainer.add(liContainer); - BookmarkablePageLink<Page> logsLink = new BookmarkablePageLink<>("logs", Logs.class); + final BookmarkablePageLink<Page> logsLink = new BookmarkablePageLink<>("logs", Logs.class); MetaDataRoleAuthorizationStrategy.authorize(logsLink, WebPage.ENABLE, StandardEntitlement.LOG_LIST); liContainer.add(logsLink); - + liContainer = new WebMarkupContainer(getLIContainerId("types")); confULContainer.add(liContainer); BookmarkablePageLink<Page> typesLink = new BookmarkablePageLink<>("types", Types.class); @@ -118,10 +127,6 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware { confULContainer.add(liContainer); liContainer.add(new BookmarkablePageLink<>("policies", Policies.class)); - liContainer = new WebMarkupContainer(getLIContainerId("securityQuestions")); - confULContainer.add(liContainer); - liContainer.add(new BookmarkablePageLink<>("securityQuestions", SecurityQuestions.class)); - liContainer = new WebMarkupContainer(getLIContainerId("layouts")); confULContainer.add(liContainer); liContainer.add(new BookmarkablePageLink<>("layouts", Layouts.class)); http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java index c88044a..c3d61fd 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java @@ -21,13 +21,8 @@ package org.apache.syncope.client.console.pages; import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel; import java.util.ArrayList; import java.util.List; -import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.panels.ConsoleLogPanel; import org.apache.syncope.client.console.panels.CoreLogPanel; -import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; -import org.apache.syncope.common.lib.to.LoggerTO; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -40,29 +35,18 @@ public class Logs extends BasePage { private static final long serialVersionUID = -1100228004207271271L; - private final BaseModal<LoggerTO> coreLogModal; - - private final BaseModal<LoggerTO> consoleLogModal; - private final AjaxBootstrapTabbedPanel<ITab> tabbedPanel; public Logs(final PageParameters parameters) { super(parameters); - coreLogModal = new BaseModal<>("coreLogModal"); - consoleLogModal = new BaseModal<>("consoleLogModal"); - final WebMarkupContainer content = new WebMarkupContainer("content"); - content.add(new Label("header", "Logs")); + content.add(new Label("header", getString("header_title"))); content.setOutputMarkupId(true); tabbedPanel = new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()); content.add(tabbedPanel); add(content); - addWindowWindowClosedCallback(coreLogModal); - addWindowWindowClosedCallback(consoleLogModal); - add(coreLogModal); - add(consoleLogModal); } private List<ITab> buildTabList() { @@ -75,7 +59,7 @@ public class Logs extends BasePage { @Override public Panel getPanel(final String panelId) { - return new CoreLogPanel(panelId, getPageReference(), coreLogModal); + return new CoreLogPanel(panelId, getPageReference()); } }); @@ -85,30 +69,10 @@ public class Logs extends BasePage { @Override public Panel getPanel(final String panelId) { - return new ConsoleLogPanel(panelId, getPageReference(), consoleLogModal); + return new ConsoleLogPanel(panelId, getPageReference()); } }); return tabs; } - - private void addWindowWindowClosedCallback(final BaseModal<?> modal) { - modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { - - private static final long serialVersionUID = 8804221891699487139L; - - @Override - public void onClose(final AjaxRequestTarget target) { - tabbedPanel.setSelectedTab(tabbedPanel.getSelectedTab()); - target.add(tabbedPanel); - modal.show(false); - - if (((AbstractBasePage) Logs.this.getPage()).isModalResult()) { - info(getString(Constants.OPERATION_SUCCEEDED)); - feedbackPanel.refresh(target); - ((AbstractBasePage) Logs.this.getPage()).setModalResult(false); - } - } - }); - } } http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java index 0d21824..d58e369 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java @@ -18,13 +18,89 @@ */ package org.apache.syncope.client.console.pages; +import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal; +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.panels.SecurityQuestionModalPanel; +import org.apache.syncope.client.console.panels.SecurityQuestionsPanel; +import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxLink; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; +import org.apache.syncope.common.lib.types.StandardEntitlement; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.mapper.parameter.PageParameters; public class SecurityQuestions extends BasePage { - private static final long serialVersionUID = -1100228004207271271L; + private static final long serialVersionUID = 931085006718655535L; + + private final SecurityQuestionsPanel securityQuestionsPanel; public SecurityQuestions(final PageParameters parameters) { super(parameters); + + final WebMarkupContainer content = new WebMarkupContainer("content"); + content.add(new Label("header", getString("header_title"))); + content.setOutputMarkupId(true); + add(content); + + final BaseModal<SecurityQuestionTO> securityQuestionModal = new BaseModal<>("securityQuestionModal"); + securityQuestionModal.setFormModel(new SecurityQuestionTO()); + securityQuestionModal.size(Modal.Size.Large); + addWindowWindowClosedCallback(securityQuestionModal); + add(securityQuestionModal); + + final AjaxLink<Void> createLink = new ClearIndicatingAjaxLink<Void>( + "createSecurityQuestion", getPageReference()) { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + protected void onClickInternal(final AjaxRequestTarget target) { + securityQuestionModal.header(new ResourceModel("createSecurityQuestion")); + target.add(securityQuestionModal.setContent( + new SecurityQuestionModalPanel(securityQuestionModal, getPageReference(), true))); + securityQuestionModal.addSumbitButton(); + securityQuestionModal.show(true); + } + }; + content.add(createLink); + + if (SyncopeConsoleSession.get() + .owns(StandardEntitlement.SECURITY_QUESTION_CREATE)) { + MetaDataRoleAuthorizationStrategy.authorize( + createLink, ENABLE, StandardEntitlement.SECURITY_QUESTION_CREATE); + } + + securityQuestionsPanel = new SecurityQuestionsPanel( + "securityQuestionPanel", getPageReference(), securityQuestionModal); + securityQuestionsPanel.setOutputMarkupId(true); + + content.add(securityQuestionsPanel); + } + + private void addWindowWindowClosedCallback(final BaseModal<?> modal) { + modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { + + private static final long serialVersionUID = 8804221891699487139L; + + @Override + public void onClose(final AjaxRequestTarget target) { + target.add(securityQuestionsPanel); + modal.show(false); + + if (((AbstractBasePage) SecurityQuestions.this.getPage()).isModalResult()) { + info(getString(Constants.OPERATION_SUCCEEDED)); + feedbackPanel.refresh(target); + ((AbstractBasePage) SecurityQuestions.this.getPage()).setModalResult(false); + } + } + }); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java index 09b56d1..a024a03 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java @@ -24,7 +24,6 @@ import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.LoggerConfig; -import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.LoggerTO; import org.apache.syncope.common.lib.types.LoggerLevel; @@ -36,7 +35,7 @@ public class ConsoleLogPanel extends AbstractLogsPanel<LoggerTO> { private static final ConsoleLoggerController CONSOLE_LOGGER_CONTROLLER = new ConsoleLoggerController(); - public ConsoleLogPanel(final String id, final PageReference pageReference, final BaseModal<LoggerTO> modal) { + public ConsoleLogPanel(final String id, final PageReference pageReference) { super(id, pageReference, CONSOLE_LOGGER_CONTROLLER.getLoggers()); } http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java index 3732781..c620f10 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java @@ -19,7 +19,6 @@ package org.apache.syncope.client.console.panels; import org.apache.syncope.client.console.SyncopeConsoleSession; -import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.LoggerTO; import org.apache.syncope.common.lib.types.LoggerType; import org.apache.syncope.common.rest.api.service.LoggerService; @@ -29,7 +28,7 @@ public class CoreLogPanel extends AbstractLogsPanel<LoggerTO> { private static final long serialVersionUID = 3905038169553185171L; - public CoreLogPanel(final String id, final PageReference pageReference, final BaseModal<LoggerTO> modal) { + public CoreLogPanel(final String id, final PageReference pageReference) { super(id, pageReference, SyncopeConsoleSession.get().getService(LoggerService.class).list(LoggerType.LOG)); } http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.java new file mode 100644 index 0000000..bef4212 --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.client.console.panels; + +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.PropertyModel; + +public class SecurityQuestionDetailsPanel extends Panel { + + private static final long serialVersionUID = 6278708606604582875L; + + public SecurityQuestionDetailsPanel( + final String id, + final BaseModal<SecurityQuestionTO> modal) { + super(id); + + final WebMarkupContainer container = new WebMarkupContainer("container"); + + container.setOutputMarkupId( + true); + add(container); + + final Form<SecurityQuestionTO> form = new Form<>("form"); + + final SecurityQuestionTO securityQuestionTO = modal.getFormModel(); + form.setModel(new CompoundPropertyModel<>(securityQuestionTO)); + container.add(form); + + final AjaxTextFieldPanel key = new AjaxTextFieldPanel( + "key", getString("key"), new PropertyModel<String>(securityQuestionTO, "key")); + key.addRequiredLabel(); + final String keyModelObject = String.valueOf(key.getModelObject()); + key.setEnabled(keyModelObject == null || keyModelObject.isEmpty()); + form.add(key); + + final AjaxTextFieldPanel content = new AjaxTextFieldPanel( + "content", getString("content"), new PropertyModel<String>(securityQuestionTO, "content")); + content.addRequiredLabel(); + content.setEnabled(true); + content.setVisible(true); + form.add(content); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.java new file mode 100644 index 0000000..c66207c --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.client.console.panels; + +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.pages.AbstractBasePage; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; +import org.apache.syncope.common.rest.api.service.SecurityQuestionService; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.form.Form; + +public class SecurityQuestionModalPanel extends AbstractModalPanel { + + private static final long serialVersionUID = 4024126489500665435L; + + private final boolean createFlag; + + public SecurityQuestionModalPanel( + final BaseModal<SecurityQuestionTO> modal, + final PageReference pageRef, + final boolean createFlag) { + super(modal, pageRef); + this.createFlag = createFlag; + add(new SecurityQuestionDetailsPanel("securityQuestionDetailsPanel", modal)); + } + + @Override + public void onSubmit(final AjaxRequestTarget target, final Form<?> form) { + try { + final SecurityQuestionTO securityQuestionTO = SecurityQuestionTO.class.cast(form.getModelObject()); + + if (createFlag) { + SyncopeConsoleSession.get().getService(SecurityQuestionService.class).create(securityQuestionTO); + } else { + SyncopeConsoleSession.get().getService(SecurityQuestionService.class).update(securityQuestionTO); + } + + if (pageRef.getPage() instanceof AbstractBasePage) { + ((AbstractBasePage) pageRef.getPage()).setModalResult(true); + } + modal.close(target); + } catch (Exception e) { + LOG.error("While creating or updating SecutiryQuestionTO", e); + error(getString(Constants.ERROR) + ": " + e.getMessage()); + modal.getFeedbackPanel().refresh(target); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java new file mode 100644 index 0000000..cc3ea1b --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java @@ -0,0 +1,223 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.client.console.panels; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.client.console.SyncopeConsoleSession; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.SortableDataProviderComparator; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; +import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; +import org.apache.syncope.common.lib.types.StandardEntitlement; +import org.apache.syncope.common.rest.api.service.SecurityQuestionService; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; +import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; +import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; +import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.ResourceModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SecurityQuestionsPanel extends AbstractTypesPanel<SecurityQuestionTO> { + + private static final long serialVersionUID = 3323019773236588850L; + + private static final Logger LOG = LoggerFactory.getLogger(SecurityQuestionsPanel.class); + + private static final String PAGINATOR_ROWS_KEYS = Constants.PREF_SECURITY_QUESTIONS_PAGINATOR_ROWS; + + private final BaseModal<SecurityQuestionTO> modal; + + public SecurityQuestionsPanel( + final String id, final PageReference pageReference, final BaseModal<SecurityQuestionTO> modal) { + super(id, pageReference); + this.pageRows = prefMan.getPaginatorRows(getRequest(), PAGINATOR_ROWS_KEYS); + this.modal = modal; + + final WebMarkupContainer container = new WebMarkupContainer("container"); + container.setOutputMarkupId(true); + add(container); + + buildDataTable(container, + getColumns(container, pageReference), + new SecurityQuestionsPanel.SecurityQuestionsProvider(), + PAGINATOR_ROWS_KEYS); + + } + + private List<IColumn<SecurityQuestionTO, String>> getColumns( + final WebMarkupContainer webContainer, final PageReference pageReference) { + + final List<IColumn<SecurityQuestionTO, String>> columns = new ArrayList<>(); + + for (Field field : SecurityQuestionTO.class.getDeclaredFields()) { + + if (field != null && !Modifier.isStatic(field.getModifiers())) { + final String fieldName = field.getName(); + if (field.getType().isArray()) { + final IColumn<SecurityQuestionTO, String> column = new PropertyColumn<SecurityQuestionTO, String>( + new ResourceModel(field.getName()), field.getName()) { + + private static final long serialVersionUID = 3282547854226892169L; + + @Override + public String getCssClass() { + String css = super.getCssClass(); + if ("key".equals(fieldName)) { + css = StringUtils.isBlank(css) + ? "medium_fixedsize" + : css + " medium_fixedsize"; + } + return css; + } + }; + columns.add(column); + + } else { + final IColumn<SecurityQuestionTO, String> column = new PropertyColumn<SecurityQuestionTO, String>( + new ResourceModel(field.getName()), field.getName(), field.getName()) { + + private static final long serialVersionUID = 3282547854226892169L; + + @Override + public String getCssClass() { + String css = super.getCssClass(); + if ("key".equals(fieldName)) { + css = StringUtils.isBlank(css) + ? "medium_fixedsize" + : css + " medium_fixedsize"; + } + return css; + } + }; + columns.add(column); + } + } + } + + columns.add(new AbstractColumn<SecurityQuestionTO, String>(new ResourceModel("actions", "")) { + + private static final long serialVersionUID = 2054811145491901166L; + + @Override + public String getCssClass() { + return "action"; + } + + @Override + public void populateItem(final Item<ICellPopulator<SecurityQuestionTO>> item, final String componentId, + final IModel<SecurityQuestionTO> model) { + + final SecurityQuestionTO securityQuestionTO = model.getObject(); + + final ActionLinksPanel.Builder<Serializable> actionLinks = ActionLinksPanel.builder(pageReference); + actionLinks.setDisableIndicator(true); + actionLinks + .addWithRoles(new ActionLink<Serializable>() { + + private static final long serialVersionUID = -3722207913631435501L; + + @Override + public void onClick(final AjaxRequestTarget target, final Serializable ignore) { + modal.header(Model.of(String.valueOf(securityQuestionTO.getKey()))); + modal.setFormModel(securityQuestionTO); + target.add(modal.setContent( + new SecurityQuestionModalPanel(modal, pageReference, false))); + modal.addSumbitButton(); + modal.show(true); + } + }, ActionLink.ActionType.EDIT, StandardEntitlement.SECURITY_QUESTION_UPDATE) + .addWithRoles(new ActionLink<Serializable>() { + + private static final long serialVersionUID = -3722207913631435501L; + + @Override + public void onClick(final AjaxRequestTarget target, final Serializable ignore) { + try { + SyncopeConsoleSession.get().getService(SecurityQuestionService.class + ).delete(securityQuestionTO.getKey()); + info(getString(Constants.OPERATION_SUCCEEDED)); + feedbackPanel.refresh(target); + target.add(webContainer); + } catch (Exception e) { + LOG.error("While deleting SecutiryQuestionTO", e); + error(getString(Constants.ERROR) + ": " + e.getMessage()); + feedbackPanel.refresh(target); + } + + } + }, ActionLink.ActionType.DELETE, StandardEntitlement.SECURITY_QUESTION_DELETE); + + item.add(actionLinks.build(componentId)); + } + }); + + return columns; + + } + + private final class SecurityQuestionsProvider extends SortableDataProvider<SecurityQuestionTO, String> { + + private static final long serialVersionUID = -185944053385660794L; + + private final SortableDataProviderComparator<SecurityQuestionTO> comparator; + + private SecurityQuestionsProvider() { + super(); + setSort("key", SortOrder.ASCENDING); + comparator = new SortableDataProviderComparator<>(this); + } + + @Override + public Iterator<SecurityQuestionTO> iterator(final long first, final long count) { + final List<SecurityQuestionTO> list = SyncopeConsoleSession.get().getService(SecurityQuestionService.class). + list(); + Collections.sort(list, comparator); + return list.subList((int) first, (int) first + (int) count).iterator(); + } + + @Override + public long size() { + return SyncopeConsoleSession.get().getService(SecurityQuestionService.class).list().size(); + } + + @Override + public IModel<SecurityQuestionTO> model(final SecurityQuestionTO object) { + return new CompoundPropertyModel<>(object); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java index ff5bc7a..d8a0b8e 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java @@ -79,7 +79,7 @@ public class BaseModal<T extends Serializable> extends Modal<T> implements Notif feedbackPanel.setOutputMarkupId(true); add(feedbackPanel); - form = new Form<T>(FORM); + form = new Form<>(FORM); add(form); content = new AbstractModalPanel(this, null) { http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties index e37b4bc..20b2c4f 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties @@ -14,4 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +header_title=Logs logLevel=Log Level http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties index e37b4bc..20b2c4f 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties @@ -14,4 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +header_title=Logs logLevel=Log Level http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties index e37b4bc..20b2c4f 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties @@ -14,4 +14,5 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +header_title=Logs logLevel=Log Level http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html index c1550ee..93608d2 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html @@ -19,21 +19,31 @@ under the License. --> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> <wicket:extend> - - <section class="content-header"> - <h1> - Security Questions - <small>Work in progress</small> - </h1> - </section> - - <section class="content"> - <div class="progress progress active" style="margin:100px"> - <div style="width: 70%" aria-valuemax="100" aria-valuemin="0" aria-valuenow="20" role="progressbar" class="progress-bar progress-bar-success progress-bar-striped"> - <span class="sr-only">20% Complete</span> + <div class="wrapper"> + <div class="admin-content-page" wicket:id="content"> + <div class="box box-solid box-primary"> + <div class="box-header with-border"> + <h3 class="box-title"> + <span wicket:id="header"></span> + </h3> + <div class="box-tools pull-right"> + <ul class="nav navbar-nav actions"> + <li> + <a wicket:message="title:createSecurityQuestion" wicket:id="createSecurityQuestion"> + <i class="glyphicon glyphicon-link"></i> + </a> + </li> + </ul> + </div> + </div> + <div class="box-body"> + <div class="realms"> + <div wicket:id="securityQuestionPanel"></div> + </div> + </div> </div> </div> - </section> - + </div> + <div wicket:id="securityQuestionModal"></div> </wicket:extend> </html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties new file mode 100644 index 0000000..bb64381 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +header_title=Security Questions +createSecurityQuestion=Create new Secutiry Questions +content=Content http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties new file mode 100644 index 0000000..5943987 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +header_title=Security Questions +createSecurityQuestion=Crea una nuova domanda di sicurezza +content=Contenuto http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties new file mode 100644 index 0000000..770e81d --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +header_title=Security Questions +createSecurityQuestion=Cria um novo Security Question +content=Conte\u00fado http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.html new file mode 100644 index 0000000..153d686 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.html @@ -0,0 +1,34 @@ +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> + <wicket:panel> + <span wicket:id="container"> + <div class="form-group"> + <form wicket:id="form"> + <div class="form-group"> + <span wicket:id="key">[key]</span> + </div> + <div class="form-group"> + <span wicket:id="content">[content]</span> + </div> + </form> + </div> + </span> + </wicket:panel> +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.properties new file mode 100644 index 0000000..d55b703 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +key=Key +content=Content http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_it.properties new file mode 100644 index 0000000..17eeed6 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_it.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +key=Key +content=Contenuto http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_pt_BR.properties new file mode 100644 index 0000000..6523f0d --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionDetailsPanel_pt_BR.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +key=Key +content=Conte\u00fado http://git-wip-us.apache.org/repos/asf/syncope/blob/50ecf0d8/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.html new file mode 100644 index 0000000..224b6c0 --- /dev/null +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionModalPanel.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> + <wicket:extend> + <div wicket:id="securityQuestionDetailsPanel">[securityQuestionDetailsPanel]</div> + </wicket:extend> +</html>