diff --git a/account-ui/src/main/filters/production.properties b/account-ui/src/main/filters/production.properties index 085bf34..c413bb0 100644 --- a/account-ui/src/main/filters/production.properties +++ b/account-ui/src/main/filters/production.properties @@ -4,14 +4,14 @@ ldap.url = ldaps://host:port ## we will use provided username / password from webapplication ldap.user = user ldap.password = secret -ldap.suffix = @diebold.com -ldap.fallbackSuffix = @dieboldnixdorf.com -ldap.searchBase = dc=ad,dc=diebold,dc=com +ldap.principalSuffix = @primarySuffix +ldap.fallbackPrincipalSuffixes = @fallback1, @fallback2 +ldap.searchBase = dc=domain,dc=com ldap.searchFilter = (&(objectClass=*)(mail={0})) ## NO CHANGES BEHIND THIS LINE REQUIRED shiro.contextFactory = contextFactory = org.apache.shiro.realm.ldap.JndiLdapContextFactory${line.separator}contextFactory.url = ${ldap.url}${line.separator}contextFactory.systemUsername = ${ldap.user}${line.separator}contextFactory.systemPassword = ${ldap.password}${line.separator}contextFactory.environment[java.naming.security.protocol] = ssl shiro.passwordMatcher= passwordMatcher=org.apache.shiro.authc.credential.AllowAllCredentialsMatcher -shiro.ldapRealm = ldapRealm = de.muehlencord.shared.account.shiro.realm.UserNameActiveDirectoryRealm${line.separator}ldapRealm.principalSuffix = ${ldap.suffix}${line.separator}ldapRealm.fallbackPrincipalSuffix = ${ldap.fallbackSuffix}${line.separator}ldapRealm.ldapContextFactory = $contextFactory${line.separator}ldapRealm.searchBase = ${ldap.searchBase}${line.separator}ldapRealm.searchFilter = ${ldap.searchFilter}${line.separator}ldapRealm.permissionsLookupEnabled=false +shiro.ldapRealm = ldapRealm = de.muehlencord.shared.account.shiro.realm.UserNameActiveDirectoryRealm${line.separator}ldapRealm.principalSuffix = ${ldap.principalSuffix}${line.separator}ldapRealm.fallbackPrincipalSuffixes = ${ldap.fallbackPrincipalSuffixes}${line.separator}ldapRealm.ldapContextFactory = $contextFactory${line.separator}ldapRealm.searchBase = ${ldap.searchBase}${line.separator}ldapRealm.searchFilter = ${ldap.searchFilter}${line.separator}ldapRealm.permissionsLookupEnabled=false shiro.authcStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy shiro.realms=$jdbcRealm,$ldapRealm diff --git a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/ApplicationView.java b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/ApplicationView.java index 0fd7f9d..86a1f5b 100644 --- a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/ApplicationView.java +++ b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/ApplicationView.java @@ -1,151 +1,155 @@ -package de.muehlencord.shared.account.web.presentation; - -import de.muehlencord.shared.account.business.application.control.ApplicationControl; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.util.AccountSecurityException; -import de.muehlencord.shared.jeeutil.FacesUtil; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.enterprise.context.SessionScoped; -import javax.inject.Inject; -import javax.inject.Named; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Joern Muehlencord - */ -@SessionScoped -@Named("applicationView") -public class ApplicationView implements Serializable { - - private static final long serialVersionUID = -5515249316880163539L; - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationView.class); - - @Inject - ApplicationControl applicationService; - - @Inject - InstanceView instanceView; - - @Inject - Locale locale; - - private ApplicationEntity currentApplication = null; - private ApplicationEntity editApplication = null; - private List applicationList = null; - - @PostConstruct - public void selectDefaultCurrentApplication() { - // force applications to be loaded from database - getAllApplications(); - if ((applicationList != null) && (!applicationList.isEmpty())) { - currentApplication = applicationList.get(0); - } - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("post construct executed"); - } - } - - @PreDestroy - public void predestroy() { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Predestroy executed"); - } - - } - - public List getAllApplications() { - if (applicationList == null) { - try { - applicationList = applicationService.getAllApplications(); - - // if no role is assigned to user, ensure that at least current application is added - if ((applicationList == null) || (applicationList.isEmpty())) { - applicationList = new ArrayList<>(); - applicationList.add(instanceView.getInstanceApplication()); - } - - return applicationList; - } catch (AccountSecurityException ex) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Detailed stacktrace", new Object[]{ex}); - } - FacesUtil.addGlobalErrorMessage("Error " + ex.getErrorCode(), ex.getLocalizedMessage(locale)); - return new ArrayList<>(); - } - } - return applicationList; - } - - public void selectApplication() { - if (currentApplication != null) { - LOGGER.info("selected application: {}", currentApplication.getApplicationName()); - FacesUtil.addGlobalInfoMessage("Success", "Selected application " + currentApplication.getApplicationName()); - } - } - - public void newApplication() { - this.editApplication = new ApplicationEntity(); - } - - public void cancelEditApplication() { - this.editApplication = null; - } - - public void saveEditApplication() { - if (editApplication == null) { - FacesUtil.addGlobalErrorMessage("Error", "Need to provide data"); - } else if ((editApplication.getApplicationName() == null) || (editApplication.getApplicationName().trim().equals(""))) { - String hint; - if (editApplication.getId() == null) { - hint = "Cannot create application"; - } else { - hint = "Cannot save application"; - } - FacesUtil.addGlobalErrorMessage(hint, "Application name must not be empty"); - } else { - currentApplication = applicationService.createOrUpdate(editApplication); - // force reload of to update view - applicationList = null; - FacesUtil.addGlobalInfoMessage("Info", "Application saved"); - } - } - - public void deleteApplication() { - if (currentApplication == null) { - FacesUtil.addGlobalErrorMessage("Error", "Need to provide data"); - } else if (currentApplication.getId() == null) { - FacesUtil.addGlobalErrorMessage("Error", "Cannot delete non persistent data"); - } else { - String applicationName = currentApplication.getApplicationName(); - applicationService.delete(currentApplication); - applicationList = null; // force reload to update view - currentApplication = null; - selectDefaultCurrentApplication(); - FacesUtil.addGlobalInfoMessage("Info", "Application " + applicationName + " deleted"); - } - } - - /* *** getter / setter *** */ - public ApplicationEntity getCurrentApplication() { - return currentApplication; - } - - public void setCurrentApplication(ApplicationEntity currentApplication) { - this.currentApplication = currentApplication; - } - - public ApplicationEntity getEditApplication() { - return editApplication; - } - - public void setEditApplication(ApplicationEntity editApplication) { - this.editApplication = editApplication; - } -} +package de.muehlencord.shared.account.web.presentation; + +import de.muehlencord.shared.account.business.application.control.ApplicationControl; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.util.AccountSecurityException; +import de.muehlencord.shared.jeeutil.FacesUtil; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.inject.Named; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Joern Muehlencord + */ +@SessionScoped +@Named("applicationView") +public class ApplicationView implements Serializable { + + private static final long serialVersionUID = -5515249316880163539L; + private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationView.class); + + @Inject + ApplicationControl applicationService; + + @Inject + InstanceView instanceView; + + @Inject + Locale locale; + + private ApplicationEntity currentApplication = null; + private ApplicationEntity editApplication = null; + private List applicationList = null; + + @PostConstruct + public void selectDefaultCurrentApplication() { + // force applications to be loaded from database + getAllApplications(); + if ((applicationList != null) && (!applicationList.isEmpty())) { + currentApplication = applicationList.get(0); + } + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("post construct executed"); + } + } + + @PreDestroy + public void predestroy() { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Predestroy executed"); + } + + } + + public List getAllApplications() { + if (applicationList == null) { + try { + applicationList = applicationService.getAllApplications(); + + // if no role is assigned to user, ensure that at least current application is added + if ((applicationList == null) || (applicationList.isEmpty())) { + applicationList = new ArrayList<>(); + applicationList.add(instanceView.getInstanceApplication()); + } + + return applicationList; + } catch (AccountSecurityException ex) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Detailed stacktrace", new Object[]{ex}); + } + FacesUtil.addGlobalErrorMessage("Error " + ex.getErrorCode(), ex.getLocalizedMessage(locale)); + return new ArrayList<>(); + } + } + return applicationList; + } + + public void selectApplication() { + if (currentApplication != null) { + LOGGER.info("selected application: {}", currentApplication.getApplicationName()); + FacesUtil.addGlobalInfoMessage("Success", "Selected application " + currentApplication.getApplicationName()); + } + } + + public void startEditApplication() { + this.editApplication = currentApplication; + } + + public void newApplication() { + this.editApplication = new ApplicationEntity(); + } + + public void cancelEditApplication() { + this.editApplication = null; + } + + public void saveEditApplication() { + if (editApplication == null) { + FacesUtil.addGlobalErrorMessage("Error", "Need to provide data"); + } else if ((editApplication.getApplicationName() == null) || (editApplication.getApplicationName().trim().equals(""))) { + String hint; + if (editApplication.getId() == null) { + hint = "Cannot create application"; + } else { + hint = "Cannot save application"; + } + FacesUtil.addGlobalErrorMessage(hint, "Application name must not be empty"); + } else { + currentApplication = applicationService.createOrUpdate(editApplication); + // force reload of to update view + applicationList = null; + FacesUtil.addGlobalInfoMessage("Info", "Application saved"); + } + } + + public void deleteApplication() { + if (currentApplication == null) { + FacesUtil.addGlobalErrorMessage("Error", "Need to provide data"); + } else if (currentApplication.getId() == null) { + FacesUtil.addGlobalErrorMessage("Error", "Cannot delete non persistent data"); + } else { + String applicationName = currentApplication.getApplicationName(); + applicationService.delete(currentApplication); + applicationList = null; // force reload to update view + currentApplication = null; + selectDefaultCurrentApplication(); + FacesUtil.addGlobalInfoMessage("Info", "Application " + applicationName + " deleted"); + } + } + + /* *** getter / setter *** */ + public ApplicationEntity getCurrentApplication() { + return currentApplication; + } + + public void setCurrentApplication(ApplicationEntity currentApplication) { + this.currentApplication = currentApplication; + } + + public ApplicationEntity getEditApplication() { + return editApplication; + } + + public void setEditApplication(ApplicationEntity editApplication) { + this.editApplication = editApplication; + } +} diff --git a/account-ui/src/main/resources/admin-config.properties b/account-ui/src/main/resources/admin-config.properties index 15ee32e..e2bc279 100644 --- a/account-ui/src/main/resources/admin-config.properties +++ b/account-ui/src/main/resources/admin-config.properties @@ -1,32 +1,38 @@ -admin.loginPage=login.xhtml -admin.indexPage=web/index.xhtml -#admin.dateFormat= +admin.loginPage=login.xhtml +admin.indexPage=web/index.xhtml +#admin.dateFormat= #admin.breadcrumbSize=5 admin.renderMessages=true -#admin.renderAjaxStatus=true -## disable filter to redirect to login page - shiro security filter is already doing this +admin.renderAjaxStatus=false admin.disableFilter=true -#admin.renderBreadCrumb=true -#admin.enableSlideMenu=true -#admin.enableRipple=true -#admin.rippleElements= .ripplelink,button.ui-button,.ui-selectlistbox-item,.ui-multiselectlistbox-item,.ui-selectonemenu-label,.ui-selectcheckboxmenu,\ -#.ui-autocomplete-dropdown, .ui-autocomplete-item ... (the list goes on) -admin.skin=skin-purple-light -#admin.autoShowNavbar=true -#admin.ignoredResources= -#admin.loadingImage=ajaxloadingbar.gif -#admin.extensionLessUrls=false -admin.renderControlSidebar=false -#admin.controlSidebar.showOnMobile=false -#admin.controlSidebar.leftMenuTemplate=true -#admin.controlSidebar.fixedLayout=false -#admin.controlSidebar.boxedLayout=false -#admin.controlSidebar.sidebarCollapsed=false -#admin.controlSidebar.expandOnHover=false -#admin.controlSidebar.fixed=false -#admin.controlSidebar.darkSkin=true -#admin.rippleMobileOnly=true +admin.renderBreadCrumb=false +#admin.extensionLessUrls=false +#admin.enableSlideMenu=true +#admin.enableRipple=true +#admin.rippleMobileOnly=true admin.renderMenuSearch=false -## do not autohide +#admin.renderControlSidebar=false +#admin.controlSidebar.showOnMobile=false +#admin.controlSidebar.leftMenuTemplate=true +#admin.controlSidebar.fixedLayout=false +#admin.controlSidebar.boxedLayout=false +#admin.controlSidebar.sidebarCollapsed=false +#admin.controlSidebar.expandOnHover=false +#admin.controlSidebar.fixed=false +admin.controlSidebar.darkSkin=false admin.autoHideMessages=false -#admin.messagesHideTimeout=2500 \ No newline at end of file +admin.renderFormAsterisks=true +#admin.enableMobileHeader=true +#admin.closableLoading=true +#admin.messagesHideTimeout=2500 +admin.skin=skin-purple-light +#admin.autoShowNavbar=true +#admin.loadingImage=ajaxloadingbar.gif +#admin.iconsEffect=true +#admin.rippleElements=.ripplelink,button.ui-button:not([class*=ui-picklist]):not([class*=ui-orderlist]),li.ui-selectlistbox-item,li.ui-multiselectlistbox-item,.ui-selectonemenu-label,.ui-selectcheckboxmenu,\ +# .ui-autocomplete-dropdown, .ui-autocomplete-item, .ui-splitbutton-menubutton, .ui-splitbutton button.ui-button,.input-group, .ui-selectbooleanbutton, \ +# div.ui-button,.ui-chkbox-icon, .ui-link, .form-control, .btn, .ui-sortable-column,.ui-link, .ui-tabs-nav > li,.ui-selectonemenu-trigger, \ +# .ui-accordion-header, .treeview, .sidebar-toggle, .ui-radiobutton-icon, td[role="gridcell"], .ui-selectcheckboxmenu-trigger,.ui-paginator-page, \ +# .ui-panelmenu-header > a, a#layout-setup, .control-sidebar div#restore-defaults > a, .control-sidebar div.ui-selectbooleancheckbox .ui-chkbox, \ +# .control-sidebar span.control-sidebar-subheading > label, .control-sidebar a.skin-link, button.navbar-toggle, li.dropdown > a + diff --git a/account-ui/src/main/webapp/WEB-INF/web.xml b/account-ui/src/main/webapp/WEB-INF/web.xml index 85faa06..4b93aac 100644 --- a/account-ui/src/main/webapp/WEB-INF/web.xml +++ b/account-ui/src/main/webapp/WEB-INF/web.xml @@ -36,7 +36,7 @@ - web/index.xhtml + index.xhtml diff --git a/account-ui/src/main/webapp/index.xhtml b/account-ui/src/main/webapp/index.xhtml new file mode 100644 index 0000000..ac83f88 --- /dev/null +++ b/account-ui/src/main/webapp/index.xhtml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/account-ui/src/main/webapp/web/applications.xhtml b/account-ui/src/main/webapp/web/applications.xhtml index 66018b0..a604416 100644 --- a/account-ui/src/main/webapp/web/applications.xhtml +++ b/account-ui/src/main/webapp/web/applications.xhtml @@ -19,7 +19,7 @@
-
+
@@ -27,6 +27,12 @@
+
+ +
+
+
+ +
+
+ + + + + + +
-
- +
+