completed update of account, splitted login from account
This commit is contained in:
@ -1,140 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>shared</artifactId>
|
||||
<groupId>de.muehlencord</groupId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-account-ui</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>shared-account-ui</name>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<timestamp>${maven.build.timestamp}</timestamp>
|
||||
<maven.compiler.source>10</maven.compiler.source>
|
||||
<maven.compiler.target>10</maven.compiler.target>
|
||||
|
||||
<!-- defaul filter if not selected via profile -->
|
||||
<filter.name>development</filter.name>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.primefaces</groupId>
|
||||
<artifactId>primefaces</artifactId>
|
||||
</dependency>
|
||||
<!-- Admin faces template -->
|
||||
<dependency>
|
||||
<groupId>com.github.adminfaces</groupId>
|
||||
<artifactId>admin-template</artifactId>
|
||||
<version>1.0.0-RC19</version>
|
||||
</dependency>
|
||||
<!-- Omnifaces, faces utils -->
|
||||
<dependency>
|
||||
<groupId>org.omnifaces</groupId>
|
||||
<artifactId>omnifaces</artifactId>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
<!-- Apache Shiro, Security API -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-shiro-faces</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-account</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.sf</groupId>
|
||||
<artifactId>filter</artifactId>
|
||||
<version>1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax</groupId>
|
||||
<artifactId>javaee-web-api</artifactId>
|
||||
<version>7.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<filters>
|
||||
<filter>${basedir}/src/main/filters/${filter.name}.properties</filter>
|
||||
</filters>
|
||||
|
||||
<resources>
|
||||
<!-- fill buildinformation file -->
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<finalName>account</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<configuration>
|
||||
<source>10</source>
|
||||
<target>10</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.2.2</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>${basedir}/src/main/webapp</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>WEB-INF/web.xml</include>
|
||||
<include>WEB-INF/shiro.ini</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>development</id>
|
||||
<properties>
|
||||
<filter.name>development</filter.name>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>production</id>
|
||||
<properties>
|
||||
<filter.name>production</filter.name>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<artifactId>shared</artifactId>
|
||||
<groupId>de.muehlencord</groupId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-account-ui</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>shared-account-ui</name>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<timestamp>${maven.build.timestamp}</timestamp>
|
||||
<maven.compiler.source>10</maven.compiler.source>
|
||||
<maven.compiler.target>10</maven.compiler.target>
|
||||
|
||||
<!-- defaul filter if not selected via profile -->
|
||||
<filter.name>development</filter.name>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.primefaces</groupId>
|
||||
<artifactId>primefaces</artifactId>
|
||||
</dependency>
|
||||
<!-- Admin faces template -->
|
||||
<dependency>
|
||||
<groupId>com.github.adminfaces</groupId>
|
||||
<artifactId>admin-template</artifactId>
|
||||
<version>1.0.0-RC19</version>
|
||||
</dependency>
|
||||
<!-- Omnifaces, faces utils -->
|
||||
<dependency>
|
||||
<groupId>org.omnifaces</groupId>
|
||||
<artifactId>omnifaces</artifactId>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
<!-- Apache Shiro, Security API -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-shiro-faces</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-account</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>shared-util</artifactId>
|
||||
<version>1.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.muehlencord.sf</groupId>
|
||||
<artifactId>filter</artifactId>
|
||||
<version>1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax</groupId>
|
||||
<artifactId>javaee-web-api</artifactId>
|
||||
<version>7.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<filters>
|
||||
<filter>${basedir}/src/main/filters/${filter.name}.properties</filter>
|
||||
</filters>
|
||||
|
||||
<resources>
|
||||
<!-- fill buildinformation file -->
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<finalName>account</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<configuration>
|
||||
<source>10</source>
|
||||
<target>10</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.2.2</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>${basedir}/src/main/webapp</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>WEB-INF/web.xml</include>
|
||||
<include>WEB-INF/shiro.ini</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>development</id>
|
||||
<properties>
|
||||
<filter.name>development</filter.name>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>production</id>
|
||||
<properties>
|
||||
<filter.name>production</filter.name>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
||||
|
||||
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2018 Joern Muehlencord <joern at muehlencord.de>.
|
||||
*
|
||||
* Licensed 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 de.muehlencord.shared.account.web;
|
||||
|
||||
import de.muehlencord.shared.account.business.application.boundary.ApplicationService;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.util.UUID;
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.ejb.EJB;
|
||||
import javax.enterprise.context.ApplicationScoped;
|
||||
import javax.enterprise.inject.Produces;
|
||||
import javax.inject.Named;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@Named("applicationProdiucer")
|
||||
@ApplicationScoped
|
||||
public class ApplicationProducer {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationProducer.class);
|
||||
|
||||
@EJB
|
||||
ApplicationService applicationService;
|
||||
|
||||
private ApplicationEntity application = null;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
String id = "143a2bd3-7e0b-4162-a76e-3031331c7dfe"; // TODO load from properties file
|
||||
this.application = applicationService.findById(UUID.fromString(id));
|
||||
if (application == null) {
|
||||
LOGGER.error("Could not find application with id ");
|
||||
} else {
|
||||
LOGGER.info("Found application {} for id{}", application.getApplicationName(), id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* needs to return link to "Account UI" and not to current selected
|
||||
* application TODO: ensure only Account UI can call functions where
|
||||
* appliction can be handed in all other applications need to call the
|
||||
* function which use the injected application
|
||||
*/
|
||||
@Produces
|
||||
public ApplicationEntity getApplication() {
|
||||
return application;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,186 +1,300 @@
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.AccountControl;
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationRoleControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountEntity;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountStatus;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import de.muehlencord.shared.jeeutil.FacesUtil;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.view.ViewScoped;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Inject;
|
||||
import org.primefaces.event.SelectEvent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jomu
|
||||
*/
|
||||
@ViewScoped
|
||||
@Named("accountView")
|
||||
public class AccountView implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8050582392249849438L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AccountView.class);
|
||||
|
||||
@Inject
|
||||
private ApplicationView applicationView;
|
||||
@EJB
|
||||
private AccountControl accountService;
|
||||
@EJB
|
||||
private ApplicationRoleControl appliationRoleService;
|
||||
|
||||
/**
|
||||
* boolean flag to determine wether disabled accounts should be shown
|
||||
* accounts are not deleted but disabled and can be activated in case
|
||||
*/
|
||||
private boolean showDisabledAccounts = false;
|
||||
|
||||
// cached accounts
|
||||
private List<AccountEntity> accountList = null;
|
||||
// cached application roles
|
||||
private List<ApplicationRoleEntity> applicationRoles = null;
|
||||
|
||||
// account currently on edit
|
||||
private AccountEntity currentAccount;
|
||||
private List<ApplicationRoleEntity> currentAccountRoles = null;
|
||||
|
||||
public List<AccountEntity> getAccounts() {
|
||||
if (accountList == null) {
|
||||
accountList = accountService.getAccounts(showDisabledAccounts);
|
||||
}
|
||||
return accountList;
|
||||
}
|
||||
|
||||
public List<ApplicationRoleEntity> getAllApplicationRoles() {
|
||||
if (applicationRoles == null) {
|
||||
ApplicationEntity application = applicationView.getCurrentApplication();
|
||||
applicationRoles = appliationRoleService.getAllRoles(application);
|
||||
}
|
||||
return applicationRoles;
|
||||
}
|
||||
|
||||
public void selectAccount(SelectEvent event) {
|
||||
if (currentAccount == null) {
|
||||
applicationRoles = null;
|
||||
currentAccountRoles = null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getAccountSelected() {
|
||||
return currentAccount != null;
|
||||
}
|
||||
|
||||
public void newAccount() {
|
||||
currentAccount = new AccountEntity();
|
||||
currentAccount.setUsername(null);
|
||||
currentAccount.setStatus("NEW"); // TODO add status enum
|
||||
currentAccountRoles = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void editAccount() {
|
||||
// function called by webpage
|
||||
if (currentAccount == null) {
|
||||
currentAccountRoles = null;
|
||||
} else {
|
||||
currentAccount = accountService.getAccountEntity(currentAccount.getUsername(), true);
|
||||
this.currentAccountRoles = new ArrayList<>();
|
||||
if (currentAccount.getApplicationRoleList() != null) {
|
||||
currentAccountRoles.addAll(currentAccount.getApplicationRoleList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelEditAccount() {
|
||||
currentAccount = null;
|
||||
currentAccountRoles = null;
|
||||
}
|
||||
|
||||
public void saveEditAccount() {
|
||||
String username = currentAccount.getUsername();
|
||||
AccountEntity existingEntity = accountService.getAccountEntity(username, true);
|
||||
// check if it is a new user (createdBy == null) but a user with same name already exists
|
||||
if ((currentAccount.getCreatedBy() == null) && (existingEntity != null)) {
|
||||
currentAccount.setUsername(null);
|
||||
FacesUtil.addErrorMessage("editDialogMessaegs", "Create new account failed", "Account with username " + username + " already exists");
|
||||
} else {
|
||||
accountService.saveAccount(applicationView.getCurrentApplication(), currentAccount, currentAccountRoles);
|
||||
if (currentAccount.getId() == null) {
|
||||
// this was a new account
|
||||
// force accounts to be loaded from database again
|
||||
accountList = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteAccount() {
|
||||
try {
|
||||
accountService.deleteAccount(currentAccount);
|
||||
accountList.remove(currentAccount);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Account " + currentAccount.getUsername() + " deleted");
|
||||
currentAccount = null;
|
||||
currentAccountRoles = null;
|
||||
} catch (AccountException ex) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(ex.toString(), ex);
|
||||
} else {
|
||||
LOGGER.error(ex.toString());
|
||||
}
|
||||
|
||||
FacesUtil.addGlobalErrorMessage("Error deleting account", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void showDisabledAccountsChange() {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("show diabled accounts changed to {}", showDisabledAccounts);
|
||||
}
|
||||
this.accountList = null;
|
||||
}
|
||||
|
||||
public List<String> getStatusList() {
|
||||
return AccountStatus.getAllStatusNames();
|
||||
}
|
||||
|
||||
/* **** getter / setter **** */
|
||||
/**
|
||||
* setter for managed property applicationView
|
||||
*
|
||||
* @param applicationView the applicaton view to inject
|
||||
*/
|
||||
public void setApplicationView(ApplicationView applicationView) {
|
||||
this.applicationView = applicationView;
|
||||
}
|
||||
|
||||
public AccountEntity getCurrentAccount() {
|
||||
return currentAccount;
|
||||
}
|
||||
|
||||
public void setCurrentAccount(AccountEntity currentAccount) {
|
||||
this.currentAccount = currentAccount;
|
||||
}
|
||||
|
||||
public boolean isShowDisabledAccounts() {
|
||||
return showDisabledAccounts;
|
||||
}
|
||||
|
||||
public void setShowDisabledAccounts(boolean showDisabledAccounts) {
|
||||
this.showDisabledAccounts = showDisabledAccounts;
|
||||
}
|
||||
|
||||
public List<ApplicationRoleEntity> getCurrentAccountRoles() {
|
||||
return currentAccountRoles;
|
||||
}
|
||||
|
||||
public void setCurrentAccountRoles(List<ApplicationRoleEntity> currentAccountRoles) {
|
||||
this.currentAccountRoles = currentAccountRoles;
|
||||
}
|
||||
|
||||
}
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.AccountControl;
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationRoleControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountEntity;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountLoginEntity;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountStatus;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import de.muehlencord.shared.jeeutil.FacesUtil;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.component.UIInput;
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.view.ViewScoped;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Inject;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.primefaces.event.SelectEvent;
|
||||
import org.primefaces.event.UnselectEvent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jomu
|
||||
*/
|
||||
@ViewScoped
|
||||
@Named("accountView")
|
||||
public class AccountView implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8050582392249849438L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AccountView.class);
|
||||
|
||||
@Inject
|
||||
private ApplicationView applicationView;
|
||||
@EJB
|
||||
private AccountControl accountService;
|
||||
@EJB
|
||||
private ApplicationRoleControl appliationRoleService;
|
||||
|
||||
/**
|
||||
* boolean flag to determine wether disabled accounts should be shown
|
||||
* accounts are not deleted but disabled and can be activated in case
|
||||
*/
|
||||
private boolean showDisabledAccounts = false;
|
||||
|
||||
// cached accounts
|
||||
private List<AccountEntity> accountList = null;
|
||||
// cached application roles
|
||||
private List<ApplicationRoleEntity> applicationRoles = null;
|
||||
|
||||
// account currently on edit
|
||||
private AccountEntity currentAccount;
|
||||
private List<ApplicationRoleEntity> currentAccountRoles = null;
|
||||
private AccountLoginEntity currentAccountLogin;
|
||||
private String password = null;
|
||||
private String repeatPassword = null;
|
||||
|
||||
public List<AccountEntity> getAccounts() {
|
||||
if (accountList == null) {
|
||||
accountList = accountService.getAccounts(showDisabledAccounts);
|
||||
}
|
||||
return accountList;
|
||||
}
|
||||
|
||||
public List<ApplicationRoleEntity> getAllApplicationRoles() {
|
||||
if (applicationRoles == null) {
|
||||
ApplicationEntity application = applicationView.getCurrentApplication();
|
||||
applicationRoles = appliationRoleService.getAllRoles(application);
|
||||
}
|
||||
return applicationRoles;
|
||||
}
|
||||
|
||||
public void selectAccount(SelectEvent event) {
|
||||
// nothing to do, currentAccountRoles are loaded before dialog is shown
|
||||
}
|
||||
|
||||
public void unselectAccount(UnselectEvent event) {
|
||||
applicationRoles = null;
|
||||
currentAccountRoles = null;
|
||||
}
|
||||
|
||||
public boolean getAccountSelected() {
|
||||
return currentAccount != null;
|
||||
}
|
||||
|
||||
public void newAccount() {
|
||||
currentAccount = new AccountEntity();
|
||||
currentAccount.setStatus("NEW"); // TODO add status enum
|
||||
currentAccountRoles = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void editAccount() {
|
||||
// function called by webpage
|
||||
if (currentAccount == null) {
|
||||
currentAccountRoles = null;
|
||||
} else {
|
||||
currentAccount = accountService.getAccountEntity(currentAccount.getUsername(), true);
|
||||
this.currentAccountRoles = new ArrayList<>();
|
||||
if (currentAccount.getApplicationRoleList() != null) {
|
||||
currentAccountRoles.addAll(currentAccount.getApplicationRoleList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelEditAccount() {
|
||||
currentAccount = null;
|
||||
currentAccountRoles = null;
|
||||
}
|
||||
|
||||
public void saveEditAccount() {
|
||||
String username = currentAccount.getUsername();
|
||||
AccountEntity existingEntity = accountService.getAccountEntity(username, true);
|
||||
// check if it is a new user (createdBy == null) but a user with same name already exists
|
||||
if ((currentAccount.getCreatedBy() == null) && (existingEntity != null)) {
|
||||
FacesUtil.addErrorMessage("editDialogMessaegs", "Create new account failed", "Account with username " + username + " already exists");
|
||||
} else {
|
||||
accountService.saveAccount(currentAccount, currentAccountRoles);
|
||||
// force accounts to be loaded from database again
|
||||
accountList = null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteAccount() {
|
||||
try {
|
||||
accountService.deleteAccount(currentAccount);
|
||||
accountList.remove(currentAccount);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Account " + currentAccount.getUsername() + " deleted");
|
||||
currentAccount = null;
|
||||
currentAccountRoles = null;
|
||||
} catch (AccountException ex) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(ex.toString(), ex);
|
||||
} else {
|
||||
LOGGER.error(ex.toString());
|
||||
}
|
||||
|
||||
FacesUtil.addGlobalErrorMessage("Error deleting account", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void showDisabledAccountsChange() {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("show diabled accounts changed to {}", showDisabledAccounts);
|
||||
}
|
||||
this.accountList = null;
|
||||
}
|
||||
|
||||
public List<String> getStatusList() {
|
||||
return AccountStatus.getAllStatusNames();
|
||||
}
|
||||
|
||||
/* **** account login methods **** */
|
||||
public boolean validatePasswords(FacesContext context, List<UIInput> components, List<Object> values) {
|
||||
String password = components.get(0).getSubmittedValue().toString();
|
||||
String passwordRepeat = components.get(1).getSubmittedValue().toString();
|
||||
|
||||
if ((password == null) || (passwordRepeat == null)) {
|
||||
return false;
|
||||
}
|
||||
boolean returnValue = password.equals(passwordRepeat);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public void addAccountLogin() {
|
||||
if (currentAccount == null) {
|
||||
// TODO add error handling
|
||||
} else {
|
||||
this.currentAccountLogin = accountService.createLoginWithRandomPassword();
|
||||
}
|
||||
}
|
||||
|
||||
public void editAccountLogin() {
|
||||
if (currentAccount == null) {
|
||||
// TODO add error handling
|
||||
} else {
|
||||
this.currentAccountLogin = currentAccount.getAccountLogin();
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteAccountLogin() {
|
||||
if (currentAccount == null) {
|
||||
// TODO add error handling
|
||||
} else {
|
||||
accountService.deleteLogin(currentAccount);
|
||||
currentAccount.setAccountLogin(null);
|
||||
currentAccountLogin = null;
|
||||
accountList = null; // force reload
|
||||
FacesUtil.addGlobalInfoMessage("Account saved", "Login removed");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void saveEditAccountLogin() {
|
||||
// TODO move to account control - to much logic for the view
|
||||
if ((currentAccountLogin == null) || (currentAccount == null)) {
|
||||
// TODO add error handling
|
||||
} else {
|
||||
|
||||
// overwrite password if provided
|
||||
if ((password != null) && (!password.trim().equals(""))) {
|
||||
// password has been specified
|
||||
if (password.equals(repeatPassword)) {
|
||||
currentAccount.getAccountLogin().setAccountPassword(accountService.getHashedPassword(password));
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Password updated");
|
||||
} else {
|
||||
// TODO connect to IPRS
|
||||
// frontend does validate passwords do match
|
||||
// someone is trying to cheat
|
||||
}
|
||||
}
|
||||
|
||||
if (currentAccountLogin.getId() == null) {
|
||||
accountService.addLogin(currentAccount, currentAccountLogin);
|
||||
currentAccount.setAccountLogin(currentAccountLogin);
|
||||
accountList = null; // force reload of accounts
|
||||
} else {
|
||||
accountService.updateLogin(currentAccountLogin);
|
||||
}
|
||||
currentAccountLogin = null;
|
||||
FacesUtil.addGlobalInfoMessage("Account saved", "Login data updated");
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelEditAccountLogin() {
|
||||
this.currentAccountLogin = null;
|
||||
}
|
||||
|
||||
public boolean getCurrentLoggedInUser() {
|
||||
if (currentAccount == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Subject currentUser = SecurityUtils.getSubject();
|
||||
if (currentUser == null) {
|
||||
// TODO - connect to IPRS - how can this method be called if no user is logged in
|
||||
return false;
|
||||
}
|
||||
String currentUserName = currentUser.getPrincipal().toString();
|
||||
return currentUserName.equals(currentAccount.getUsername());
|
||||
}
|
||||
|
||||
/* **** getter / setter **** */
|
||||
/**
|
||||
* setter for managed property applicationView
|
||||
*
|
||||
* @param applicationView the applicaton view to inject
|
||||
*/
|
||||
public void setApplicationView(ApplicationView applicationView) {
|
||||
this.applicationView = applicationView;
|
||||
}
|
||||
|
||||
public AccountEntity getCurrentAccount() {
|
||||
return currentAccount;
|
||||
}
|
||||
|
||||
public void setCurrentAccount(AccountEntity currentAccount) {
|
||||
this.currentAccount = currentAccount;
|
||||
}
|
||||
|
||||
public boolean isShowDisabledAccounts() {
|
||||
return showDisabledAccounts;
|
||||
}
|
||||
|
||||
public void setShowDisabledAccounts(boolean showDisabledAccounts) {
|
||||
this.showDisabledAccounts = showDisabledAccounts;
|
||||
}
|
||||
|
||||
public List<ApplicationRoleEntity> getCurrentAccountRoles() {
|
||||
return currentAccountRoles;
|
||||
}
|
||||
|
||||
public void setCurrentAccountRoles(List<ApplicationRoleEntity> currentAccountRoles) {
|
||||
this.currentAccountRoles = currentAccountRoles;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String getRepeatPassword() {
|
||||
return repeatPassword;
|
||||
}
|
||||
|
||||
public void setRepeatPassword(String repeatPassword) {
|
||||
this.repeatPassword = repeatPassword;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,149 +1,145 @@
|
||||
/*
|
||||
* Copyright 2017 Joern Muehlencord <joern at muehlencord.de>.
|
||||
*
|
||||
* Licensed 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 de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationPermissionControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import de.muehlencord.shared.jeeutil.FacesUtil;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import javax.ejb.EJB;
|
||||
import javax.inject.Named;
|
||||
import javax.faces.view.ViewScoped;
|
||||
import javax.inject.Inject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@ViewScoped
|
||||
@Named("permissionView")
|
||||
public class PermissionView implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -1469453490360990772L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(PermissionView.class);
|
||||
|
||||
@Inject
|
||||
private ApplicationView applicationView;
|
||||
|
||||
@EJB
|
||||
ApplicationPermissionControl applicationPermissionService;
|
||||
private ApplicationPermissionEntity currentPermission;
|
||||
|
||||
public List<ApplicationPermissionEntity> getAppPermissions() {
|
||||
return applicationPermissionService.getApplicationPermissions(applicationView.getCurrentApplication());
|
||||
}
|
||||
|
||||
public void saveEditPermission() throws AccountException {
|
||||
if (currentPermission != null) {
|
||||
ApplicationEntity currentApplication = applicationView.getCurrentApplication();
|
||||
String currentApplicationName = currentApplication.getApplicationName();
|
||||
String newPermissionName = currentPermission.getPermissionName();
|
||||
String newPermissionDescription = currentPermission.getPermissionDescription();
|
||||
if ((newPermissionName == null) || (newPermissionName.trim().length() == 0)) {
|
||||
FacesUtil.addErrorMessage("editDialogMessages", "Error", "Permission name must not be null");
|
||||
} else if ((newPermissionDescription == null) || (newPermissionDescription.trim().length() == 0)) {
|
||||
FacesUtil.addErrorMessage("editDialogMessages", "Error", "Permission name must not be null");
|
||||
} else {
|
||||
if (currentPermission.getId() == null) {
|
||||
applicationPermissionService.create(currentApplicationName, newPermissionName, newPermissionName);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Permission " + newPermissionName + " created");
|
||||
// deselectPermission();
|
||||
} else {
|
||||
applicationPermissionService.update(currentPermission);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Permission " + newPermissionName + " updated");
|
||||
// deselectPermission();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ApplicationEntity getCurrentApplication() {
|
||||
if (applicationView.getCurrentApplication() == null) {
|
||||
return null;
|
||||
} else {
|
||||
return applicationView.getCurrentApplication();
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelEditPermission() {
|
||||
this.currentPermission = null;
|
||||
}
|
||||
|
||||
public void newPermission() {
|
||||
this.currentPermission = new ApplicationPermissionEntity();
|
||||
}
|
||||
|
||||
public void editPermission() {
|
||||
if (currentPermission == null) {
|
||||
FacesUtil.addGlobalErrorMessage("Error", "Please select a permission to edit");
|
||||
}
|
||||
}
|
||||
|
||||
public void deletePermission() {
|
||||
if (currentPermission == null) {
|
||||
FacesUtil.addGlobalErrorMessage("Error", "Please select a permission to edit");
|
||||
} else {
|
||||
try {
|
||||
applicationPermissionService.delete(currentPermission);
|
||||
currentPermission = null;
|
||||
} catch (AccountException ex) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(ex.toString(), ex);
|
||||
} else {
|
||||
LOGGER.debug(ex.toString());
|
||||
}
|
||||
FacesUtil.addGlobalErrorMessage("Error while deleting permission.", ex.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getCanEdit() {
|
||||
return isPermissionSelected();
|
||||
}
|
||||
|
||||
public boolean getCanDelete() {
|
||||
return isPermissionSelected();
|
||||
}
|
||||
|
||||
/* *** getter / setter *** */
|
||||
/**
|
||||
* required setter for managedProperty
|
||||
*
|
||||
*
|
||||
* @param applicationView the injected applicationView
|
||||
*/
|
||||
public void setApplicationView(ApplicationView applicationView) {
|
||||
this.applicationView = applicationView;
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity getCurrentPermission() {
|
||||
return currentPermission;
|
||||
}
|
||||
|
||||
public void setCurrentPermission(ApplicationPermissionEntity newCurrentPermission) {
|
||||
this.currentPermission = newCurrentPermission;
|
||||
|
||||
}
|
||||
|
||||
public boolean isPermissionSelected() {
|
||||
return currentPermission != null;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 2017 Joern Muehlencord <joern at muehlencord.de>.
|
||||
*
|
||||
* Licensed 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 de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationPermissionControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import de.muehlencord.shared.jeeutil.FacesUtil;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import javax.ejb.EJB;
|
||||
import javax.inject.Named;
|
||||
import javax.faces.view.ViewScoped;
|
||||
import javax.inject.Inject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@ViewScoped
|
||||
@Named("permissionView")
|
||||
public class PermissionView implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -1469453490360990772L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(PermissionView.class);
|
||||
|
||||
@Inject
|
||||
private ApplicationView applicationView;
|
||||
|
||||
@EJB
|
||||
ApplicationPermissionControl applicationPermissionService;
|
||||
private ApplicationPermissionEntity currentPermission;
|
||||
|
||||
public List<ApplicationPermissionEntity> getAppPermissions() {
|
||||
return applicationPermissionService.getApplicationPermissions(applicationView.getCurrentApplication());
|
||||
}
|
||||
|
||||
public void saveEditPermission() throws AccountException {
|
||||
if (currentPermission != null) {
|
||||
String newPermissionName = currentPermission.getPermissionName();
|
||||
String newPermissionDescription = currentPermission.getPermissionDescription();
|
||||
if ((newPermissionName == null) || (newPermissionName.trim().length() == 0)) {
|
||||
FacesUtil.addErrorMessage("editDialogMessages", "Error", "Permission name must not be null");
|
||||
} else if ((newPermissionDescription == null) || (newPermissionDescription.trim().length() == 0)) {
|
||||
FacesUtil.addErrorMessage("editDialogMessages", "Error", "Permission name must not be null");
|
||||
} else {
|
||||
if (currentPermission.getId() == null) {
|
||||
applicationPermissionService.create(applicationView.getCurrentApplication(), newPermissionName, newPermissionName);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Permission " + newPermissionName + " created");
|
||||
} else {
|
||||
applicationPermissionService.update(currentPermission);
|
||||
FacesUtil.addGlobalInfoMessage("Info", "Permission " + newPermissionName + " updated");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ApplicationEntity getCurrentApplication() {
|
||||
if (applicationView.getCurrentApplication() == null) {
|
||||
return null;
|
||||
} else {
|
||||
return applicationView.getCurrentApplication();
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelEditPermission() {
|
||||
this.currentPermission = null;
|
||||
}
|
||||
|
||||
public void newPermission() {
|
||||
this.currentPermission = new ApplicationPermissionEntity();
|
||||
}
|
||||
|
||||
public void editPermission() {
|
||||
if (currentPermission == null) {
|
||||
FacesUtil.addGlobalErrorMessage("Error", "Please select a permission to edit");
|
||||
}
|
||||
}
|
||||
|
||||
public void deletePermission() {
|
||||
if (currentPermission == null) {
|
||||
FacesUtil.addGlobalErrorMessage("Error", "Please select a permission to edit");
|
||||
} else {
|
||||
try {
|
||||
applicationPermissionService.delete(currentPermission);
|
||||
currentPermission = null;
|
||||
} catch (AccountException ex) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(ex.toString(), ex);
|
||||
} else {
|
||||
LOGGER.debug(ex.toString());
|
||||
}
|
||||
FacesUtil.addGlobalErrorMessage("Error while deleting permission.", ex.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getCanEdit() {
|
||||
return isPermissionSelected();
|
||||
}
|
||||
|
||||
public boolean getCanDelete() {
|
||||
return isPermissionSelected();
|
||||
}
|
||||
|
||||
/* *** getter / setter *** */
|
||||
/**
|
||||
* required setter for managedProperty
|
||||
*
|
||||
*
|
||||
* @param applicationView the injected applicationView
|
||||
*/
|
||||
public void setApplicationView(ApplicationView applicationView) {
|
||||
this.applicationView = applicationView;
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity getCurrentPermission() {
|
||||
return currentPermission;
|
||||
}
|
||||
|
||||
public void setCurrentPermission(ApplicationPermissionEntity newCurrentPermission) {
|
||||
this.currentPermission = newCurrentPermission;
|
||||
|
||||
}
|
||||
|
||||
public boolean isPermissionSelected() {
|
||||
return currentPermission != null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,60 +1,56 @@
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationPermissionControl;
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationRoleControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.io.Serializable;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.application.FacesMessage;
|
||||
import javax.faces.component.UIComponent;
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.validator.FacesValidator;
|
||||
import javax.faces.validator.Validator;
|
||||
import javax.faces.validator.ValidatorException;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@FacesValidator("uniqueApplicationRoleNameValidator")
|
||||
public class UniqueApplicationRoleNameValidator implements Validator, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8165013107453616719L;
|
||||
|
||||
@Inject
|
||||
EntityManager em;
|
||||
|
||||
@EJB
|
||||
ApplicationRoleControl applicationRoleControl;
|
||||
|
||||
@Override
|
||||
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
|
||||
Object applicationObj = component.getAttributes().get("application");
|
||||
if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
|
||||
ApplicationEntity application = (ApplicationEntity) applicationObj;
|
||||
if (value == null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must not be empty"));
|
||||
}
|
||||
if (value instanceof String) {
|
||||
String roleName = (String) value;
|
||||
ApplicationRoleEntity existingRole = applicationRoleControl.findByName(application, roleName);
|
||||
if (existingRole != null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role already exists"));
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must be a string value"));
|
||||
// TODO add IPRS logger - someone is trying to cheat
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationRoleControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
|
||||
import de.muehlencord.shared.account.business.application.boundary.ApplicationService;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.io.Serializable;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.application.FacesMessage;
|
||||
import javax.faces.component.UIComponent;
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.validator.FacesValidator;
|
||||
import javax.faces.validator.Validator;
|
||||
import javax.faces.validator.ValidatorException;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@FacesValidator("uniqueApplicationRoleNameValidator")
|
||||
public class UniqueApplicationRoleNameValidator implements Validator, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8165013107453616719L;
|
||||
|
||||
@Inject
|
||||
EntityManager em;
|
||||
|
||||
@EJB
|
||||
ApplicationRoleControl applicationRoleControl;
|
||||
|
||||
@Override
|
||||
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
|
||||
Object applicationObj = component.getAttributes().get("application");
|
||||
if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
|
||||
ApplicationEntity application = (ApplicationEntity) applicationObj;
|
||||
if (value == null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must not be empty"));
|
||||
}
|
||||
if (value instanceof String) {
|
||||
String roleName = (String) value;
|
||||
ApplicationRoleEntity existingRole = applicationRoleControl.findByName(application, roleName);
|
||||
if (existingRole != null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role already exists"));
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must be a string value"));
|
||||
// TODO add IPRS logger - someone is trying to cheat
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,59 +1,59 @@
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationPermissionControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.io.Serializable;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.application.FacesMessage;
|
||||
import javax.faces.component.UIComponent;
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.validator.FacesValidator;
|
||||
import javax.faces.validator.Validator;
|
||||
import javax.faces.validator.ValidatorException;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@FacesValidator("uniquePermissionNameValidator")
|
||||
public class UniquePermissionNameValidator implements Validator, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2526409681909574670L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(UniquePermissionNameValidator.class);
|
||||
|
||||
@Inject
|
||||
EntityManager em;
|
||||
|
||||
@EJB
|
||||
ApplicationPermissionControl applicationPermissionControl;
|
||||
|
||||
@Override
|
||||
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
|
||||
Object applicationObj = component.getAttributes().get("application");
|
||||
if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
|
||||
ApplicationEntity application = (ApplicationEntity) applicationObj;
|
||||
if (value == null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must not be empty"));
|
||||
}
|
||||
if (value instanceof String) {
|
||||
String permissionName = (String) value;
|
||||
ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permissionName);
|
||||
if (existingPermission != null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission already exists"));
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must be a string value"));
|
||||
// TODO add IPRS logger - someone is trying to cheat
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package de.muehlencord.shared.account.web.presentation;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.boundary.ApplicationPermissionControl;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.io.Serializable;
|
||||
import javax.ejb.EJB;
|
||||
import javax.faces.application.FacesMessage;
|
||||
import javax.faces.component.UIComponent;
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.validator.FacesValidator;
|
||||
import javax.faces.validator.Validator;
|
||||
import javax.faces.validator.ValidatorException;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||
*/
|
||||
@FacesValidator("uniquePermissionNameValidator")
|
||||
public class UniquePermissionNameValidator implements Validator, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2526409681909574670L;
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(UniquePermissionNameValidator.class);
|
||||
|
||||
@Inject
|
||||
EntityManager em;
|
||||
|
||||
@EJB
|
||||
ApplicationPermissionControl applicationPermissionControl;
|
||||
|
||||
@Override
|
||||
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
|
||||
Object applicationObj = component.getAttributes().get("application");
|
||||
if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
|
||||
ApplicationEntity application = (ApplicationEntity) applicationObj;
|
||||
if (value == null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must not be empty"));
|
||||
}
|
||||
if (value instanceof String) {
|
||||
String permissionName = (String) value;
|
||||
ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permissionName);
|
||||
if (existingPermission != null) {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission already exists"));
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must be a string value"));
|
||||
// TODO add IPRS logger - someone is trying to cheat
|
||||
}
|
||||
} else {
|
||||
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
|
||||
<persistence-unit name="com.wincornixdorf.pcd_pu" transaction-type="JTA">
|
||||
<jta-data-source>java:/jboss/accountTestDs</jta-data-source>
|
||||
<persistence-unit name="de.muehlencord.shared.accountUiPu" transaction-type="JTA">
|
||||
<jta-data-source>java:/jboss/accountTestDs</jta-data-source>
|
||||
<class>de.muehlencord.shared.account.business.account.entity.AccountEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.account.entity.AccountHistoryEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.account.entity.AccountLoginEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.application.entity.ApplicationEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.config.entity.ConfigEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.mail.entity.MailTemplateEntity</class>
|
||||
<class>de.muehlencord.shared.account.business.application.entity.ApplicationEntity</class>
|
||||
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
|
||||
<validation-mode>NONE</validation-mode>
|
||||
|
||||
@ -1,132 +1,133 @@
|
||||
header_login=Login
|
||||
header_reset_password=Reset password
|
||||
message_username_password=Please enter your user name and a new password
|
||||
button_login=Login
|
||||
button_cancel=Cancel
|
||||
button_password_lost=Password lost?
|
||||
label_username=Username
|
||||
label_password=Password
|
||||
label_new_password=New Password
|
||||
button_password_reset=Reset password
|
||||
header_passwort_lost=Lost password
|
||||
message_start_password_reset=Please enter your username to start the password recovery procedure
|
||||
menu_dashboard=Dashboard
|
||||
menu_events=Events
|
||||
menu_administration=Administration
|
||||
menu_overview=Overview
|
||||
menu_emails=Emails
|
||||
menu_account=Account
|
||||
menu_config=Config
|
||||
menu_logout=Logout
|
||||
button_new=New
|
||||
button_delete=Delete
|
||||
button_edit=Edit
|
||||
button_reload=Reload
|
||||
label_name=Name
|
||||
label_description=Description
|
||||
label_event_date=Event Date
|
||||
label_reservation=Reservation
|
||||
label_reservation_from_to=Reservation from/to
|
||||
label_actions=Actions
|
||||
message_confirm=Are you sure?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservations
|
||||
label_event_name=Event Name
|
||||
label_event_item_desc=Event Item Description
|
||||
label_timezone=Timezone
|
||||
label_event_start=Event Start
|
||||
label_event_end=Event End
|
||||
label_reservation_autostart=Reservation start
|
||||
label_reservation_autoend=Reservation end
|
||||
label_reservation_active=Reservation active
|
||||
label_reservation_max_items=Max Items
|
||||
label_booking_deadline=Booking deadline
|
||||
label_template_validation=Email validation mail template
|
||||
label_template_confirmation=Event confirmation mail template
|
||||
label_template_waitlist=Event waitlist mail template
|
||||
message_event_not_found=Event not found
|
||||
label_items=Items
|
||||
label_costs=Costs
|
||||
label_all=All
|
||||
label_yes=Yes
|
||||
label_no=No
|
||||
label_status=Status
|
||||
label_firstname=Firstname
|
||||
label_lastname=Lastname
|
||||
label_emailaddress=Emailaddress
|
||||
label_comment=Comment
|
||||
label_email_confirmed=Email confirmed
|
||||
label_booking_number=Booking Number
|
||||
label_booking_executed=booking executed
|
||||
tt_log_entries=Show log entries
|
||||
tt_cancel_reservation=Cancel the current reservation
|
||||
tt_send_email_again=Send email again
|
||||
tt_move_from_wl=Move from waitlist
|
||||
tt_fix_reservation=Try to fix the current reservation
|
||||
tt_edit_reservation=Edit the reservation
|
||||
button_refresh_free=Refresh free
|
||||
button_manual_reserve=Reserve
|
||||
button_export=Export
|
||||
label_amount=Amount
|
||||
label_select=Select
|
||||
label_created_by=Created by
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Value
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Please add a comment
|
||||
menu_help=Help
|
||||
label_event=Event
|
||||
label_active=Active
|
||||
label_waitlist=Waitlist
|
||||
label_is_waitlist=Is waitlist
|
||||
label_order=Order
|
||||
message_dynamic_numbering=dynamic numbering (put %n as placeholder)
|
||||
label_start_number=Start Number
|
||||
label_end_number=End Number
|
||||
header_item_def=Define items for event
|
||||
message_no_event_items=No event item defined
|
||||
button_overview=Overview
|
||||
label_reservation_auto_start=Automatically switch on/off
|
||||
label_item_public=Item public?
|
||||
label_is_publicitem=Is public
|
||||
label_customer_comment=Customer comment
|
||||
label_change_comment=Change comment
|
||||
label_existing_items=current items
|
||||
label_new_items=new items
|
||||
label_available_items=available items
|
||||
label_no_records=No records found.
|
||||
button_mail=Mail
|
||||
header_email_distribution=Email distribution
|
||||
label_template=Template
|
||||
label_demomode=Demo mode
|
||||
message_invalid_email=Please provide a valid email address
|
||||
menu_permissions=Permissions
|
||||
button_save=Save
|
||||
menu_groups=Groups
|
||||
message_email_sent=email sent
|
||||
message_email_with_error=emails with error
|
||||
message_no_email=no email address defined
|
||||
message_email_not_sent=Error while sending emails
|
||||
label_seating=Seating
|
||||
label_attachments=Attachments
|
||||
label_language=Language
|
||||
label_subject=Subject
|
||||
label_bytes=Bytes
|
||||
label_upload=Upload
|
||||
header_export=Export
|
||||
label_export_type=Export Type
|
||||
label_filtered=Filtered
|
||||
label_include_deleted=Include deleted
|
||||
label_include_log=Include Logs
|
||||
label_template_booking_executed=Booking executed template
|
||||
label_street=Street
|
||||
label_zipCode=ZIP Code
|
||||
label_city=City
|
||||
label_groupName=Groupname
|
||||
label_phoneNumber=Phone Number
|
||||
label_template_waitlist_cancelled=Waitlist cancelled mail template
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Add
|
||||
header_login=Login
|
||||
header_reset_password=Reset password
|
||||
message_username_password=Please enter your user name and a new password
|
||||
button_login=Login
|
||||
button_cancel=Cancel
|
||||
button_password_lost=Password lost?
|
||||
label_username=Username
|
||||
label_password=Password
|
||||
label_new_password=New Password
|
||||
button_password_reset=Reset password
|
||||
header_passwort_lost=Lost password
|
||||
message_start_password_reset=Please enter your username to start the password recovery procedure
|
||||
menu_dashboard=Dashboard
|
||||
menu_events=Events
|
||||
menu_administration=Administration
|
||||
menu_overview=Overview
|
||||
menu_emails=Emails
|
||||
menu_account=Account
|
||||
menu_config=Config
|
||||
menu_logout=Logout
|
||||
button_new=New
|
||||
button_delete=Delete
|
||||
button_edit=Edit
|
||||
button_reload=Reload
|
||||
label_name=Name
|
||||
label_description=Description
|
||||
label_event_date=Event Date
|
||||
label_reservation=Reservation
|
||||
label_reservation_from_to=Reservation from/to
|
||||
label_actions=Actions
|
||||
message_confirm=Are you sure?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservations
|
||||
label_event_name=Event Name
|
||||
label_event_item_desc=Event Item Description
|
||||
label_timezone=Timezone
|
||||
label_event_start=Event Start
|
||||
label_event_end=Event End
|
||||
label_reservation_autostart=Reservation start
|
||||
label_reservation_autoend=Reservation end
|
||||
label_reservation_active=Reservation active
|
||||
label_reservation_max_items=Max Items
|
||||
label_booking_deadline=Booking deadline
|
||||
label_template_validation=Email validation mail template
|
||||
label_template_confirmation=Event confirmation mail template
|
||||
label_template_waitlist=Event waitlist mail template
|
||||
message_event_not_found=Event not found
|
||||
label_items=Items
|
||||
label_costs=Costs
|
||||
label_all=All
|
||||
label_yes=Yes
|
||||
label_no=No
|
||||
label_status=Status
|
||||
label_firstname=Firstname
|
||||
label_lastname=Lastname
|
||||
label_emailaddress=Emailaddress
|
||||
label_comment=Comment
|
||||
label_email_confirmed=Email confirmed
|
||||
label_booking_number=Booking Number
|
||||
label_booking_executed=booking executed
|
||||
tt_log_entries=Show log entries
|
||||
tt_cancel_reservation=Cancel the current reservation
|
||||
tt_send_email_again=Send email again
|
||||
tt_move_from_wl=Move from waitlist
|
||||
tt_fix_reservation=Try to fix the current reservation
|
||||
tt_edit_reservation=Edit the reservation
|
||||
button_refresh_free=Refresh free
|
||||
button_manual_reserve=Reserve
|
||||
button_export=Export
|
||||
label_amount=Amount
|
||||
label_select=Select
|
||||
label_created_by=Created by
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Value
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Please add a comment
|
||||
menu_help=Help
|
||||
label_event=Event
|
||||
label_active=Active
|
||||
label_waitlist=Waitlist
|
||||
label_is_waitlist=Is waitlist
|
||||
label_order=Order
|
||||
message_dynamic_numbering=dynamic numbering (put %n as placeholder)
|
||||
label_start_number=Start Number
|
||||
label_end_number=End Number
|
||||
header_item_def=Define items for event
|
||||
message_no_event_items=No event item defined
|
||||
button_overview=Overview
|
||||
label_reservation_auto_start=Automatically switch on/off
|
||||
label_item_public=Item public?
|
||||
label_is_publicitem=Is public
|
||||
label_customer_comment=Customer comment
|
||||
label_change_comment=Change comment
|
||||
label_existing_items=current items
|
||||
label_new_items=new items
|
||||
label_available_items=available items
|
||||
label_no_records=No records found.
|
||||
button_mail=Mail
|
||||
header_email_distribution=Email distribution
|
||||
label_template=Template
|
||||
label_demomode=Demo mode
|
||||
message_invalid_email=Please provide a valid email address
|
||||
menu_permissions=Permissions
|
||||
button_save=Save
|
||||
menu_groups=Groups
|
||||
message_email_sent=email sent
|
||||
message_email_with_error=emails with error
|
||||
message_no_email=no email address defined
|
||||
message_email_not_sent=Error while sending emails
|
||||
label_seating=Seating
|
||||
label_attachments=Attachments
|
||||
label_language=Language
|
||||
label_subject=Subject
|
||||
label_bytes=Bytes
|
||||
label_upload=Upload
|
||||
header_export=Export
|
||||
label_export_type=Export Type
|
||||
label_filtered=Filtered
|
||||
label_include_deleted=Include deleted
|
||||
label_include_log=Include Logs
|
||||
label_template_booking_executed=Booking executed template
|
||||
label_street=Street
|
||||
label_zipCode=ZIP Code
|
||||
label_city=City
|
||||
label_groupName=Groupname
|
||||
label_phoneNumber=Phone Number
|
||||
label_template_waitlist_cancelled=Waitlist cancelled mail template
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Add
|
||||
passwords_different=Passwords do not match, please check input
|
||||
|
||||
@ -1,133 +1,134 @@
|
||||
|
||||
header_login=Anmeldung
|
||||
header_reset_password=Passwort zur\u00fccksetzten
|
||||
message_username_password=Bitte geben Deinen Benutzernamen und dein Passwort ein
|
||||
button_login=Anmelden
|
||||
button_cancel=Abbruch
|
||||
button_password_lost=Passwort vergessen?
|
||||
label_username=Benutzername
|
||||
label_password=Passwort
|
||||
label_new_password=Neues Passwort
|
||||
button_password_reset=Passwort zur\u00fccksetzten
|
||||
header_passwort_lost=Passwort vergessen
|
||||
message_start_password_reset=Bitte gib deinen Benutzernamen ein um das Zur\u00fccksetzten des Passworts zu starten.
|
||||
menu_dashboard=Dashbaord
|
||||
menu_events=Veranstaltungen
|
||||
menu_administration=Administration
|
||||
menu_overview=\u00dcbersicht
|
||||
menu_emails=E-Mails
|
||||
menu_account=Benutzer
|
||||
menu_config=Konfiguration
|
||||
menu_logout=Abmelden
|
||||
button_new=Neu
|
||||
button_delete=L\u00f6schen
|
||||
button_edit=Bearbeiten
|
||||
button_reload=Aktualisieren
|
||||
label_name=Name
|
||||
label_description=Beschreibung
|
||||
label_event_date=Veranstaltungsdatum
|
||||
label_reservation=Reservierung
|
||||
label_reservation_from_to=Reservierung von/bis
|
||||
label_actions=Aktionen
|
||||
message_confirm=Bist du sicher?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservierungen
|
||||
label_event_name=Veranstaltungsname
|
||||
label_event_item_desc=Veranstaltungsobjekte
|
||||
label_timezone=Zeitzone
|
||||
label_event_start=Veranstaltungsbeginn
|
||||
label_event_end=Veranstaltungsende
|
||||
label_reservation_autostart=Reservierung von
|
||||
label_reservation_autoend=Reservierung bis
|
||||
label_reservation_active=Reservierung aktiv
|
||||
label_reservation_max_items=Maximale Objekte
|
||||
label_booking_deadline=Buchungsfrist
|
||||
label_template_validation=Vorlage Emailvalidierung
|
||||
label_template_confirmation=Vorlage Reservierungsbest\u00e4tigung
|
||||
label_template_waitlist=Vorlage Wartelist
|
||||
message_event_not_found=Veranstaltung nicht gefunden
|
||||
label_items=Objekte
|
||||
label_costs=Kosten
|
||||
label_all=Alle
|
||||
label_yes=Ja
|
||||
label_no=Nein
|
||||
label_status=Status
|
||||
label_firstname=Vorname
|
||||
label_lastname=Nachname
|
||||
label_emailaddress=E-Mail-Adresse
|
||||
label_comment=Kommentar
|
||||
label_email_confirmed=E-Mail best\u00e4tigt
|
||||
label_booking_number=Buchungsnummer
|
||||
label_booking_executed=Buchungs ausgef\u00fchrt
|
||||
tt_log_entries=Logbucheintr\u00e4ge
|
||||
tt_cancel_reservation=Storniere die Reservierung
|
||||
tt_send_email_again=Sende E-Mail erneut
|
||||
tt_move_from_wl=Schiebe von Warteliste
|
||||
tt_fix_reservation=Versuche den Fehler zu beheben
|
||||
tt_edit_reservation=Bearbeite die Reservierung
|
||||
button_refresh_free=Frei aktualisieren
|
||||
button_manual_reserve=Reservieren
|
||||
button_export=Exportieren
|
||||
label_amount=Anzahl
|
||||
label_select=W\u00e4hlen
|
||||
label_created_by=Erzeugt durch
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Wert
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Bitte geben Sie einen Kommentar an
|
||||
menu_help=Hilfe
|
||||
label_event=Veranstaltung
|
||||
label_active=Aktiv
|
||||
label_waitlist=Warteliste
|
||||
label_is_waitlist=Ist Warteliste
|
||||
label_order=Reihenfolge
|
||||
message_dynamic_numbering=Dynamische Nummerierung (%n als Platzhalter)
|
||||
label_start_number=Startnummer
|
||||
label_end_number=Endnummer
|
||||
header_item_def=Objekte f\u00fcr Veranstaltung
|
||||
message_no_event_items=Keine Objekte definiert
|
||||
button_overview=\u00dcbersicht
|
||||
label_reservation_auto_start=Automatisch ein/ausschalten
|
||||
label_item_public=\u00d6ffentlich verf\u00fcgar?
|
||||
label_is_publicitem=\u00d6ffentlich
|
||||
label_customer_comment=Kundenkommentar
|
||||
label_change_comment=\u00c4nderungskommentar
|
||||
label_existing_items=aktuelle Objekte
|
||||
label_new_items=neue Objekte
|
||||
label_available_items=verf\u00fcgbare Objekte
|
||||
label_no_records=Keine Daten gefunden.
|
||||
button_mail=E-Mail
|
||||
header_email_distribution=Emailversand
|
||||
label_template=Vorlage
|
||||
label_demomode=Demomodus
|
||||
message_invalid_email=Bitte geben Sie eine g\u00fcltige Emailadresse an
|
||||
menu_permissions=Berechtigungen
|
||||
button_save=Speichern
|
||||
menu_groups=Gruppen
|
||||
message_email_sent=Email gesendet
|
||||
message_email_with_error=Emails mit Fehler
|
||||
message_no_email=keine Emailadresse verf\u00fcgbar
|
||||
message_email_not_sent=Fehler beim Versenden der Email
|
||||
label_seating=Saalplan Platz
|
||||
label_attachments=Attachments
|
||||
label_language=Sprache
|
||||
label_subject=Betreff
|
||||
label_bytes=Bytes
|
||||
label_upload=Upload
|
||||
header_export=Exportieren
|
||||
label_export_type=Export Art
|
||||
label_filtered=Gefiltert
|
||||
label_include_deleted=Einschlie\u00dflich gel\u00f6scht
|
||||
label_include_log=mit Logbuch
|
||||
label_template_booking_executed=Vorlage Buchung durchgef\u00fchrt
|
||||
label_street=Stra\u00dfe
|
||||
label_zipCode=PLZ
|
||||
label_city=Ort
|
||||
label_groupName=Gruppenname
|
||||
label_phoneNumber=Telefonnummer
|
||||
label_template_waitlist_cancelled=Vorlage Warteliste Abbruch
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Hinzuf\u00fcgen
|
||||
|
||||
header_login=Anmeldung
|
||||
header_reset_password=Passwort zur\u00fccksetzten
|
||||
message_username_password=Bitte geben Deinen Benutzernamen und dein Passwort ein
|
||||
button_login=Anmelden
|
||||
button_cancel=Abbruch
|
||||
button_password_lost=Passwort vergessen?
|
||||
label_username=Benutzername
|
||||
label_password=Passwort
|
||||
label_new_password=Neues Passwort
|
||||
button_password_reset=Passwort zur\u00fccksetzten
|
||||
header_passwort_lost=Passwort vergessen
|
||||
message_start_password_reset=Bitte gib deinen Benutzernamen ein um das Zur\u00fccksetzten des Passworts zu starten.
|
||||
menu_dashboard=Dashbaord
|
||||
menu_events=Veranstaltungen
|
||||
menu_administration=Administration
|
||||
menu_overview=\u00dcbersicht
|
||||
menu_emails=E-Mails
|
||||
menu_account=Benutzer
|
||||
menu_config=Konfiguration
|
||||
menu_logout=Abmelden
|
||||
button_new=Neu
|
||||
button_delete=L\u00f6schen
|
||||
button_edit=Bearbeiten
|
||||
button_reload=Aktualisieren
|
||||
label_name=Name
|
||||
label_description=Beschreibung
|
||||
label_event_date=Veranstaltungsdatum
|
||||
label_reservation=Reservierung
|
||||
label_reservation_from_to=Reservierung von/bis
|
||||
label_actions=Aktionen
|
||||
message_confirm=Bist du sicher?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservierungen
|
||||
label_event_name=Veranstaltungsname
|
||||
label_event_item_desc=Veranstaltungsobjekte
|
||||
label_timezone=Zeitzone
|
||||
label_event_start=Veranstaltungsbeginn
|
||||
label_event_end=Veranstaltungsende
|
||||
label_reservation_autostart=Reservierung von
|
||||
label_reservation_autoend=Reservierung bis
|
||||
label_reservation_active=Reservierung aktiv
|
||||
label_reservation_max_items=Maximale Objekte
|
||||
label_booking_deadline=Buchungsfrist
|
||||
label_template_validation=Vorlage Emailvalidierung
|
||||
label_template_confirmation=Vorlage Reservierungsbest\u00e4tigung
|
||||
label_template_waitlist=Vorlage Wartelist
|
||||
message_event_not_found=Veranstaltung nicht gefunden
|
||||
label_items=Objekte
|
||||
label_costs=Kosten
|
||||
label_all=Alle
|
||||
label_yes=Ja
|
||||
label_no=Nein
|
||||
label_status=Status
|
||||
label_firstname=Vorname
|
||||
label_lastname=Nachname
|
||||
label_emailaddress=E-Mail-Adresse
|
||||
label_comment=Kommentar
|
||||
label_email_confirmed=E-Mail best\u00e4tigt
|
||||
label_booking_number=Buchungsnummer
|
||||
label_booking_executed=Buchungs ausgef\u00fchrt
|
||||
tt_log_entries=Logbucheintr\u00e4ge
|
||||
tt_cancel_reservation=Storniere die Reservierung
|
||||
tt_send_email_again=Sende E-Mail erneut
|
||||
tt_move_from_wl=Schiebe von Warteliste
|
||||
tt_fix_reservation=Versuche den Fehler zu beheben
|
||||
tt_edit_reservation=Bearbeite die Reservierung
|
||||
button_refresh_free=Frei aktualisieren
|
||||
button_manual_reserve=Reservieren
|
||||
button_export=Exportieren
|
||||
label_amount=Anzahl
|
||||
label_select=W\u00e4hlen
|
||||
label_created_by=Erzeugt durch
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Wert
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Bitte geben Sie einen Kommentar an
|
||||
menu_help=Hilfe
|
||||
label_event=Veranstaltung
|
||||
label_active=Aktiv
|
||||
label_waitlist=Warteliste
|
||||
label_is_waitlist=Ist Warteliste
|
||||
label_order=Reihenfolge
|
||||
message_dynamic_numbering=Dynamische Nummerierung (%n als Platzhalter)
|
||||
label_start_number=Startnummer
|
||||
label_end_number=Endnummer
|
||||
header_item_def=Objekte f\u00fcr Veranstaltung
|
||||
message_no_event_items=Keine Objekte definiert
|
||||
button_overview=\u00dcbersicht
|
||||
label_reservation_auto_start=Automatisch ein/ausschalten
|
||||
label_item_public=\u00d6ffentlich verf\u00fcgar?
|
||||
label_is_publicitem=\u00d6ffentlich
|
||||
label_customer_comment=Kundenkommentar
|
||||
label_change_comment=\u00c4nderungskommentar
|
||||
label_existing_items=aktuelle Objekte
|
||||
label_new_items=neue Objekte
|
||||
label_available_items=verf\u00fcgbare Objekte
|
||||
label_no_records=Keine Daten gefunden.
|
||||
button_mail=E-Mail
|
||||
header_email_distribution=Emailversand
|
||||
label_template=Vorlage
|
||||
label_demomode=Demomodus
|
||||
message_invalid_email=Bitte geben Sie eine g\u00fcltige Emailadresse an
|
||||
menu_permissions=Berechtigungen
|
||||
button_save=Speichern
|
||||
menu_groups=Gruppen
|
||||
message_email_sent=Email gesendet
|
||||
message_email_with_error=Emails mit Fehler
|
||||
message_no_email=keine Emailadresse verf\u00fcgbar
|
||||
message_email_not_sent=Fehler beim Versenden der Email
|
||||
label_seating=Saalplan Platz
|
||||
label_attachments=Attachments
|
||||
label_language=Sprache
|
||||
label_subject=Betreff
|
||||
label_bytes=Bytes
|
||||
label_upload=Upload
|
||||
header_export=Exportieren
|
||||
label_export_type=Export Art
|
||||
label_filtered=Gefiltert
|
||||
label_include_deleted=Einschlie\u00dflich gel\u00f6scht
|
||||
label_include_log=mit Logbuch
|
||||
label_template_booking_executed=Vorlage Buchung durchgef\u00fchrt
|
||||
label_street=Stra\u00dfe
|
||||
label_zipCode=PLZ
|
||||
label_city=Ort
|
||||
label_groupName=Gruppenname
|
||||
label_phoneNumber=Telefonnummer
|
||||
label_template_waitlist_cancelled=Vorlage Warteliste Abbruch
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Hinzuf\u00fcgen
|
||||
passwords_different=Passw\u00f6rter stimmen \u00fcberein, bitte \u00fcberpr\u00fcfen Sie ihre Eingabe
|
||||
|
||||
@ -1,133 +1,134 @@
|
||||
|
||||
header_login=Login
|
||||
header_reset_password=Reset password
|
||||
message_username_password=Please enter your user name and a new password
|
||||
button_login=Login
|
||||
button_cancel=Cancel
|
||||
button_password_lost=Password lost?
|
||||
label_username=Username
|
||||
label_password=Password
|
||||
label_new_password=New Password
|
||||
button_password_reset=Reset password
|
||||
header_passwort_lost=Lost password
|
||||
message_start_password_reset=Please enter your username to start the password recovery procedure
|
||||
menu_dashboard=Dashboard
|
||||
menu_events=Events
|
||||
menu_administration=Administration
|
||||
menu_overview=Overview
|
||||
menu_emails=Emails
|
||||
menu_account=Account
|
||||
menu_config=Config
|
||||
menu_logout=Logout
|
||||
button_new=New
|
||||
button_delete=Delete
|
||||
button_edit=Edit
|
||||
button_reload=Reload
|
||||
label_name=Name
|
||||
label_description=Description
|
||||
label_event_date=Event Date
|
||||
label_reservation=Reservation
|
||||
label_reservation_from_to=Reservation from/to
|
||||
label_actions=Actions
|
||||
message_confirm=Are you sure?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservations
|
||||
label_event_name=Event Name
|
||||
label_event_item_desc=Event Item Description
|
||||
label_timezone=Timezone
|
||||
label_event_start=Event Start
|
||||
label_event_end=Event End
|
||||
label_reservation_autostart=Reservation Start
|
||||
label_reservation_autoend=Reservation End
|
||||
label_reservation_active=Reservation active
|
||||
label_reservation_max_items=Max Items
|
||||
label_booking_deadline=Booking deadline
|
||||
label_template_validation=Email validation mail template
|
||||
label_template_confirmation=Event confirmation mail template
|
||||
label_template_waitlist=Event waitlist mail template
|
||||
message_event_not_found=Event not found
|
||||
label_items=Items
|
||||
label_costs=Costs
|
||||
label_all=All
|
||||
label_yes=Yes
|
||||
label_no=No
|
||||
label_status=Status
|
||||
label_firstname=Firstname
|
||||
label_lastname=Lastname
|
||||
label_emailaddress=Emailaddress
|
||||
label_comment=Comment
|
||||
label_email_confirmed=Email confirmed
|
||||
label_booking_number=Booking Number
|
||||
label_booking_executed=booking executed
|
||||
tt_log_entries=Show log entries
|
||||
tt_cancel_reservation=Cancel the current reservation
|
||||
tt_send_email_again=Send email again
|
||||
tt_move_from_wl=Move from waitlist
|
||||
tt_fix_reservation=Try to fix the current reservation
|
||||
tt_edit_reservation=Edit the reservation
|
||||
button_refresh_free=Refresh free
|
||||
button_manual_reserve=Reserve
|
||||
button_export=Export
|
||||
label_amount=Amount
|
||||
label_select=Select
|
||||
label_created_by=Created by
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Value
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Please add a comment
|
||||
menu_help=Help
|
||||
label_event=Event
|
||||
label_active=Active
|
||||
label_waitlist=Waitlist
|
||||
label_is_waitlist=Is waitlist
|
||||
label_order=Reservation Order
|
||||
message_dynamic_numbering=dynamic numbering (put %n as placeholder)
|
||||
label_start_number=Start Number
|
||||
label_end_number=End Number
|
||||
header_item_def=Define items for event
|
||||
message_no_event_items=No event item defined
|
||||
button_overview=Overview
|
||||
label_reservation_auto_start=Automatically switch on/off
|
||||
label_item_public=Item public?
|
||||
label_is_publicitem=Is public
|
||||
label_customer_comment=Customer comment
|
||||
label_change_comment=Change comment
|
||||
label_existing_items=current items
|
||||
label_new_items=new items
|
||||
label_available_items=available items
|
||||
label_no_records=No records found.
|
||||
button_mail=Mail
|
||||
header_email_distribution=Email distribution
|
||||
label_template=Template
|
||||
label_demomode=Demo mode
|
||||
message_invalid_email=Please provide a valid email address
|
||||
menu_permissions=Permissions
|
||||
button_save=Save
|
||||
menu_groups=Groups
|
||||
message_email_sent=email sent
|
||||
message_email_with_error=emails with error
|
||||
message_no_email=no email address defined
|
||||
message_email_not_sent=Error while sending emails
|
||||
label_seating=Seating
|
||||
label_attachments=Anh\u00e4nge
|
||||
label_language=Language
|
||||
label_subject=Subject
|
||||
label_bytes=Bytes
|
||||
label_upload=Hochladen
|
||||
header_export=Export
|
||||
label_export_type=Export Type
|
||||
label_filtered=Filtered
|
||||
label_include_deleted=Include deleted
|
||||
label_include_log=Include Logs
|
||||
label_template_booking_executed=Booking executed template
|
||||
label_street=Street
|
||||
label_zipCode=ZIP Code
|
||||
label_city=City
|
||||
label_groupName=Groupname
|
||||
label_phoneNumber=Phone Number
|
||||
label_template_waitlist_cancelled=Waitlist cancelled mail template
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Add
|
||||
|
||||
header_login=Login
|
||||
header_reset_password=Reset password
|
||||
message_username_password=Please enter your user name and a new password
|
||||
button_login=Login
|
||||
button_cancel=Cancel
|
||||
button_password_lost=Password lost?
|
||||
label_username=Username
|
||||
label_password=Password
|
||||
label_new_password=New Password
|
||||
button_password_reset=Reset password
|
||||
header_passwort_lost=Lost password
|
||||
message_start_password_reset=Please enter your username to start the password recovery procedure
|
||||
menu_dashboard=Dashboard
|
||||
menu_events=Events
|
||||
menu_administration=Administration
|
||||
menu_overview=Overview
|
||||
menu_emails=Emails
|
||||
menu_account=Account
|
||||
menu_config=Config
|
||||
menu_logout=Logout
|
||||
button_new=New
|
||||
button_delete=Delete
|
||||
button_edit=Edit
|
||||
button_reload=Reload
|
||||
label_name=Name
|
||||
label_description=Description
|
||||
label_event_date=Event Date
|
||||
label_reservation=Reservation
|
||||
label_reservation_from_to=Reservation from/to
|
||||
label_actions=Actions
|
||||
message_confirm=Are you sure?
|
||||
button_setup=Setup
|
||||
button_reservations=Reservations
|
||||
label_event_name=Event Name
|
||||
label_event_item_desc=Event Item Description
|
||||
label_timezone=Timezone
|
||||
label_event_start=Event Start
|
||||
label_event_end=Event End
|
||||
label_reservation_autostart=Reservation Start
|
||||
label_reservation_autoend=Reservation End
|
||||
label_reservation_active=Reservation active
|
||||
label_reservation_max_items=Max Items
|
||||
label_booking_deadline=Booking deadline
|
||||
label_template_validation=Email validation mail template
|
||||
label_template_confirmation=Event confirmation mail template
|
||||
label_template_waitlist=Event waitlist mail template
|
||||
message_event_not_found=Event not found
|
||||
label_items=Items
|
||||
label_costs=Costs
|
||||
label_all=All
|
||||
label_yes=Yes
|
||||
label_no=No
|
||||
label_status=Status
|
||||
label_firstname=Firstname
|
||||
label_lastname=Lastname
|
||||
label_emailaddress=Emailaddress
|
||||
label_comment=Comment
|
||||
label_email_confirmed=Email confirmed
|
||||
label_booking_number=Booking Number
|
||||
label_booking_executed=booking executed
|
||||
tt_log_entries=Show log entries
|
||||
tt_cancel_reservation=Cancel the current reservation
|
||||
tt_send_email_again=Send email again
|
||||
tt_move_from_wl=Move from waitlist
|
||||
tt_fix_reservation=Try to fix the current reservation
|
||||
tt_edit_reservation=Edit the reservation
|
||||
button_refresh_free=Refresh free
|
||||
button_manual_reserve=Reserve
|
||||
button_export=Export
|
||||
label_amount=Amount
|
||||
label_select=Select
|
||||
label_created_by=Created by
|
||||
label_ip=IP
|
||||
label_ip_forwarded=IP (forwarded)
|
||||
label_value=Value
|
||||
label_useragent=Useragent
|
||||
button_ok=Ok
|
||||
message_comment=Please add a comment
|
||||
menu_help=Help
|
||||
label_event=Event
|
||||
label_active=Active
|
||||
label_waitlist=Waitlist
|
||||
label_is_waitlist=Is waitlist
|
||||
label_order=Reservation Order
|
||||
message_dynamic_numbering=dynamic numbering (put %n as placeholder)
|
||||
label_start_number=Start Number
|
||||
label_end_number=End Number
|
||||
header_item_def=Define items for event
|
||||
message_no_event_items=No event item defined
|
||||
button_overview=Overview
|
||||
label_reservation_auto_start=Automatically switch on/off
|
||||
label_item_public=Item public?
|
||||
label_is_publicitem=Is public
|
||||
label_customer_comment=Customer comment
|
||||
label_change_comment=Change comment
|
||||
label_existing_items=current items
|
||||
label_new_items=new items
|
||||
label_available_items=available items
|
||||
label_no_records=No records found.
|
||||
button_mail=Mail
|
||||
header_email_distribution=Email distribution
|
||||
label_template=Template
|
||||
label_demomode=Demo mode
|
||||
message_invalid_email=Please provide a valid email address
|
||||
menu_permissions=Permissions
|
||||
button_save=Save
|
||||
menu_groups=Groups
|
||||
message_email_sent=email sent
|
||||
message_email_with_error=emails with error
|
||||
message_no_email=no email address defined
|
||||
message_email_not_sent=Error while sending emails
|
||||
label_seating=Seating
|
||||
label_attachments=Anh\u00e4nge
|
||||
label_language=Language
|
||||
label_subject=Subject
|
||||
label_bytes=Bytes
|
||||
label_upload=Hochladen
|
||||
header_export=Export
|
||||
label_export_type=Export Type
|
||||
label_filtered=Filtered
|
||||
label_include_deleted=Include deleted
|
||||
label_include_log=Include Logs
|
||||
label_template_booking_executed=Booking executed template
|
||||
label_street=Street
|
||||
label_zipCode=ZIP Code
|
||||
label_city=City
|
||||
label_groupName=Groupname
|
||||
label_phoneNumber=Phone Number
|
||||
label_template_waitlist_cancelled=Waitlist cancelled mail template
|
||||
msgs_menu_status=Status
|
||||
menu_status=Status
|
||||
button_add=Add
|
||||
passwords_different=Passwords do not match, please check input
|
||||
|
||||
@ -1,56 +1,56 @@
|
||||
[main]
|
||||
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
|
||||
securityManager.cacheManager = $cacheManager
|
||||
|
||||
# DataSource Setup
|
||||
datasource = org.apache.shiro.jndi.JndiObjectFactory
|
||||
datasource.resourceName = java:/jboss/accountTestDs
|
||||
# TODO - change to accountDs
|
||||
datasource.resourceRef = true
|
||||
|
||||
# HashService
|
||||
hashService = org.apache.shiro.crypto.hash.DefaultHashService
|
||||
hashService.hashIterations = 500000
|
||||
hashService.hashAlgorithmName = SHA-512
|
||||
hashService.generatePublicSalt = true
|
||||
|
||||
# Password service
|
||||
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
|
||||
passwordService.hashService = $hashService
|
||||
|
||||
# Required password matcher
|
||||
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher
|
||||
passwordMatcher.passwordService = $passwordService
|
||||
|
||||
# JDBC Realm setup
|
||||
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
|
||||
jdbcRealm.permissionsLookupEnabled=false
|
||||
jdbcRealm.authenticationQuery = select account_password from account where username = ? and status not in ('LOCKED','DELETED')
|
||||
jdbcRealm.userRolesQuery = select r.role_name from application_role r, account_role ar, account a WHERE a.username = ? AND a.id = ar.account AND ar.account_role = r.id
|
||||
jdbcRealm.credentialsMatcher = $passwordMatcher
|
||||
jdbcRealm.dataSource = $datasource
|
||||
|
||||
# Activate realms
|
||||
authcStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy
|
||||
securityManager.realms = $jdbcRealm
|
||||
securityManager.authenticator.authenticationStrategy = $authcStrategy
|
||||
|
||||
# Setup authentication filter
|
||||
authc = de.muehlencord.shirofaces.filter.FacesAjaxAwarePassThruAuthenticationFilter
|
||||
authc.loginUrl = /login.xhtml
|
||||
authc.successUrl = /web/account.xhtml
|
||||
|
||||
roles.unauthorizedUrl = /error/accessDenied.xhtml
|
||||
|
||||
#
|
||||
# filter setup
|
||||
#
|
||||
[urls]
|
||||
/public/**=anon
|
||||
/resources/**=anon
|
||||
/fonts/**=anon
|
||||
/javax.faces.resource/**=anon
|
||||
/login.xhtml=authc
|
||||
/logout.xhtml=logout
|
||||
/**=authc
|
||||
# /web/**=authc
|
||||
[main]
|
||||
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
|
||||
securityManager.cacheManager = $cacheManager
|
||||
|
||||
# DataSource Setup
|
||||
datasource = org.apache.shiro.jndi.JndiObjectFactory
|
||||
datasource.resourceName = java:/jboss/accountTestDs
|
||||
# TODO - change to accountDs
|
||||
datasource.resourceRef = true
|
||||
|
||||
# HashService
|
||||
hashService = org.apache.shiro.crypto.hash.DefaultHashService
|
||||
hashService.hashIterations = 500000
|
||||
hashService.hashAlgorithmName = SHA-512
|
||||
hashService.generatePublicSalt = true
|
||||
|
||||
# Password service
|
||||
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
|
||||
passwordService.hashService = $hashService
|
||||
|
||||
# Required password matcher
|
||||
passwordMatcher = org.apache.shiro.authc.credential.PasswordMatcher
|
||||
passwordMatcher.passwordService = $passwordService
|
||||
|
||||
# JDBC Realm setup
|
||||
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
|
||||
jdbcRealm.permissionsLookupEnabled=false
|
||||
jdbcRealm.authenticationQuery = select al.account_password from account a, account_login al where al.account = a.id and a.username = ? and status not in ('LOCKED','DELETED')
|
||||
jdbcRealm.userRolesQuery = select r.role_name from application_role r, account_role ar, account a WHERE a.username = ? AND a.id = ar.account AND ar.account_role = r.id
|
||||
jdbcRealm.credentialsMatcher = $passwordMatcher
|
||||
jdbcRealm.dataSource = $datasource
|
||||
|
||||
# Activate realms
|
||||
authcStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy
|
||||
securityManager.realms = $jdbcRealm
|
||||
securityManager.authenticator.authenticationStrategy = $authcStrategy
|
||||
|
||||
# Setup authentication filter
|
||||
authc = de.muehlencord.shirofaces.filter.FacesAjaxAwarePassThruAuthenticationFilter
|
||||
authc.loginUrl = /login.xhtml
|
||||
authc.successUrl = /web/account.xhtml
|
||||
|
||||
roles.unauthorizedUrl = /error/accessDenied.xhtml
|
||||
|
||||
#
|
||||
# filter setup
|
||||
#
|
||||
[urls]
|
||||
/public/**=anon
|
||||
/resources/**=anon
|
||||
/fonts/**=anon
|
||||
/javax.faces.resource/**=anon
|
||||
/login.xhtml=authc
|
||||
/logout.xhtml=logout
|
||||
/**=authc
|
||||
# /web/**=authc
|
||||
|
||||
@ -1,251 +1,314 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui"
|
||||
template="/resources/template/template.xhtml"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||
xmlns:co="http://java.sun.com/jsf/composite/composite"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:composite="http://xmlns.jcp.org/jsf/composite/composite">
|
||||
|
||||
<ui:define name="title">
|
||||
Account Overview
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="description">
|
||||
for #{applicationView.currentApplication.applicationName}
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="body">
|
||||
<h:form id="accountForm">
|
||||
<p:dataTable id="accountTable" value="#{accountView.accounts}" var="account" rowKey="#{account.username}" selectionMode="single" selection="#{accountView.currentAccount}"
|
||||
styleClass="box-primary">
|
||||
<p:ajax event="rowSelect" update="deleteButton,editButton" listener="#{accountView.selectAccount}" />
|
||||
<p:ajax event="rowUnselect" update="deleteButton,editButton" listener="#{accountView.selectAccount}" />
|
||||
<p:column headerText="Username">
|
||||
<h:outputText value="#{account.username}" />
|
||||
</p:column>
|
||||
<p:column headerText="Lastname">
|
||||
<h:outputText value="#{account.lastname}" />
|
||||
</p:column>
|
||||
<p:column headerText="Firstname">
|
||||
<h:outputText value="#{account.firstname}" />
|
||||
</p:column>
|
||||
<p:column headerText="Email">
|
||||
<h:outputText value="#{account.emailaddress}" />
|
||||
</p:column>
|
||||
<p:column headerText="Last login">
|
||||
<h:outputText value="#{account.lastLogin}" />
|
||||
</p:column>
|
||||
<p:column headerText="Status">
|
||||
<h:outputText value="#{account.status}" />
|
||||
</p:column>
|
||||
<p:column headerText="CreatedOn">
|
||||
<h:outputText value="#{account.createdOn}" >
|
||||
<f:convertDateTime type="both" dateStyle="full" timeStyle="short" timeZone="Europe/Berlin"/>
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
<p:column headerText="CreatedBy">
|
||||
<h:outputText value="#{account.createdBy}" />
|
||||
</p:column>
|
||||
<p:column headerText="LastUpdatedOn">
|
||||
<h:outputText value="#{account.lastUpdatedOn}">
|
||||
<f:convertDateTime type="both" dateStyle="full" timeStyle="short" timeZone="Europe/Berlin"/>
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
<p:column headerText="LastUpdatedBy">
|
||||
<h:outputText value="#{account.lastUpdatedBy}" />
|
||||
</p:column>
|
||||
<f:facet name="footer" >
|
||||
|
||||
<div class="col-sm-12 col-md-3" style="margin-top:10px">
|
||||
<p:spacer height="10px" />
|
||||
<div class="ui-inputgroup" >
|
||||
<h:outputLabel for="includeDisabledCheckbox" value="Include disabled accounts?" />
|
||||
<p:inputSwitch id="includeDisabledCheckbox" value="#{accountView.showDisabledAccounts}" styleClass="btn-teal btn-block" >
|
||||
<p:ajax listener="#{accountView.showDisabledAccountsChange}" update="accountTable" />
|
||||
</p:inputSwitch>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="New" id="newButton" icon="fa fa-plus"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{accountView.newAccount}" styleClass="btn-primary btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Edit" id="editButton" icon="fa fa-pencil"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{accountView.editAccount}" disabled="#{!accountView.accountSelected}" styleClass="btn-teal btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Delete" id="deleteButton" icon="fa fa-trash-o"
|
||||
update=":accountForm:accountTable" action="#{accountView.deleteAccount}" disabled="#{!accountView.accountSelected}" styleClass="btn-danger btn-block">
|
||||
<p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-exclamation-triangle" />
|
||||
</p:commandButton>
|
||||
</div>
|
||||
</f:facet>
|
||||
</p:dataTable>
|
||||
|
||||
<composite:confirmationDialog />
|
||||
</h:form>
|
||||
|
||||
|
||||
<p:dialog id="editDialog" widgetVar="editDialogVar" header="Edit account" width="600"
|
||||
modal="true" appendTo="@(body)" showEffect="fade" hideEffect="fade" styleClass="box-solid box-primary" >
|
||||
<h:form id="editDialogForm">
|
||||
<p:messages id="editDialogMessages" showDetail="true" showIcon="true" showSummary="true">
|
||||
<p:autoUpdate />
|
||||
</p:messages>
|
||||
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="username" value="Username" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<c:if test="#{accountView.currentAccount.createdBy != null}">
|
||||
<h:outputText id="username" value="#{accountView.currentAccount.username}" />
|
||||
</c:if>
|
||||
<c:if test="#{accountView.currentAccount.createdBy == null}">
|
||||
<p:inputText id="username" value="#{accountView.currentAccount.username}" />
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="username"><p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastname" value="Lastname" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="lastname" value="#{accountView.currentAccount.lastname}" size="40" maxlength="100"/>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3 ">
|
||||
<p:message for="lastname"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="firstname" value="Firstname" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="firstname" value="#{accountView.currentAccount.firstname}" size="40" maxlength="100" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="firstname"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="emailaddress" value="emailaddress" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="emailaddress" value="#{accountView.currentAccount.emailaddress}" size="40" maxlength="200">
|
||||
<f:validator validatorId="de.muehlencord.shared.jeeutil.validator.EmailValidator" />
|
||||
</p:inputText>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="emailaddress"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<c:if test="#{accountView.currentAccount.username != null}">
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="status" value="Status" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectOneMenu id="status" value="#{accountView.currentAccount.status}" >
|
||||
<f:selectItems value="#{accountView.statusList}" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="status" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastlogin" value="Lastlogin" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<h:outputText id="lastlogin" value="#{accountView.currentAccount.lastLogin}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:message for="lastlogin" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="createdon" value="Created on" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="createdon" value="#{accountView.currentAccount.createdOn}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="createdon" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="createdby" value="Created by" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="createdby" value="#{accountView.currentAccount.createdBy}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="createdby" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastupdatedon" value="Last updated on" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="lastupdatedon" value="#{accountView.currentAccount.lastUpdatedOn}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="lastupdatedon" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastupdatedby" value="Last updated by" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="lastupdatedby" value="#{accountView.currentAccount.lastUpdatedBy}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="lastupdatedby" />
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="roles" value="Roles" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectManyMenu id="roles" var="role" label="#{role.roleName}" value="#{accountView.currentAccountRoles}" converter="omnifaces.SelectItemsConverter" required="false" >
|
||||
<f:selectItems value="#{accountView.allApplicationRoles}" var="roleItem" itemValue="#{roleItem}" />
|
||||
<p:column>
|
||||
<h:outputText value="#{role.application.applicationName}-#{role.roleName}"/>
|
||||
</p:column>
|
||||
</p:selectManyMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="roles" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Save" action="#{accountView.saveEditAccount}" styleClass="btn-primary btn-block"
|
||||
oncomplete="if (args && !args.validationFailed) PF('editDialogVar').hide();" update=":accountForm:accountTable" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Cancel" action="#{accountView.cancelEditAccount}" immediate="true" styleClass="btn-teal btn-block"
|
||||
oncomplete="PF('editDialogVar').hide();" />
|
||||
</div>
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
</ui:define>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui"
|
||||
template="/resources/template/template.xhtml"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||
xmlns:co="http://java.sun.com/jsf/composite/composite"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:o="http://omnifaces.org/ui"
|
||||
xmlns:composite="http://xmlns.jcp.org/jsf/composite/composite">
|
||||
|
||||
<ui:define name="title">
|
||||
Account Overview
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="description">
|
||||
for #{applicationView.currentApplication.applicationName}
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="body">
|
||||
<h:form id="accountForm" prependId="false">
|
||||
<p:dataTable id="accountTable" value="#{accountView.accounts}" var="account" rowKey="#{account.username}" selectionMode="single" selection="#{accountView.currentAccount}"
|
||||
styleClass="box-primary">
|
||||
<p:ajax event="rowSelect" update="buttonPanel" listener="#{accountView.selectAccount}" />
|
||||
<p:ajax event="rowUnselect" update="buttonPanel" listener="#{accountView.unselectAccount}" />
|
||||
<p:column headerText="Username">
|
||||
<h:outputText value="#{account.username}" />
|
||||
</p:column>
|
||||
<p:column headerText="Lastname">
|
||||
<h:outputText value="#{account.lastname}" />
|
||||
</p:column>
|
||||
<p:column headerText="Firstname">
|
||||
<h:outputText value="#{account.firstname}" />
|
||||
</p:column>
|
||||
<p:column headerText="Email">
|
||||
<h:outputText value="#{account.emailaddress}" />
|
||||
</p:column>
|
||||
<p:column headerText="Status">
|
||||
<h:outputText value="#{account.status}" />
|
||||
</p:column>
|
||||
<p:column headerText="Can login" >
|
||||
<p:selectBooleanCheckbox id="canLogin" disabled="true" value="#{!empty account.accountLogin}" />
|
||||
</p:column>
|
||||
<p:column headerText="CreatedOn">
|
||||
<h:outputText value="#{account.createdOn}" >
|
||||
<f:convertDateTime type="both" dateStyle="full" timeStyle="short" timeZone="Europe/Berlin"/>
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
<p:column headerText="CreatedBy">
|
||||
<h:outputText value="#{account.createdBy}" />
|
||||
</p:column>
|
||||
<p:column headerText="LastUpdatedOn">
|
||||
<h:outputText value="#{account.lastUpdatedOn}">
|
||||
<f:convertDateTime type="both" dateStyle="full" timeStyle="short" timeZone="Europe/Berlin"/>
|
||||
</h:outputText>
|
||||
</p:column>
|
||||
<p:column headerText="LastUpdatedBy">
|
||||
<h:outputText value="#{account.lastUpdatedBy}" />
|
||||
</p:column>
|
||||
</p:dataTable>
|
||||
|
||||
<p:spacer height="10px" />
|
||||
<p:panel id="buttonPanel" styleClass="box-primary" style="margin-bottom:20px">
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-4" style="margin-top:10px">
|
||||
<div class="ui-inputgroup" >
|
||||
<h:outputLabel for="includeDisabledCheckbox" value="Include disabled accounts?" />
|
||||
<p:inputSwitch id="includeDisabledCheckbox" value="#{accountView.showDisabledAccounts}" styleClass="btn-teal btn-block" >
|
||||
<p:ajax listener="#{accountView.showDisabledAccountsChange}" update="accountTable" />
|
||||
</p:inputSwitch>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="New" id="newButton" icon="fa fa-plus"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{accountView.newAccount}" styleClass="btn-primary btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="Edit" id="editButton" icon="fa fa-pencil"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{accountView.editAccount}" disabled="#{!accountView.accountSelected}" styleClass="btn-teal btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="Delete" id="deleteButton" icon="fa fa-trash-o"
|
||||
update=":accountForm:accountTable" action="#{accountView.deleteAccount}" disabled="#{accountView.accountSelected eq false or accountView.currentLoggedInUser eq true}" styleClass="btn-danger btn-block">
|
||||
<p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-exclamation-triangle" />
|
||||
</p:commandButton>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<c:if test="#{empty accountView.currentAccount.accountLogin}">
|
||||
<p:commandButton value="Add login" id="addLoginButton" icon="fa fa-plus" disabled="#{!accountView.accountSelected}"
|
||||
update="editLoginDialog" oncomplete="PF('editLoginDialogVar').show();"
|
||||
action="#{accountView.addAccountLogin}" styleClass="btn-teal btn-block">
|
||||
</p:commandButton>
|
||||
</c:if>
|
||||
<c:if test="#{!empty accountView.currentAccount.accountLogin}">
|
||||
<p:splitButton value="Edit login" id="editLoginButton" icon="fa fa-pencil" disabled="#{!accountView.accountSelected}"
|
||||
update="editLoginDialog" oncomplete="PF('editLoginDialogVar').show();"
|
||||
action="#{accountView.editAccountLogin}" styleClass="btn-success btn-block">
|
||||
|
||||
<p:menuitem value="Delete login" icon="fa fa-trash-o" disabled="#{accountView.currentLoggedInUser}"
|
||||
update="accountTable,buttonPanel" styleClass="btn-danger btn-block"
|
||||
action="#{accountView.deleteAccountLogin}" >
|
||||
|
||||
<p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-exclamation-triangle" />
|
||||
</p:menuitem>
|
||||
</p:splitButton>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</p:panel>
|
||||
|
||||
|
||||
|
||||
<composite:confirmationDialog />
|
||||
</h:form>
|
||||
|
||||
|
||||
<p:dialog id="editDialog" widgetVar="editDialogVar" header="Edit account" width="600"
|
||||
modal="true" appendTo="@(body)" showEffect="fade" hideEffect="fade" styleClass="box-solid box-primary" >
|
||||
<h:form id="editDialogForm">
|
||||
<p:messages id="editDialogMessages" showDetail="true" showIcon="true" showSummary="true">
|
||||
<p:autoUpdate />
|
||||
</p:messages>
|
||||
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="username" value="Username" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<c:if test="#{accountView.currentAccount.createdBy != null}">
|
||||
<h:outputText id="username" value="#{accountView.currentAccount.username}" />
|
||||
</c:if>
|
||||
<c:if test="#{accountView.currentAccount.createdBy == null}">
|
||||
<p:inputText id="username" value="#{accountView.currentAccount.username}" />
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="username"><p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastname" value="Lastname" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="lastname" value="#{accountView.currentAccount.lastname}" size="40" maxlength="100"/>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3 ">
|
||||
<p:message for="lastname"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="firstname" value="Firstname" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="firstname" value="#{accountView.currentAccount.firstname}" size="40" maxlength="100" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="firstname"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="emailaddress" value="emailaddress" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="emailaddress" value="#{accountView.currentAccount.emailaddress}" size="40" maxlength="200">
|
||||
<f:validator validatorId="de.muehlencord.shared.jeeutil.validator.EmailValidator" />
|
||||
</p:inputText>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="emailaddress"> <p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<c:if test="#{accountView.currentAccount.username != null}">
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="status" value="Status" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectOneMenu id="status" value="#{accountView.currentAccount.status}" >
|
||||
<f:selectItems value="#{accountView.statusList}" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="status" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="createdon" value="Created on" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="createdon" value="#{accountView.currentAccount.createdOn}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="createdon" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="createdby" value="Created by" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="createdby" value="#{accountView.currentAccount.createdBy}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="createdby" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastupdatedon" value="Last updated on" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="lastupdatedon" value="#{accountView.currentAccount.lastUpdatedOn}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="lastupdatedon" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="lastupdatedby" value="Last updated by" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<h:outputText id="lastupdatedby" value="#{accountView.currentAccount.lastUpdatedBy}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="lastupdatedby" />
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="roles" value="Roles" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectManyMenu id="roles" var="role" label="#{role.roleName}" value="#{accountView.currentAccountRoles}" converter="omnifaces.SelectItemsConverter" required="false" >
|
||||
<f:selectItems value="#{accountView.allApplicationRoles}" var="roleItem" itemValue="#{roleItem}" />
|
||||
<p:column>
|
||||
<h:outputText value="#{role.application.applicationName}-#{role.roleName}"/>
|
||||
</p:column>
|
||||
</p:selectManyMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="roles" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Save" action="#{accountView.saveEditAccount}" styleClass="btn-primary btn-block"
|
||||
oncomplete="if (args && !args.validationFailed) PF('editDialogVar').hide();" update=":accountForm:accountTable" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Cancel" action="#{accountView.cancelEditAccount}" immediate="true" styleClass="btn-teal btn-block"
|
||||
oncomplete="PF('editDialogVar').hide();" />
|
||||
</div>
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
<p:dialog id="editLoginDialog" widgetVar="editLoginDialogVar" header="Edit account login" width="600"
|
||||
modal="true" appendTo="@(body)" showEffect="fade" hideEffect="fade" styleClass="box-solid box-primary" >
|
||||
<h:form id="editLoginDialogForm">
|
||||
<p:messages id="editLoginDialogMessages" showDetail="true" showIcon="true" showSummary="true">
|
||||
<p:autoUpdate />
|
||||
</p:messages>
|
||||
|
||||
<div class="ui-g ui-fluid">
|
||||
<o:validateMultiple id="myId" components="password repeatPassword"
|
||||
validator="#{accountView.validatePasswords}" message="#{msgs.passwords_different}" />
|
||||
|
||||
<div class="col-sm-12">
|
||||
<p:outputLabel value="Enter a new password or keep values empty to keep existing / autogenrated value" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="password" value="Password" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:password id="password" value="#{accountView.password}" maxlength="32" size="32" required="false"/>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="password" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="repeatPassword" value="repeat Password" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:password id="repeatPassword" value="#{accountView.repeatPassword}" maxlength="32" size="32" required="false"/>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="repeatPassword" />
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Save" action="#{accountView.saveEditAccountLogin}" styleClass="btn-primary btn-block"
|
||||
oncomplete="if (args && !args.validationFailed) PF('editLoginDialogVar').hide();" update=":accountForm:accountTable,:accountForm:buttonPanel" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Cancel" action="#{accountView.cancelEditAccountLogin}" immediate="true" styleClass="btn-teal btn-block"
|
||||
oncomplete="PF('editLoginDialogVar').hide();" />
|
||||
</div>
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
@ -1,84 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui"
|
||||
template="/resources/template/template.xhtml"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||
xmlns:co="http://java.sun.com/jsf/composite/composite"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:composite="http://xmlns.jcp.org/jsf/composite/composite">
|
||||
|
||||
<ui:define name="title">
|
||||
Applications
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="body" >
|
||||
|
||||
<h:form id="applicationForm">
|
||||
<p:panel styleClass="box-solid">
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectOneMenu id="applicationSelect" value="#{applicationView.currentApplication}" converter="omnifaces.SelectItemsConverter" required="true">
|
||||
<f:selectItems value="#{applicationView.allApplications}" var="app" itemLabel="#{app.applicationName}" itemValue="#{app}" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="Select" styleClass="btn-primary btn-solid}" actionListener="#{applicationView.selectApplication}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="New" id="newButton" icon="fa fa-plus"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{applicationView.newApplication}" styleClass="btn-teal btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton id="deletePermissionButton" icon="fa fa-trash-o" value="#{msgs.button_delete}" actionListener="#{applicationView.deleteApplication}"
|
||||
update="applicationSelect" styleClass="btn-danger btn-block" >
|
||||
<p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-exclamation-triangle" />
|
||||
</p:commandButton>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</p:panel>
|
||||
|
||||
<composite:confirmationDialog />
|
||||
</h:form>
|
||||
|
||||
<p:dialog id="editDialog" widgetVar="editDialogVar" header="Edit account" width="600"
|
||||
modal="true" appendTo="@(body)" showEffect="fade" hideEffect="fade" styleClass="box-solid box-primary" >
|
||||
<h:form id="editDialogForm">
|
||||
<p:messages id="editDialogMessages" showDetail="true" showIcon="true" showSummary="true">
|
||||
<p:autoUpdate />
|
||||
</p:messages>
|
||||
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="applicationName" value="Application name" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="applicationName" value="#{applicationView.editApplication.applicationName}">
|
||||
<f:validator validatorId="uniqueApplicationValidator"/>
|
||||
</p:inputText>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="applicationName"><p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Save" action="#{applicationView.saveEditApplication}" styleClass="btn-primary btn-block"
|
||||
oncomplete="if (args && !args.validationFailed) PF('editDialogVar').hide();" update=":applicationForm" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Cancel" action="#{applicationView.cancelEditApplication}" immediate="true" styleClass="btn-teal btn-block"
|
||||
oncomplete="PF('editDialogVar').hide();" />
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
</ui:define>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:ui="http://java.sun.com/jsf/facelets"
|
||||
xmlns:p="http://primefaces.org/ui"
|
||||
template="/resources/template/template.xhtml"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||
xmlns:co="http://java.sun.com/jsf/composite/composite"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:composite="http://xmlns.jcp.org/jsf/composite/composite">
|
||||
|
||||
<ui:define name="title">
|
||||
Applications
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="body" >
|
||||
|
||||
<h:form id="applicationForm" prependId="false">
|
||||
<p:panel styleClass="box-solid">
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:selectOneMenu id="applicationSelect" value="#{applicationView.currentApplication}" converter="omnifaces.SelectItemsConverter" required="true">
|
||||
<f:selectItems value="#{applicationView.allApplications}" var="app" itemLabel="#{app.applicationName}" itemValue="#{app}" />
|
||||
</p:selectOneMenu>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="Select" styleClass="btn-primary btn-solid}" actionListener="#{applicationView.selectApplication}" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton value="New" id="newButton" icon="fa fa-plus"
|
||||
update="editDialog" oncomplete="PF('editDialogVar').show();"
|
||||
actionListener="#{applicationView.newApplication}" styleClass="btn-teal btn-block" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-2">
|
||||
<p:commandButton id="deletePermissionButton" icon="fa fa-trash-o" value="#{msgs.button_delete}" actionListener="#{applicationView.deleteApplication}"
|
||||
update="applicationSelect" styleClass="btn-danger btn-block" >
|
||||
<p:confirm header="Confirmation" message="Are you sure?" icon="fa fa-exclamation-triangle" />
|
||||
</p:commandButton>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</p:panel>
|
||||
|
||||
<composite:confirmationDialog />
|
||||
</h:form>
|
||||
|
||||
<p:dialog id="editDialog" widgetVar="editDialogVar" header="Edit account" width="600"
|
||||
modal="true" appendTo="@(body)" showEffect="fade" hideEffect="fade" styleClass="box-solid box-primary" >
|
||||
<h:form id="editDialogForm">
|
||||
<p:messages id="editDialogMessages" showDetail="true" showIcon="true" showSummary="true">
|
||||
<p:autoUpdate />
|
||||
</p:messages>
|
||||
|
||||
<div class="ui-g ui-fluid">
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:outputLabel for="applicationName" value="Application name" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-6">
|
||||
<p:inputText id="applicationName" value="#{applicationView.editApplication.applicationName}">
|
||||
<f:validator validatorId="uniqueApplicationValidator"/>
|
||||
</p:inputText>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:message for="applicationName"><p:autoUpdate /></p:message>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Save" action="#{applicationView.saveEditApplication}" styleClass="btn-primary btn-block"
|
||||
oncomplete="if (args && !args.validationFailed) PF('editDialogVar').hide();" update=":applicationForm" />
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3">
|
||||
<p:spacer height="10px" />
|
||||
<p:commandButton value="Cancel" action="#{applicationView.cancelEditApplication}" immediate="true" styleClass="btn-teal btn-block"
|
||||
oncomplete="PF('editDialogVar').hide();" />
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</h:form>
|
||||
</p:dialog>
|
||||
|
||||
</ui:define>
|
||||
</ui:composition>
|
||||
Reference in New Issue
Block a user