diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountPermissions.java b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountPermissions.java index 3dc64bf..ddc0000 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountPermissions.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountPermissions.java @@ -1,41 +1,51 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.account.boundary; - -import de.muehlencord.shared.account.util.Permission; - -/** - * - * @author Joern Muehlencord - */ -public enum AccountPermissions implements Permission { - - ACCOUNT_ADD("account:add", "Allow to create a new account"), - ACCOUNT_EDIT ("account:edit", "Allow to edit an existing account"), - ACCOUNT_DELETE("account:delete", "Allow to delete an existing account"), - ACCOUNT_LOGIN_ADD ("account:login:add", "Allow to create a login for a user"), - ACCOUNT_LOGIN_EDIT ("account:login:edit", "Allow to change a login for a user"), - ACCOUNT_LOGIN_DELETE ("account:login:delete", "Allow to delete a login for a user"); - - private final String name; - private final String description; - - private AccountPermissions(String permissionName, String permissionDesc) { - this.name = permissionName; - this.description = permissionDesc; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getDescription() { - return description; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.boundary; + +import de.muehlencord.shared.account.util.Permission; + +/** + * + * @author Joern Muehlencord + */ +public enum AccountPermissions implements Permission { + + ACCOUNT_ADD("account:add", "Allow to create a new account"), + ACCOUNT_EDIT ("account:edit", "Allow to edit an existing account"), + ACCOUNT_DELETE("account:delete", "Allow to delete an existing account"), + ACCOUNT_LOGIN_ADD ("account:login:add", "Allow to create a login for a user"), + ACCOUNT_LOGIN_EDIT ("account:login:edit", "Allow to change a login for a user"), + ACCOUNT_LOGIN_DELETE ("account:login:delete", "Allow to delete a login for a user"); + + private final String name; + private final String description; + + private AccountPermissions(String permissionName, String permissionDesc) { + this.name = permissionName; + this.description = permissionDesc; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getDescription() { + return description; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountProducer.java b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountProducer.java index 95d6502..a3a3bf8 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountProducer.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/AccountProducer.java @@ -1,5 +1,5 @@ -/* - * Copyright 2017 Joern Muehlencord . +/* + * Copyright 2018 joern.muehlencord. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyException.java b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyException.java index 51cbafc..f1743d0 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyException.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyException.java @@ -1,9 +1,18 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.boundary; /** diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyService.java b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyService.java index c800569..367e2f8 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/boundary/ApiKeyService.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.boundary; import de.muehlencord.shared.account.business.account.control.AccountControl; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java index 7ae4d08..0ce8654 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.control; import de.muehlencord.shared.account.business.account.entity.AccountEntity; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/Account.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/Account.java index 5979fab..cda151e 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/Account.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/Account.java @@ -1,18 +1,28 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.account.entity; - -/** - * - * @author Joern Muehlencord - */ -public interface Account { - - String getUsername(); - String getFirstname(); - String getLastname(); - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +/** + * + * @author Joern Muehlencord + */ +public interface Account { + + String getUsername(); + String getFirstname(); + String getLastname(); + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountEntity.java index 0535324..78d55e3 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountEntity.java @@ -1,265 +1,280 @@ -package de.muehlencord.shared.account.business.account.entity; - -import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity; -import de.muehlencord.shared.account.business.config.entity.ConfigEntity; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author joern.muehlencord - */ -@Entity -@Table(name = "account") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "AccountEntity.findAll", query = "SELECT a FROM AccountEntity a ORDER by a.lastname, a.firstname"), - @NamedQuery(name = "AccountEntity.findByUsername", query = "SELECT a FROM AccountEntity a WHERE a.username = :username"), - @NamedQuery(name = "AccountEntity.findByStatus", query = "SELECT a FROM AccountEntity a WHERE a.status = :status"), - @NamedQuery(name = "AccountEntity.findByCreatedOn", query = "SELECT a FROM AccountEntity a WHERE a.createdOn = :createdOn"), - @NamedQuery(name = "AccountEntity.findByCreatedBy", query = "SELECT a FROM AccountEntity a WHERE a.createdBy = :createdBy"), - @NamedQuery(name = "AccountEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), - @NamedQuery(name = "AccountEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) -public class AccountEntity implements Serializable, Account { - - private static final long serialVersionUID = 6216991757526150935L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "username") - private String username; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "emailaddress") - private String emailaddress; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 100) - @Column(name = "firstname") - private String firstname; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 100) - @Column(name = "lastname") - private String lastname; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 10) - @Column(name = "status") - private String status; - @Basic(optional = false) - @NotNull - @Column(name = "created_on") - @Temporal(TemporalType.TIMESTAMP) - private Date createdOn; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "created_by") - private String createdBy; - @Basic(optional = false) - @NotNull - @Column(name = "last_updated_on") - @Temporal(TemporalType.TIMESTAMP) - private Date lastUpdatedOn; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "last_updated_by") - private String lastUpdatedBy; - @JoinTable(name = "account_role", joinColumns = { - @JoinColumn(name = "account", referencedColumnName = "id")}, inverseJoinColumns = { - @JoinColumn(name = "account_role", referencedColumnName = "id")}) - @ManyToMany(fetch = FetchType.LAZY) - private List applicationRoleList; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "accountId", fetch = FetchType.LAZY) - private List accountHistoryList; - @OneToOne(cascade = CascadeType.ALL, mappedBy = "account") - private AccountLoginEntity accountLogin; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "account") - private List configItems; - - public AccountEntity() { - // empty constructor required for JPA - } - - public void addApplicationRole(ApplicationRoleEntity applicationRole) { - if (applicationRoleList == null) { - applicationRoleList = new ArrayList<>(); - } - applicationRoleList.add(applicationRole); - } - - /* **** getter / setter **** */ - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getEmailaddress() { - return emailaddress; - } - - public void setEmailaddress(String emailaddress) { - this.emailaddress = emailaddress; - } - - public String getFirstname() { - return firstname; - } - - public void setFirstname(String firstname) { - this.firstname = firstname; - } - - public String getLastname() { - return lastname; - } - - public void setLastname(String lastname) { - this.lastname = lastname; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Date getLastUpdatedOn() { - return lastUpdatedOn; - } - - public void setLastUpdatedOn(Date lastUpdatedOn) { - this.lastUpdatedOn = lastUpdatedOn; - } - - public String getLastUpdatedBy() { - return lastUpdatedBy; - } - - public void setLastUpdatedBy(String lastUpdatedBy) { - this.lastUpdatedBy = lastUpdatedBy; - } - - public List getApplicationRoleList() { - return applicationRoleList; - } - - public void setApplicationRoleList(List applicationRoleList) { - this.applicationRoleList = applicationRoleList; - } - - public List getAccountHistoryList() { - return accountHistoryList; - } - - public void setAccountHistoryList(List accountHistoryList) { - this.accountHistoryList = accountHistoryList; - } - - public AccountLoginEntity getAccountLogin() { - return accountLogin; - } - - public void setAccountLogin(AccountLoginEntity accountLogin) { - this.accountLogin = accountLogin; - } - - public List getConfigItems() { - return configItems; - } - - public void setConfigItems(List configItems) { - this.configItems = configItems; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof AccountEntity)) { - return false; - } - AccountEntity other = (AccountEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.entity.Account[ id=" + id + " ]"; - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity; +import de.muehlencord.shared.account.business.config.entity.ConfigEntity; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author joern.muehlencord + */ +@Entity +@Table(name = "account") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "AccountEntity.findAll", query = "SELECT a FROM AccountEntity a ORDER by a.lastname, a.firstname"), + @NamedQuery(name = "AccountEntity.findByUsername", query = "SELECT a FROM AccountEntity a WHERE a.username = :username"), + @NamedQuery(name = "AccountEntity.findByStatus", query = "SELECT a FROM AccountEntity a WHERE a.status = :status"), + @NamedQuery(name = "AccountEntity.findByCreatedOn", query = "SELECT a FROM AccountEntity a WHERE a.createdOn = :createdOn"), + @NamedQuery(name = "AccountEntity.findByCreatedBy", query = "SELECT a FROM AccountEntity a WHERE a.createdBy = :createdBy"), + @NamedQuery(name = "AccountEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), + @NamedQuery(name = "AccountEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) +public class AccountEntity implements Serializable, Account { + + private static final long serialVersionUID = 6216991757526150935L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "username") + private String username; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "emailaddress") + private String emailaddress; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 100) + @Column(name = "firstname") + private String firstname; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 100) + @Column(name = "lastname") + private String lastname; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 10) + @Column(name = "status") + private String status; + @Basic(optional = false) + @NotNull + @Column(name = "created_on") + @Temporal(TemporalType.TIMESTAMP) + private Date createdOn; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "created_by") + private String createdBy; + @Basic(optional = false) + @NotNull + @Column(name = "last_updated_on") + @Temporal(TemporalType.TIMESTAMP) + private Date lastUpdatedOn; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "last_updated_by") + private String lastUpdatedBy; + @JoinTable(name = "account_role", joinColumns = { + @JoinColumn(name = "account", referencedColumnName = "id")}, inverseJoinColumns = { + @JoinColumn(name = "account_role", referencedColumnName = "id")}) + @ManyToMany(fetch = FetchType.LAZY) + private List applicationRoleList; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "accountId", fetch = FetchType.LAZY) + private List accountHistoryList; + @OneToOne(cascade = CascadeType.ALL, mappedBy = "account") + private AccountLoginEntity accountLogin; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "account") + private List configItems; + + public AccountEntity() { + // empty constructor required for JPA + } + + public void addApplicationRole(ApplicationRoleEntity applicationRole) { + if (applicationRoleList == null) { + applicationRoleList = new ArrayList<>(); + } + applicationRoleList.add(applicationRole); + } + + /* **** getter / setter **** */ + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmailaddress() { + return emailaddress; + } + + public void setEmailaddress(String emailaddress) { + this.emailaddress = emailaddress; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Date getLastUpdatedOn() { + return lastUpdatedOn; + } + + public void setLastUpdatedOn(Date lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + } + + public String getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdatedBy(String lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + public List getApplicationRoleList() { + return applicationRoleList; + } + + public void setApplicationRoleList(List applicationRoleList) { + this.applicationRoleList = applicationRoleList; + } + + public List getAccountHistoryList() { + return accountHistoryList; + } + + public void setAccountHistoryList(List accountHistoryList) { + this.accountHistoryList = accountHistoryList; + } + + public AccountLoginEntity getAccountLogin() { + return accountLogin; + } + + public void setAccountLogin(AccountLoginEntity accountLogin) { + this.accountLogin = accountLogin; + } + + public List getConfigItems() { + return configItems; + } + + public void setConfigItems(List configItems) { + this.configItems = configItems; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof AccountEntity)) { + return false; + } + AccountEntity other = (AccountEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.entity.Account[ id=" + id + " ]"; + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountException.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountException.java index 3e06a85..e8a13bb 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountException.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountException.java @@ -1,29 +1,44 @@ -package de.muehlencord.shared.account.business.account.entity; - -/** - * - * @author Raimund - */ -public class AccountException extends Exception { - - /** - * Creates a new instance of AccountException without detail - * message. - */ - public AccountException() { - } - - /** - * Constructs an instance of AccountException with the - * specified detail message. - * - * @param msg the detail message. - */ - public AccountException(String msg) { - super(msg); - } - - public AccountException(String entity_updated__deleted_please_reload, boolean b) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +/** + * + * @author Raimund + */ +public class AccountException extends Exception { + + /** + * Creates a new instance of AccountException without detail + * message. + */ + public AccountException() { + } + + /** + * Constructs an instance of AccountException with the + * specified detail message. + * + * @param msg the detail message. + */ + public AccountException(String msg) { + super(msg); + } + + public AccountException(String entity_updated__deleted_please_reload, boolean b) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountHistoryEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountHistoryEntity.java index 7b27499..b7ef0a6 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountHistoryEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountHistoryEntity.java @@ -1,172 +1,187 @@ -package de.muehlencord.shared.account.business.account.entity; - -import java.io.Serializable; -import java.util.Date; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author joern.muehlencord - */ -@Entity -@Table(name = "account_history") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "AccountHistoryEntity.findAll", query = "SELECT a FROM AccountHistoryEntity a"), - @NamedQuery(name = "AccountHistoryEntity.findById", query = "SELECT a FROM AccountHistoryEntity a WHERE a.id = :id"), - @NamedQuery(name = "AccountHistoryEntity.findByMessage", query = "SELECT a FROM AccountHistoryEntity a WHERE a.message = :message"), - @NamedQuery(name = "AccountHistoryEntity.findByFailureCount", query = "SELECT a FROM AccountHistoryEntity a WHERE a.failureCount = :failureCount"), - @NamedQuery(name = "AccountHistoryEntity.findByStatus", query = "SELECT a FROM AccountHistoryEntity a WHERE a.status = :status"), - @NamedQuery(name = "AccountHistoryEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountHistoryEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), - @NamedQuery(name = "AccountHistoryEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountHistoryEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) -public class AccountHistoryEntity implements Serializable { - - private static final long serialVersionUID = 1L; - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Size(max = 200) - @Column(name = "message") - private String message; - @Basic(optional = false) - @NotNull - @Column(name = "failure_count") - private int failureCount; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 20) - @Column(name = "status") - private String status; - @Basic(optional = false) - @NotNull - @Column(name = "last_updated_on") - @Temporal(TemporalType.TIMESTAMP) - private Date lastUpdatedOn; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "last_updated_by") - private String lastUpdatedBy; - @JoinColumn(name = "account_id", referencedColumnName = "id") - @ManyToOne(optional = false) - private AccountEntity accountId; - - public AccountHistoryEntity() { - } - - public AccountHistoryEntity(UUID id) { - this.id = id; - } - - public AccountHistoryEntity(UUID id, int failureCount, String status, Date lastUpdatedOn, String lastUpdatedBy) { - this.id = id; - this.failureCount = failureCount; - this.status = status; - this.lastUpdatedOn = lastUpdatedOn; - this.lastUpdatedBy = lastUpdatedBy; - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public int getFailureCount() { - return failureCount; - } - - public void setFailureCount(int failureCount) { - this.failureCount = failureCount; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public Date getLastUpdatedOn() { - return lastUpdatedOn; - } - - public void setLastUpdatedOn(Date lastUpdatedOn) { - this.lastUpdatedOn = lastUpdatedOn; - } - - public String getLastUpdatedBy() { - return lastUpdatedBy; - } - - public void setLastUpdatedBy(String lastUpdatedBy) { - this.lastUpdatedBy = lastUpdatedBy; - } - - public AccountEntity getAccountId() { - return accountId; - } - - public void setAccountId(AccountEntity accountId) { - this.accountId = accountId; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof AccountHistoryEntity)) { - return false; - } - AccountHistoryEntity other = (AccountHistoryEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.entity.AccountHistory[ id=" + id + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author joern.muehlencord + */ +@Entity +@Table(name = "account_history") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "AccountHistoryEntity.findAll", query = "SELECT a FROM AccountHistoryEntity a"), + @NamedQuery(name = "AccountHistoryEntity.findById", query = "SELECT a FROM AccountHistoryEntity a WHERE a.id = :id"), + @NamedQuery(name = "AccountHistoryEntity.findByMessage", query = "SELECT a FROM AccountHistoryEntity a WHERE a.message = :message"), + @NamedQuery(name = "AccountHistoryEntity.findByFailureCount", query = "SELECT a FROM AccountHistoryEntity a WHERE a.failureCount = :failureCount"), + @NamedQuery(name = "AccountHistoryEntity.findByStatus", query = "SELECT a FROM AccountHistoryEntity a WHERE a.status = :status"), + @NamedQuery(name = "AccountHistoryEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountHistoryEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), + @NamedQuery(name = "AccountHistoryEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountHistoryEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) +public class AccountHistoryEntity implements Serializable { + + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Size(max = 200) + @Column(name = "message") + private String message; + @Basic(optional = false) + @NotNull + @Column(name = "failure_count") + private int failureCount; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 20) + @Column(name = "status") + private String status; + @Basic(optional = false) + @NotNull + @Column(name = "last_updated_on") + @Temporal(TemporalType.TIMESTAMP) + private Date lastUpdatedOn; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "last_updated_by") + private String lastUpdatedBy; + @JoinColumn(name = "account_id", referencedColumnName = "id") + @ManyToOne(optional = false) + private AccountEntity accountId; + + public AccountHistoryEntity() { + } + + public AccountHistoryEntity(UUID id) { + this.id = id; + } + + public AccountHistoryEntity(UUID id, int failureCount, String status, Date lastUpdatedOn, String lastUpdatedBy) { + this.id = id; + this.failureCount = failureCount; + this.status = status; + this.lastUpdatedOn = lastUpdatedOn; + this.lastUpdatedBy = lastUpdatedBy; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getFailureCount() { + return failureCount; + } + + public void setFailureCount(int failureCount) { + this.failureCount = failureCount; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getLastUpdatedOn() { + return lastUpdatedOn; + } + + public void setLastUpdatedOn(Date lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + } + + public String getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdatedBy(String lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + public AccountEntity getAccountId() { + return accountId; + } + + public void setAccountId(AccountEntity accountId) { + this.accountId = accountId; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof AccountHistoryEntity)) { + return false; + } + AccountHistoryEntity other = (AccountHistoryEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.entity.AccountHistory[ id=" + id + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountLoginEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountLoginEntity.java index 35817d0..1b471b5 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountLoginEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountLoginEntity.java @@ -1,243 +1,253 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.account.entity; - -import java.io.Serializable; -import java.util.Date; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToOne; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author jomu - */ -@Entity -@Table(name = "account_login") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "AccountLoginEntity.findAll", query = "SELECT a FROM AccountLoginEntity a"), - @NamedQuery(name = "AccountLoginEntity.findByAccountPassword", query = "SELECT a FROM AccountLoginEntity a WHERE a.accountPassword = :accountPassword"), - @NamedQuery(name = "AccountLoginEntity.findByLastLogin", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastLogin = :lastLogin"), - @NamedQuery(name = "AccountLoginEntity.findByLastFailedLogin", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastFailedLogin = :lastFailedLogin"), - @NamedQuery(name = "AccountLoginEntity.findByFailureCount", query = "SELECT a FROM AccountLoginEntity a WHERE a.failureCount = :failureCount"), - @NamedQuery(name = "AccountLoginEntity.findByPasswordResetOngoing", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetOngoing = :passwordResetOngoing"), - @NamedQuery(name = "AccountLoginEntity.findByPasswordResetValidTo", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetValidTo = :passwordResetValidTo"), - @NamedQuery(name = "AccountLoginEntity.findByPasswordResetHash", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetHash = :passwordResetHash"), - @NamedQuery(name = "AccountLoginEntity.findByCreatedOn", query = "SELECT a FROM AccountLoginEntity a WHERE a.createdOn = :createdOn"), - @NamedQuery(name = "AccountLoginEntity.findByCreatedBy", query = "SELECT a FROM AccountLoginEntity a WHERE a.createdBy = :createdBy"), - @NamedQuery(name = "AccountLoginEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), - @NamedQuery(name = "AccountLoginEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) -public class AccountLoginEntity implements Serializable { - - private static final long serialVersionUID = -799045989045040077L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "account_password") - private String accountPassword; - @Column(name = "last_login") - @Temporal(TemporalType.TIMESTAMP) - private Date lastLogin; - @Column(name = "last_failed_login") - @Temporal(TemporalType.TIMESTAMP) - private Date lastFailedLogin; - @Basic(optional = false) - @NotNull - @Column(name = "failure_count") - private int failureCount; - @Basic(optional = false) - @NotNull - @Column(name = "password_reset_ongoing") - private boolean passwordResetOngoing; - @Column(name = "password_reset_valid_to") - @Temporal(TemporalType.TIMESTAMP) - private Date passwordResetValidTo; - @Size(max = 200) - @Column(name = "password_reset_hash") - private String passwordResetHash; - @Basic(optional = false) - @NotNull - @Column(name = "created_on") - @Temporal(TemporalType.TIMESTAMP) - private Date createdOn; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "created_by") - private String createdBy; - @Basic(optional = false) - @NotNull - @Column(name = "last_updated_on") - @Temporal(TemporalType.TIMESTAMP) - private Date lastUpdatedOn; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 32) - @Column(name = "last_updated_by") - private String lastUpdatedBy; - @JoinColumn(name = "account", referencedColumnName = "id") - @OneToOne(optional = false) - private AccountEntity account; - - public AccountLoginEntity() { - } - - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getAccountPassword() { - return accountPassword; - } - - public void setAccountPassword(String accountPassword) { - this.accountPassword = accountPassword; - } - - public Date getLastLogin() { - return lastLogin; - } - - public void setLastLogin(Date lastLogin) { - this.lastLogin = lastLogin; - } - - public Date getLastFailedLogin() { - return lastFailedLogin; - } - - public void setLastFailedLogin(Date lastFailedLogin) { - this.lastFailedLogin = lastFailedLogin; - } - - public int getFailureCount() { - return failureCount; - } - - public void setFailureCount(int failureCount) { - this.failureCount = failureCount; - } - - public boolean getPasswordResetOngoing() { - return passwordResetOngoing; - } - - public void setPasswordResetOngoing(boolean passwordResetOngoing) { - this.passwordResetOngoing = passwordResetOngoing; - } - - public Date getPasswordResetValidTo() { - return passwordResetValidTo; - } - - public void setPasswordResetValidTo(Date passwordResetValidTo) { - this.passwordResetValidTo = passwordResetValidTo; - } - - public String getPasswordResetHash() { - return passwordResetHash; - } - - public void setPasswordResetHash(String passwordResetHash) { - this.passwordResetHash = passwordResetHash; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Date getLastUpdatedOn() { - return lastUpdatedOn; - } - - public void setLastUpdatedOn(Date lastUpdatedOn) { - this.lastUpdatedOn = lastUpdatedOn; - } - - public String getLastUpdatedBy() { - return lastUpdatedBy; - } - - public void setLastUpdatedBy(String lastUpdatedBy) { - this.lastUpdatedBy = lastUpdatedBy; - } - - public AccountEntity getAccount() { - return account; - } - - public void setAccount(AccountEntity account) { - this.account = account; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof AccountLoginEntity)) { - return false; - } - AccountLoginEntity other = (AccountLoginEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.business.account.entity.AccountLoginEntity[ id=" + id + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author jomu + */ +@Entity +@Table(name = "account_login") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "AccountLoginEntity.findAll", query = "SELECT a FROM AccountLoginEntity a"), + @NamedQuery(name = "AccountLoginEntity.findByAccountPassword", query = "SELECT a FROM AccountLoginEntity a WHERE a.accountPassword = :accountPassword"), + @NamedQuery(name = "AccountLoginEntity.findByLastLogin", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastLogin = :lastLogin"), + @NamedQuery(name = "AccountLoginEntity.findByLastFailedLogin", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastFailedLogin = :lastFailedLogin"), + @NamedQuery(name = "AccountLoginEntity.findByFailureCount", query = "SELECT a FROM AccountLoginEntity a WHERE a.failureCount = :failureCount"), + @NamedQuery(name = "AccountLoginEntity.findByPasswordResetOngoing", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetOngoing = :passwordResetOngoing"), + @NamedQuery(name = "AccountLoginEntity.findByPasswordResetValidTo", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetValidTo = :passwordResetValidTo"), + @NamedQuery(name = "AccountLoginEntity.findByPasswordResetHash", query = "SELECT a FROM AccountLoginEntity a WHERE a.passwordResetHash = :passwordResetHash"), + @NamedQuery(name = "AccountLoginEntity.findByCreatedOn", query = "SELECT a FROM AccountLoginEntity a WHERE a.createdOn = :createdOn"), + @NamedQuery(name = "AccountLoginEntity.findByCreatedBy", query = "SELECT a FROM AccountLoginEntity a WHERE a.createdBy = :createdBy"), + @NamedQuery(name = "AccountLoginEntity.findByLastUpdatedOn", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastUpdatedOn = :lastUpdatedOn"), + @NamedQuery(name = "AccountLoginEntity.findByLastUpdatedBy", query = "SELECT a FROM AccountLoginEntity a WHERE a.lastUpdatedBy = :lastUpdatedBy")}) +public class AccountLoginEntity implements Serializable { + + private static final long serialVersionUID = -799045989045040077L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "account_password") + private String accountPassword; + @Column(name = "last_login") + @Temporal(TemporalType.TIMESTAMP) + private Date lastLogin; + @Column(name = "last_failed_login") + @Temporal(TemporalType.TIMESTAMP) + private Date lastFailedLogin; + @Basic(optional = false) + @NotNull + @Column(name = "failure_count") + private int failureCount; + @Basic(optional = false) + @NotNull + @Column(name = "password_reset_ongoing") + private boolean passwordResetOngoing; + @Column(name = "password_reset_valid_to") + @Temporal(TemporalType.TIMESTAMP) + private Date passwordResetValidTo; + @Size(max = 200) + @Column(name = "password_reset_hash") + private String passwordResetHash; + @Basic(optional = false) + @NotNull + @Column(name = "created_on") + @Temporal(TemporalType.TIMESTAMP) + private Date createdOn; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "created_by") + private String createdBy; + @Basic(optional = false) + @NotNull + @Column(name = "last_updated_on") + @Temporal(TemporalType.TIMESTAMP) + private Date lastUpdatedOn; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 32) + @Column(name = "last_updated_by") + private String lastUpdatedBy; + @JoinColumn(name = "account", referencedColumnName = "id") + @OneToOne(optional = false) + private AccountEntity account; + + public AccountLoginEntity() { + } + + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getAccountPassword() { + return accountPassword; + } + + public void setAccountPassword(String accountPassword) { + this.accountPassword = accountPassword; + } + + public Date getLastLogin() { + return lastLogin; + } + + public void setLastLogin(Date lastLogin) { + this.lastLogin = lastLogin; + } + + public Date getLastFailedLogin() { + return lastFailedLogin; + } + + public void setLastFailedLogin(Date lastFailedLogin) { + this.lastFailedLogin = lastFailedLogin; + } + + public int getFailureCount() { + return failureCount; + } + + public void setFailureCount(int failureCount) { + this.failureCount = failureCount; + } + + public boolean getPasswordResetOngoing() { + return passwordResetOngoing; + } + + public void setPasswordResetOngoing(boolean passwordResetOngoing) { + this.passwordResetOngoing = passwordResetOngoing; + } + + public Date getPasswordResetValidTo() { + return passwordResetValidTo; + } + + public void setPasswordResetValidTo(Date passwordResetValidTo) { + this.passwordResetValidTo = passwordResetValidTo; + } + + public String getPasswordResetHash() { + return passwordResetHash; + } + + public void setPasswordResetHash(String passwordResetHash) { + this.passwordResetHash = passwordResetHash; + } + + public Date getCreatedOn() { + return createdOn; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public Date getLastUpdatedOn() { + return lastUpdatedOn; + } + + public void setLastUpdatedOn(Date lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + } + + public String getLastUpdatedBy() { + return lastUpdatedBy; + } + + public void setLastUpdatedBy(String lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + } + + public AccountEntity getAccount() { + return account; + } + + public void setAccount(AccountEntity account) { + this.account = account; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof AccountLoginEntity)) { + return false; + } + AccountLoginEntity other = (AccountLoginEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.business.account.entity.AccountLoginEntity[ id=" + id + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountStatus.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountStatus.java index c1b0f8b..a189ccf 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountStatus.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/AccountStatus.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; import java.util.ArrayList; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyEntity.java index 22b89a6..c00dc23 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyEntity.java @@ -1,134 +1,149 @@ -package de.muehlencord.shared.account.business.account.entity; - -import java.io.Serializable; -import java.util.Date; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author Joern Muehlencord - */ -@Entity -@Table(name = "api_key") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "ApiKeyEntity.findAll", query = "SELECT a FROM ApiKeyEntity a"), - @NamedQuery(name = "ApiKeyEntity.findByApiKey", query = "SELECT a FROM ApiKeyEntity a WHERE a.apiKey = :apiKey"), - @NamedQuery(name = "ApiKeyEntity.findByIssuedOn", query = "SELECT a FROM ApiKeyEntity a WHERE a.issuedOn = :issuedOn"), - @NamedQuery(name = "ApiKeyEntity.findByAccount", query = "SELECT a FROM ApiKeyEntity a WHERE a.account = :account"), - @NamedQuery(name = "ApiKeyEntity.findByExpiration", query = "SELECT a FROM ApiKeyEntity a WHERE a.expiration = :expiration")}) -public class ApiKeyEntity implements Serializable { - - private static final long serialVersionUID = -1044658457228215810L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "api_key") - private String apiKey; - @Basic(optional = false) - @NotNull - @Column(name = "issued_on") - @Temporal(TemporalType.TIMESTAMP) - private Date issuedOn; - @Column(name = "expiration") - private Short expiration; - @JoinColumn(name = "account", referencedColumnName = "id") - @ManyToOne(optional = false) - private AccountEntity account; - - public ApiKeyEntity() { - // empty constructor required for JPA - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getApiKey() { - return apiKey; - } - - public void setApiKey(String apiKey) { - this.apiKey = apiKey; - } - - public Date getIssuedOn() { - return issuedOn; - } - - public void setIssuedOn(Date issuedOn) { - this.issuedOn = issuedOn; - } - - public Short getExpiration() { - return expiration; - } - - public void setExpiration(Short expiration) { - this.expiration = expiration; - } - - public AccountEntity getAccount() { - return account; - } - - public void setAccount(AccountEntity account) { - this.account = account; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof ApiKeyEntity)) { - return false; - } - ApiKeyEntity other = (ApiKeyEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "com.wincornixdorf.pcd.business.account.ApiKeyEntity[ id=" + id + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author Joern Muehlencord + */ +@Entity +@Table(name = "api_key") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "ApiKeyEntity.findAll", query = "SELECT a FROM ApiKeyEntity a"), + @NamedQuery(name = "ApiKeyEntity.findByApiKey", query = "SELECT a FROM ApiKeyEntity a WHERE a.apiKey = :apiKey"), + @NamedQuery(name = "ApiKeyEntity.findByIssuedOn", query = "SELECT a FROM ApiKeyEntity a WHERE a.issuedOn = :issuedOn"), + @NamedQuery(name = "ApiKeyEntity.findByAccount", query = "SELECT a FROM ApiKeyEntity a WHERE a.account = :account"), + @NamedQuery(name = "ApiKeyEntity.findByExpiration", query = "SELECT a FROM ApiKeyEntity a WHERE a.expiration = :expiration")}) +public class ApiKeyEntity implements Serializable { + + private static final long serialVersionUID = -1044658457228215810L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "api_key") + private String apiKey; + @Basic(optional = false) + @NotNull + @Column(name = "issued_on") + @Temporal(TemporalType.TIMESTAMP) + private Date issuedOn; + @Column(name = "expiration") + private Short expiration; + @JoinColumn(name = "account", referencedColumnName = "id") + @ManyToOne(optional = false) + private AccountEntity account; + + public ApiKeyEntity() { + // empty constructor required for JPA + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public Date getIssuedOn() { + return issuedOn; + } + + public void setIssuedOn(Date issuedOn) { + this.issuedOn = issuedOn; + } + + public Short getExpiration() { + return expiration; + } + + public void setExpiration(Short expiration) { + this.expiration = expiration; + } + + public AccountEntity getAccount() { + return account; + } + + public void setAccount(AccountEntity account) { + this.account = account; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ApiKeyEntity)) { + return false; + } + ApiKeyEntity other = (ApiKeyEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "com.wincornixdorf.pcd.business.account.ApiKeyEntity[ id=" + id + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyObject.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyObject.java index 4e1da31..7dc7604 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyObject.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/ApiKeyObject.java @@ -1,56 +1,71 @@ -package de.muehlencord.shared.account.business.account.entity; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.google.gson.annotations.Expose; -import java.util.Date; - -/** - * - * @author Joern Muehlencord - */ -public class ApiKeyObject { - - @Expose - private String userName; - @Expose - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm'Z'") - private Date issuedOn; - @Expose - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm'Z'") - private Date expiresOn; - @Expose - private String authToken; - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public Date getIssuedOn() { - return issuedOn; - } - - public void setIssuedOn(Date issuedOn) { - this.issuedOn = issuedOn; - } - - public Date getExpiresOn() { - return expiresOn; - } - - public void setExpiresOn(Date expiresOn) { - this.expiresOn = expiresOn; - } - - public String getAuthToken() { - return authToken; - } - - public void setAuthToken(String authToken) { - this.authToken = authToken; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.google.gson.annotations.Expose; +import java.util.Date; + +/** + * + * @author Joern Muehlencord + */ +public class ApiKeyObject { + + @Expose + private String userName; + @Expose + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm'Z'") + private Date issuedOn; + @Expose + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm'Z'") + private Date expiresOn; + @Expose + private String authToken; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public Date getIssuedOn() { + return issuedOn; + } + + public void setIssuedOn(Date issuedOn) { + this.issuedOn = issuedOn; + } + + public Date getExpiresOn() { + return expiresOn; + } + + public void setExpiresOn(Date expiresOn) { + this.expiresOn = expiresOn; + } + + public String getAuthToken() { + return authToken; + } + + public void setAuthToken(String authToken) { + this.authToken = authToken; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/JWTObject.java b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/JWTObject.java index ee14b86..085f208 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/entity/JWTObject.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/entity/JWTObject.java @@ -1,47 +1,57 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.account.entity; - -/** - * - * @author Joern Muehlencord - */ -public class JWTObject { - - private String userName; - private String unqiueId; - private boolean valid; - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getUnqiueId() { - return unqiueId; - } - - public void setUnqiueId(String unqiueId) { - this.unqiueId = unqiueId; - } - - public boolean isValid() { - return valid; - } - - public void setValid(boolean valid) { - this.valid = valid; - } - - - - - - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.account.entity; + +/** + * + * @author Joern Muehlencord + */ +public class JWTObject { + + private String userName; + private String unqiueId; + private boolean valid; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUnqiueId() { + return unqiueId; + } + + public void setUnqiueId(String unqiueId) { + this.unqiueId = unqiueId; + } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + this.valid = valid; + } + + + + + + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationKey.java b/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationKey.java index 0877822..60a240b 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationKey.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationKey.java @@ -1,19 +1,29 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.accountconfig.entity; - -/** - * - * @author Joern Muehlencord - */ -public enum AccountConfigurationKey { - // the base path of the application - BaseUrl, - // the full pass to the reset password page - PasswordResetUrl, - // injection handler - Producer; -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.accountconfig.entity; + +/** + * + * @author Joern Muehlencord + */ +public enum AccountConfigurationKey { + // the base path of the application + BaseUrl, + // the full pass to the reset password page + PasswordResetUrl, + // injection handler + Producer; +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationValue.java b/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationValue.java index 4052f5b..2357546 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationValue.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/accountconfig/entity/AccountConfigurationValue.java @@ -1,30 +1,40 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.accountconfig.entity; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.enterprise.util.Nonbinding; -import javax.inject.Qualifier; - -/** - * - * @author Joern Muehlencord - */ -@Target({ElementType.FIELD, ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@Qualifier -public @interface AccountConfigurationValue { - - @Nonbinding - AccountConfigurationKey key(); -} - - - - +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.accountconfig.entity; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; + +/** + * + * @author Joern Muehlencord + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +public @interface AccountConfigurationValue { + + @Nonbinding + AccountConfigurationKey key(); +} + + + + diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationPermissions.java b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationPermissions.java index d3bb859..92488d3 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationPermissions.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationPermissions.java @@ -1,41 +1,56 @@ -package de.muehlencord.shared.account.business.application.boundary; - -import de.muehlencord.shared.account.util.Permission; - -/** - * - * @author Joern Muehlencord - */ -public enum ApplicationPermissions implements Permission { - - APP_LISTALL("application:listall", "Allows to list all avaiable applications"), - APP_ADD("application:add", "Allow to add a new application"), - APP_EDIT("application:edit", "Allow to edit an application"), - APP_DELETE("application:delete", "Allow to delete an application"), - PERMISSION_ADD("permission:add", "Allow to add a permission to an application"), - PERMISSION_EDIT("permission:edit", "Allow to edit a permission"), - PERMISSION_DELETE("permmission:delete", "Allow to delete a permission"), - ROLE_ADD("role:add", "Allow to add a role to an application"), - ROLE_EDIT("role:edit", "Allow to edit a role"), - ROLE_DELETE("role:delete", "Allow to delete a role"), - ROLE_PERMISSION_ASSIGN("role:permission:assign", "Allow to assign a permission to role"), - ROLE_PERMISSION_REVOKE("role:permission:revoke", "All ow to revoke a permission from a role"); - - private final String name; - private final String description; - - private ApplicationPermissions(String permissionName, String permissionDesc) { - this.name = permissionName; - this.description = permissionDesc; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getDescription() { - return description; - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.boundary; + +import de.muehlencord.shared.account.util.Permission; + +/** + * + * @author Joern Muehlencord + */ +public enum ApplicationPermissions implements Permission { + + APP_LISTALL("application:listall", "Allows to list all avaiable applications"), + APP_ADD("application:add", "Allow to add a new application"), + APP_EDIT("application:edit", "Allow to edit an application"), + APP_DELETE("application:delete", "Allow to delete an application"), + PERMISSION_ADD("permission:add", "Allow to add a permission to an application"), + PERMISSION_EDIT("permission:edit", "Allow to edit a permission"), + PERMISSION_DELETE("permmission:delete", "Allow to delete a permission"), + ROLE_ADD("role:add", "Allow to add a role to an application"), + ROLE_EDIT("role:edit", "Allow to edit a role"), + ROLE_DELETE("role:delete", "Allow to delete a role"), + ROLE_PERMISSION_ASSIGN("role:permission:assign", "Allow to assign a permission to role"), + ROLE_PERMISSION_REVOKE("role:permission:revoke", "All ow to revoke a permission from a role"); + + private final String name; + private final String description; + + private ApplicationPermissions(String permissionName, String permissionDesc) { + this.name = permissionName; + this.description = permissionDesc; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getDescription() { + return description; + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationService.java b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationService.java index 4fc5b98..64a8848 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationService.java @@ -1,92 +1,107 @@ -package de.muehlencord.shared.account.business.application.boundary; - -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.util.AccountPU; -import de.muehlencord.shared.account.util.AccountSecurityException; -import de.muehlencord.shared.account.util.SecurityUtil; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.transaction.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Joern Muehlencord - */ -@Stateless -public class ApplicationService implements Serializable { - - private static final long serialVersionUID = 4262608935325326191L; - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationService.class); - - @Inject - @AccountPU - EntityManager em; - - public ApplicationEntity findById(UUID id) { - return em.find(ApplicationEntity.class, id); - } - - public List getAllApplications() throws AccountSecurityException { - SecurityUtil.checkPermission(ApplicationPermissions.APP_LISTALL, ApplicationServiceError.LISTALL_DENIED); - Query query = em.createNamedQuery("ApplicationEntity.findAll"); - List resultList = query.getResultList(); - if (resultList == null) { - return new ArrayList<>(); - } else { - return resultList; - } - } - - @Transactional - public ApplicationEntity createOrUpdate(ApplicationEntity app) { - if (app == null) { - // TODO add error handling - return null; - } else { - if (app.getId() == null) { - em.persist(app); - ApplicationEntity returnValue = findByApplicationName(app.getApplicationName()); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Application {} created", app.getApplicationName()); - } - - return returnValue; - } else { - ApplicationEntity returnValue = em.merge(app); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Applicateion {} updated", app.getApplicationName()); - } - return returnValue; - } - } - } - - public ApplicationEntity findByApplicationName(String applicationName) { - Query query = em.createNamedQuery("ApplicationEntity.findByApplicationName"); - query.setParameter("applicationName", applicationName); - List resultList = query.getResultList(); - if ((resultList == null) || (resultList.isEmpty())) { - return null; - } else { - return resultList.get(0); - } - } - - @Transactional - public void delete(ApplicationEntity app) { - ApplicationEntity attachedApp = em.find(ApplicationEntity.class, app.getId()); - em.remove(attachedApp); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Application {} deleted", app.getApplicationName()); - } - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.boundary; + +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.util.AccountPU; +import de.muehlencord.shared.account.util.AccountSecurityException; +import de.muehlencord.shared.account.util.SecurityUtil; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import javax.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Joern Muehlencord + */ +@Stateless +public class ApplicationService implements Serializable { + + private static final long serialVersionUID = 4262608935325326191L; + private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationService.class); + + @Inject + @AccountPU + EntityManager em; + + public ApplicationEntity findById(UUID id) { + return em.find(ApplicationEntity.class, id); + } + + public List getAllApplications() throws AccountSecurityException { + SecurityUtil.checkPermission(ApplicationPermissions.APP_LISTALL, ApplicationServiceError.LISTALL_DENIED); + Query query = em.createNamedQuery("ApplicationEntity.findAll"); + List resultList = query.getResultList(); + if (resultList == null) { + return new ArrayList<>(); + } else { + return resultList; + } + } + + @Transactional + public ApplicationEntity createOrUpdate(ApplicationEntity app) { + if (app == null) { + // TODO add error handling + return null; + } else { + if (app.getId() == null) { + em.persist(app); + ApplicationEntity returnValue = findByApplicationName(app.getApplicationName()); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Application {} created", app.getApplicationName()); + } + + return returnValue; + } else { + ApplicationEntity returnValue = em.merge(app); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Applicateion {} updated", app.getApplicationName()); + } + return returnValue; + } + } + } + + public ApplicationEntity findByApplicationName(String applicationName) { + Query query = em.createNamedQuery("ApplicationEntity.findByApplicationName"); + query.setParameter("applicationName", applicationName); + List resultList = query.getResultList(); + if ((resultList == null) || (resultList.isEmpty())) { + return null; + } else { + return resultList.get(0); + } + } + + @Transactional + public void delete(ApplicationEntity app) { + ApplicationEntity attachedApp = em.find(ApplicationEntity.class, app.getId()); + em.remove(attachedApp); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Application {} deleted", app.getApplicationName()); + } + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.java b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.java index d040421..334902c 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.java @@ -1,31 +1,46 @@ -package de.muehlencord.shared.account.business.application.boundary; - -import de.muehlencord.shared.account.util.SecurityError; - -/** - * - * @author Joern Muehlencord - */ -public enum ApplicationServiceError implements SecurityError { - - LISTALL_DENIED("1000", "listall_denied"); - - private final String errorCode; - private final String messageKey; - - private ApplicationServiceError(String errorCode, String messageKey) { - this.errorCode = errorCode; - this.messageKey = messageKey; - } - - @Override - public String getErrorCode() { - return errorCode; - } - - @Override - public String getMessageKey() { - return messageKey; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.boundary; + +import de.muehlencord.shared.account.util.SecurityError; + +/** + * + * @author Joern Muehlencord + */ +public enum ApplicationServiceError implements SecurityError { + + LISTALL_DENIED("1000", "listall_denied"); + + private final String errorCode; + private final String messageKey; + + private ApplicationServiceError(String errorCode, String messageKey) { + this.errorCode = errorCode; + this.messageKey = messageKey; + } + + @Override + public String getErrorCode() { + return errorCode; + } + + @Override + public String getMessageKey() { + return messageKey; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/StartupBean.java b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/StartupBean.java index bfd3a7a..ba2f048 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/StartupBean.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/boundary/StartupBean.java @@ -1,71 +1,71 @@ -/* - * Copyright 2018 Joern Muehlencord . - * - * 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.business.application.boundary; - -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.business.config.boundary.ConfigService; -import de.muehlencord.shared.account.business.config.entity.ConfigException; -import javax.annotation.PreDestroy; -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.context.Initialized; -import javax.enterprise.event.Observes; -import javax.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Joern Muehlencord - */ -@ApplicationScoped -public class StartupBean { - - private static final Logger LOGGER = LoggerFactory.getLogger(StartupBean.class); - - @Inject - ConfigService configService; - - @Inject - ApplicationEntity application; - - public void init(@Observes @Initialized(ApplicationScoped.class) Object init) { - try { - LOGGER.info("Starting application {}", application.getApplicationName()); - String instanceName = configService.getConfigValue("base.instance", "Development System", true); - LOGGER.info("instanceName={}", instanceName); - - // ensure maxFailedLogins is available - configService.getConfigValue("account.maxFailedLogins", "5", true); - - LOGGER.info("Application startup complete"); - } catch (ConfigException ex) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(ex.toString(), ex); - } else { - LOGGER.error(ex.toString()); - } - } - } - - @PreDestroy - public void shutdown() { - LOGGER.info("Shutting down application {}", application.getApplicationName()); - - - LOGGER.info("Application shutdown complete"); - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.boundary; + +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.business.config.boundary.ConfigService; +import de.muehlencord.shared.account.business.config.entity.ConfigException; +import javax.annotation.PreDestroy; +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.Initialized; +import javax.enterprise.event.Observes; +import javax.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Joern Muehlencord + */ +@ApplicationScoped +public class StartupBean { + + private static final Logger LOGGER = LoggerFactory.getLogger(StartupBean.class); + + @Inject + ConfigService configService; + + @Inject + ApplicationEntity application; + + public void init(@Observes @Initialized(ApplicationScoped.class) Object init) { + try { + LOGGER.info("Starting application {}", application.getApplicationName()); + String instanceName = configService.getConfigValue("base.instance", "Development System", true); + LOGGER.info("instanceName={}", instanceName); + + // ensure maxFailedLogins is available + configService.getConfigValue("account.maxFailedLogins", "5", true); + + LOGGER.info("Application startup complete"); + } catch (ConfigException ex) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(ex.toString(), ex); + } else { + LOGGER.error(ex.toString()); + } + } + } + + @PreDestroy + public void shutdown() { + LOGGER.info("Shutting down application {}", application.getApplicationName()); + + + LOGGER.info("Application shutdown complete"); + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationController.java b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationController.java index d2b1856..67eb3ec 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationController.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationController.java @@ -1,5 +1,5 @@ -/* - * Copyright 2018 Joern Muehlencord . +/* + * Copyright 2018 joern.muehlencord. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationPermissionControl.java b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationPermissionControl.java index 4af8bea..e9e1d75 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationPermissionControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationPermissionControl.java @@ -1,142 +1,157 @@ -package de.muehlencord.shared.account.business.application.control; - -import de.muehlencord.shared.account.business.account.entity.AccountException; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity; -import de.muehlencord.shared.account.util.AccountPU; -import de.muehlencord.shared.account.util.Permission; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.OptimisticLockException; -import javax.persistence.Query; -import javax.transaction.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Joern Muehlencord - */ -@Stateless -public class ApplicationPermissionControl implements Serializable { - - private static final long serialVersionUID = -3761100587901739481L; - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationPermissionControl.class); - - @Inject - @AccountPU - EntityManager em; - - @Inject - ApplicationEntity application; - - public List getApplicationPermissions(ApplicationEntity app) { - Query query = em.createNamedQuery("ApplicationPermissionEntity.findAll"); - query.setParameter("application", app); - List permissionList = query.getResultList(); - if (permissionList == null) { - return new ArrayList<>(); - } else { - return permissionList; - } - } - - public ApplicationPermissionEntity findPermissionByName(ApplicationEntity application, String permissionName) { - Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName"); - query.setParameter("application", application); - query.setParameter("permissionName", permissionName); - List resultList = query.getResultList(); - if ((resultList == null) || (resultList.isEmpty())) { - return null; - } else { - return resultList.get(0); - } - } - - @Transactional - public void create(ApplicationEntity application, String name, String description) { - ApplicationPermissionEntity permission = new ApplicationPermissionEntity(application, name, description); - em.persist(permission); - } - - @Transactional - public void update(ApplicationPermissionEntity permission) throws AccountException { - ApplicationPermissionEntity existing = attach(permission); - em.merge(existing); - } - - @Transactional - public void createOrUpdate(ApplicationEntity application, String name, String description) { - ApplicationPermissionEntity permission = findByName(application, name); - if (permission == null) { - permission = new ApplicationPermissionEntity(name, description); - em.persist(permission); - } else { - permission.setPermissionDescription(description); - em.merge(permission); - } - } - - @Transactional - public void delete(ApplicationPermissionEntity permission) throws AccountException { - ApplicationPermissionEntity existingPermission = attach(permission); - em.remove(existingPermission); - } - - public ApplicationPermissionEntity attach(ApplicationPermissionEntity permission) throws AccountException { - try { - return em.merge(permission); - } catch (OptimisticLockException ex) { - throw new AccountException("Entity updated / deleted, please reload", true); - } - } - - private ApplicationPermissionEntity findByName(ApplicationEntity application, String name) { - Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName"); - query.setParameter("application", application); - query.setParameter("permissionName", name); - List permissions = query.getResultList(); - if ((permissions == null) || (permissions.isEmpty())) { - return null; - } else { - return permissions.get(0); - } - } - - @Transactional - public void setupPermissions(List permissions) { - for (Permission permission : permissions) { - ApplicationPermissionEntity existingPermission = findByName(application, permission.getName()); - if (existingPermission == null) { - // permission not available, create it - LOGGER.info("missing permission {} of {}", permission.getName(), application.getApplicationName()); - existingPermission = new ApplicationPermissionEntity(permission.getName(), permission.getDescription()); - existingPermission.setApplication(application); - em.persist(existingPermission); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("missing permission {} added to {}", permission.getName(), application.getApplicationName()); - } - } else { - if (existingPermission.getPermissionDescription().equals(permission.getDescription())) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Permission {} for {} already exists, skipping", permission.getName(), application.getApplicationName()); - } - } else { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("description of permssion {} for {} differs, resetting to orignal value {}", permission.getName(), application.getApplicationName(), permission.getDescription()); - } - - existingPermission.setPermissionDescription(permission.getDescription()); - em.merge (existingPermission); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("updated permission description {} for {}", permission.getName(), application.getApplicationName()); - } - } - } - } - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.control; + +import de.muehlencord.shared.account.business.account.entity.AccountException; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity; +import de.muehlencord.shared.account.util.AccountPU; +import de.muehlencord.shared.account.util.Permission; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.OptimisticLockException; +import javax.persistence.Query; +import javax.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Joern Muehlencord + */ +@Stateless +public class ApplicationPermissionControl implements Serializable { + + private static final long serialVersionUID = -3761100587901739481L; + private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationPermissionControl.class); + + @Inject + @AccountPU + EntityManager em; + + @Inject + ApplicationEntity application; + + public List getApplicationPermissions(ApplicationEntity app) { + Query query = em.createNamedQuery("ApplicationPermissionEntity.findAll"); + query.setParameter("application", app); + List permissionList = query.getResultList(); + if (permissionList == null) { + return new ArrayList<>(); + } else { + return permissionList; + } + } + + public ApplicationPermissionEntity findPermissionByName(ApplicationEntity application, String permissionName) { + Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName"); + query.setParameter("application", application); + query.setParameter("permissionName", permissionName); + List resultList = query.getResultList(); + if ((resultList == null) || (resultList.isEmpty())) { + return null; + } else { + return resultList.get(0); + } + } + + @Transactional + public void create(ApplicationEntity application, String name, String description) { + ApplicationPermissionEntity permission = new ApplicationPermissionEntity(application, name, description); + em.persist(permission); + } + + @Transactional + public void update(ApplicationPermissionEntity permission) throws AccountException { + ApplicationPermissionEntity existing = attach(permission); + em.merge(existing); + } + + @Transactional + public void createOrUpdate(ApplicationEntity application, String name, String description) { + ApplicationPermissionEntity permission = findByName(application, name); + if (permission == null) { + permission = new ApplicationPermissionEntity(name, description); + em.persist(permission); + } else { + permission.setPermissionDescription(description); + em.merge(permission); + } + } + + @Transactional + public void delete(ApplicationPermissionEntity permission) throws AccountException { + ApplicationPermissionEntity existingPermission = attach(permission); + em.remove(existingPermission); + } + + public ApplicationPermissionEntity attach(ApplicationPermissionEntity permission) throws AccountException { + try { + return em.merge(permission); + } catch (OptimisticLockException ex) { + throw new AccountException("Entity updated / deleted, please reload", true); + } + } + + private ApplicationPermissionEntity findByName(ApplicationEntity application, String name) { + Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName"); + query.setParameter("application", application); + query.setParameter("permissionName", name); + List permissions = query.getResultList(); + if ((permissions == null) || (permissions.isEmpty())) { + return null; + } else { + return permissions.get(0); + } + } + + @Transactional + public void setupPermissions(List permissions) { + for (Permission permission : permissions) { + ApplicationPermissionEntity existingPermission = findByName(application, permission.getName()); + if (existingPermission == null) { + // permission not available, create it + LOGGER.info("missing permission {} of {}", permission.getName(), application.getApplicationName()); + existingPermission = new ApplicationPermissionEntity(permission.getName(), permission.getDescription()); + existingPermission.setApplication(application); + em.persist(existingPermission); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("missing permission {} added to {}", permission.getName(), application.getApplicationName()); + } + } else { + if (existingPermission.getPermissionDescription().equals(permission.getDescription())) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Permission {} for {} already exists, skipping", permission.getName(), application.getApplicationName()); + } + } else { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("description of permssion {} for {} differs, resetting to orignal value {}", permission.getName(), application.getApplicationName(), permission.getDescription()); + } + + existingPermission.setPermissionDescription(permission.getDescription()); + em.merge (existingPermission); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("updated permission description {} for {}", permission.getName(), application.getApplicationName()); + } + } + } + } + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java index e693907..12510cc 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.control; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationEntity.java index 57306da..2681a94 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationEntity.java @@ -1,129 +1,144 @@ -package de.muehlencord.shared.account.business.application.entity; - -import de.muehlencord.shared.account.business.config.entity.ConfigEntity; -import java.io.Serializable; -import java.util.List; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author Joern Muehlencord - */ -@Entity -@Table(name = "application") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "ApplicationEntity.findAll", query = "SELECT a FROM ApplicationEntity a"), - @NamedQuery(name = "ApplicationEntity.findByApplicationName", query = "SELECT a FROM ApplicationEntity a WHERE a.applicationName = :applicationName")}) -public class ApplicationEntity implements Serializable { - - private static final long serialVersionUID = -6407525020014743727L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "application_name", unique = true) - private String applicationName; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") - private List applicationRoleEntityList; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") - private List applicationPermissions; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") - private List configEntityList; - - public ApplicationEntity() { - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getApplicationName() { - return applicationName; - } - - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; - } - - @XmlTransient - public List getApplicationRoleEntityList() { - return applicationRoleEntityList; - } - - public void setApplicationRoleEntityList(List applicationRoleEntityList) { - this.applicationRoleEntityList = applicationRoleEntityList; - } - - @XmlTransient - public List getApplicationPermissions() { - return applicationPermissions; - } - - public void setApplicationPermissions(List applicationPermissions) { - this.applicationPermissions = applicationPermissions; - } - - @XmlTransient - public List getConfigEntityList() { - return configEntityList; - } - - public void setConfigEntityList(List configEntityList) { - this.configEntityList = configEntityList; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof ApplicationEntity)) { - return false; - } - ApplicationEntity other = (ApplicationEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.business.application.entity.ApplicationEntity[ id=" + id + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.entity; + +import de.muehlencord.shared.account.business.config.entity.ConfigEntity; +import java.io.Serializable; +import java.util.List; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author Joern Muehlencord + */ +@Entity +@Table(name = "application") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "ApplicationEntity.findAll", query = "SELECT a FROM ApplicationEntity a"), + @NamedQuery(name = "ApplicationEntity.findByApplicationName", query = "SELECT a FROM ApplicationEntity a WHERE a.applicationName = :applicationName")}) +public class ApplicationEntity implements Serializable { + + private static final long serialVersionUID = -6407525020014743727L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "application_name", unique = true) + private String applicationName; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") + private List applicationRoleEntityList; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") + private List applicationPermissions; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "application") + private List configEntityList; + + public ApplicationEntity() { + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + @XmlTransient + public List getApplicationRoleEntityList() { + return applicationRoleEntityList; + } + + public void setApplicationRoleEntityList(List applicationRoleEntityList) { + this.applicationRoleEntityList = applicationRoleEntityList; + } + + @XmlTransient + public List getApplicationPermissions() { + return applicationPermissions; + } + + public void setApplicationPermissions(List applicationPermissions) { + this.applicationPermissions = applicationPermissions; + } + + @XmlTransient + public List getConfigEntityList() { + return configEntityList; + } + + public void setConfigEntityList(List configEntityList) { + this.configEntityList = configEntityList; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ApplicationEntity)) { + return false; + } + ApplicationEntity other = (ApplicationEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.business.application.entity.ApplicationEntity[ id=" + id + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java index 1f88d2c..229f682 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java @@ -1,158 +1,173 @@ -package de.muehlencord.shared.account.business.application.entity; - -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import java.io.Serializable; -import java.util.List; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author joern.muehlencord - */ -@Entity -@Table(name = "application_permission") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application order by a.permissionName"), - @NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoles r WHERE a.application=:application AND r NOT IN :permissions"), - @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionName = :permissionName"), - @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionDescription = :permissionDescription")}) -public class ApplicationPermissionEntity implements Serializable { - - private static final long serialVersionUID = -8985982754544829534L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 80) - @Column(name = "permission_name") - private String permissionName; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "permission_description") - private String permissionDescription; - @JoinColumn(name = "application", referencedColumnName = "id") - @ManyToOne(optional = false) - private ApplicationEntity application; - @ManyToMany(mappedBy = "applicationPermissionList") - private List applicationRoles; - - public ApplicationPermissionEntity() { - } - - public ApplicationPermissionEntity(UUID id) { - this.id = id; - } - - public ApplicationPermissionEntity(String permissionName, String permissionDescription) { - this.id = null; - this.permissionName = permissionName; - this.permissionDescription = permissionDescription; - } - - public ApplicationPermissionEntity(ApplicationEntity application, String permissionName, String permissionDescription) { - this.id = null; - this.application = application; - this.permissionName = permissionName; - this.permissionDescription = permissionDescription; - } - - public ApplicationPermissionEntity(UUID id, ApplicationEntity application, String permissionName, String permissionDescription) { - this.id = id; - this.application = application; - this.permissionName = permissionName; - this.permissionDescription = permissionDescription; - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getPermissionName() { - return permissionName; - } - - public void setPermissionName(String permissionName) { - this.permissionName = permissionName; - } - - public String getPermissionDescription() { - return permissionDescription; - } - - public void setPermissionDescription(String permissionDescription) { - this.permissionDescription = permissionDescription; - } - - @XmlTransient - public List getApplicationRoles() { - return applicationRoles; - } - - public void setApplicationRoles(List applicationRoles) { - this.applicationRoles = applicationRoles; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof ApplicationPermissionEntity)) { - return false; - } - ApplicationPermissionEntity other = (ApplicationPermissionEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.entity.ApplicationPermission[ id=" + id + " ]"; - } - - public ApplicationEntity getApplication() { - return application; - } - - public void setApplication(ApplicationEntity application) { - this.application = application; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.entity; + +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import java.io.Serializable; +import java.util.List; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author joern.muehlencord + */ +@Entity +@Table(name = "application_permission") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application order by a.permissionName"), + @NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoles r WHERE a.application=:application AND r NOT IN :permissions"), + @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionName = :permissionName"), + @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionDescription = :permissionDescription")}) +public class ApplicationPermissionEntity implements Serializable { + + private static final long serialVersionUID = -8985982754544829534L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 80) + @Column(name = "permission_name") + private String permissionName; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "permission_description") + private String permissionDescription; + @JoinColumn(name = "application", referencedColumnName = "id") + @ManyToOne(optional = false) + private ApplicationEntity application; + @ManyToMany(mappedBy = "applicationPermissionList") + private List applicationRoles; + + public ApplicationPermissionEntity() { + } + + public ApplicationPermissionEntity(UUID id) { + this.id = id; + } + + public ApplicationPermissionEntity(String permissionName, String permissionDescription) { + this.id = null; + this.permissionName = permissionName; + this.permissionDescription = permissionDescription; + } + + public ApplicationPermissionEntity(ApplicationEntity application, String permissionName, String permissionDescription) { + this.id = null; + this.application = application; + this.permissionName = permissionName; + this.permissionDescription = permissionDescription; + } + + public ApplicationPermissionEntity(UUID id, ApplicationEntity application, String permissionName, String permissionDescription) { + this.id = id; + this.application = application; + this.permissionName = permissionName; + this.permissionDescription = permissionDescription; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getPermissionName() { + return permissionName; + } + + public void setPermissionName(String permissionName) { + this.permissionName = permissionName; + } + + public String getPermissionDescription() { + return permissionDescription; + } + + public void setPermissionDescription(String permissionDescription) { + this.permissionDescription = permissionDescription; + } + + @XmlTransient + public List getApplicationRoles() { + return applicationRoles; + } + + public void setApplicationRoles(List applicationRoles) { + this.applicationRoles = applicationRoles; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ApplicationPermissionEntity)) { + return false; + } + ApplicationPermissionEntity other = (ApplicationPermissionEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.entity.ApplicationPermission[ id=" + id + " ]"; + } + + public ApplicationEntity getApplication() { + return application; + } + + public void setApplication(ApplicationEntity application) { + this.application = application; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java index 7e159d2..f2a9519 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java @@ -1,171 +1,186 @@ -package de.muehlencord.shared.account.business.application.entity; - -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import java.io.Serializable; -import java.util.List; -import java.util.UUID; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; - -/** - * - * @author joern.muehlencord - */ -@Entity -@Table(name = "application_role") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application ORDER BY a.roleName"), - @NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleName = :roleName"), - @NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleDescription = :roleDescription")}) - -public class ApplicationRoleEntity implements Serializable { - - private static final long serialVersionUID = -8324054525780893823L; - - @Id - @Basic(optional = false) - @NotNull - @Column(name = "id") - @GeneratedValue(generator = "uuid2") - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Type(type = "pg-uuid") - private UUID id; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 80) - @Column(name = "role_name") - private String roleName; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 200) - @Column(name = "role_description") - private String roleDescription; - @ManyToMany(mappedBy = "applicationRoleList") - private List accountList; - @JoinTable(name = "role_permission", joinColumns = { - @JoinColumn(name = "application_role", referencedColumnName = "id")}, inverseJoinColumns = { - @JoinColumn(name = "role_permission", referencedColumnName = "id")}) - @ManyToMany - private List applicationPermissionList; - @JoinColumn(name = "application", referencedColumnName = "id") - @ManyToOne(optional = false) - private ApplicationEntity application; - - public ApplicationRoleEntity() { - } - - public ApplicationRoleEntity(ApplicationEntity application) { - this.id = null; - this.application = application; - this.roleName = ""; - this.roleDescription = ""; - } - - public ApplicationRoleEntity(ApplicationEntity application, String roleName, String roleDescription) { - this.id = null; - this.application = application; - this.roleName = roleName; - this.roleDescription = roleDescription; - } - - public ApplicationRoleEntity(UUID id, ApplicationEntity application, String roleName, String roleDescription) { - this.id = id; - this.application = application; - this.roleName = roleName; - this.roleDescription = roleDescription; - } - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getRoleName() { - return roleName; - } - - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - public String getRoleDescription() { - return roleDescription; - } - - public void setRoleDescription(String roleDescription) { - this.roleDescription = roleDescription; - } - - @XmlTransient - public List getAccountList() { - return accountList; - } - - public void setAccountList(List accountList) { - this.accountList = accountList; - } - - @XmlTransient - public List getApplicationPermissionList() { - return applicationPermissionList; - } - - public void setApplicationPermissionList(List applicationPermissionList) { - this.applicationPermissionList = applicationPermissionList; - } - - public ApplicationEntity getApplication() { - return application; - } - - public void setApplication(ApplicationEntity application) { - this.application = application; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (id != null ? id.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof ApplicationRoleEntity)) { - return false; - } - ApplicationRoleEntity other = (ApplicationRoleEntity) object; - if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.entity.ApplicationRole[ id=" + id + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.application.entity; + +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import java.io.Serializable; +import java.util.List; +import java.util.UUID; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Type; + +/** + * + * @author joern.muehlencord + */ +@Entity +@Table(name = "application_role") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application ORDER BY a.roleName"), + @NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleName = :roleName"), + @NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleDescription = :roleDescription")}) + +public class ApplicationRoleEntity implements Serializable { + + private static final long serialVersionUID = -8324054525780893823L; + + @Id + @Basic(optional = false) + @NotNull + @Column(name = "id") + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + @Type(type = "pg-uuid") + private UUID id; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 80) + @Column(name = "role_name") + private String roleName; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 200) + @Column(name = "role_description") + private String roleDescription; + @ManyToMany(mappedBy = "applicationRoleList") + private List accountList; + @JoinTable(name = "role_permission", joinColumns = { + @JoinColumn(name = "application_role", referencedColumnName = "id")}, inverseJoinColumns = { + @JoinColumn(name = "role_permission", referencedColumnName = "id")}) + @ManyToMany + private List applicationPermissionList; + @JoinColumn(name = "application", referencedColumnName = "id") + @ManyToOne(optional = false) + private ApplicationEntity application; + + public ApplicationRoleEntity() { + } + + public ApplicationRoleEntity(ApplicationEntity application) { + this.id = null; + this.application = application; + this.roleName = ""; + this.roleDescription = ""; + } + + public ApplicationRoleEntity(ApplicationEntity application, String roleName, String roleDescription) { + this.id = null; + this.application = application; + this.roleName = roleName; + this.roleDescription = roleDescription; + } + + public ApplicationRoleEntity(UUID id, ApplicationEntity application, String roleName, String roleDescription) { + this.id = id; + this.application = application; + this.roleName = roleName; + this.roleDescription = roleDescription; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleDescription() { + return roleDescription; + } + + public void setRoleDescription(String roleDescription) { + this.roleDescription = roleDescription; + } + + @XmlTransient + public List getAccountList() { + return accountList; + } + + public void setAccountList(List accountList) { + this.accountList = accountList; + } + + @XmlTransient + public List getApplicationPermissionList() { + return applicationPermissionList; + } + + public void setApplicationPermissionList(List applicationPermissionList) { + this.applicationPermissionList = applicationPermissionList; + } + + public ApplicationEntity getApplication() { + return application; + } + + public void setApplication(ApplicationEntity application) { + this.application = application; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ApplicationRoleEntity)) { + return false; + } + ApplicationRoleEntity other = (ApplicationRoleEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.entity.ApplicationRole[ id=" + id + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigService.java b/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigService.java index 9220054..ec5ba56 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigService.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.boundary; import de.muehlencord.shared.account.business.account.entity.Account; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigurationProducer.java b/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigurationProducer.java index 49dffb5..2ea50df 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigurationProducer.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/config/boundary/ConfigurationProducer.java @@ -1,52 +1,62 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.config.boundary; - -import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationKey; -import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationValue; -import de.muehlencord.shared.account.business.config.entity.ConfigException; -import javax.ejb.EJB; -import javax.enterprise.context.Dependent; -import javax.enterprise.inject.Produces; -import javax.enterprise.inject.spi.Annotated; -import javax.enterprise.inject.spi.InjectionPoint; - -/** - * - * @author Joern Muehlencord - */ -@Dependent -public class ConfigurationProducer { - - @EJB - ConfigService configService; - - @Produces - @AccountConfigurationValue(key = AccountConfigurationKey.Producer) - public String produceConfigurationValue(InjectionPoint injectionPoint) { - Annotated annotated = injectionPoint.getAnnotated(); - AccountConfigurationValue annotation = annotated.getAnnotation(AccountConfigurationValue.class); - if (annotation != null) { - AccountConfigurationKey key = annotation.key(); - if (key != null) { - try { - switch (key) { - case BaseUrl: - return configService.getConfigValue("base.url"); - case PasswordResetUrl: - return configService.getConfigValue("base.url") + "/login.xhtml"; - default: - throw new IllegalStateException("Invalid key " + key + " for injection point: " + injectionPoint); - } - } catch (ConfigException ex) { - throw new IllegalStateException("Invalid key " + key + " for injection point: " + injectionPoint + ". Exception: " + ex.getMessage()); - } - } - } - throw new IllegalStateException("No key for injection point: " + injectionPoint); - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.boundary; + +import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationKey; +import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationValue; +import de.muehlencord.shared.account.business.config.entity.ConfigException; +import javax.ejb.EJB; +import javax.enterprise.context.Dependent; +import javax.enterprise.inject.Produces; +import javax.enterprise.inject.spi.Annotated; +import javax.enterprise.inject.spi.InjectionPoint; + +/** + * + * @author Joern Muehlencord + */ +@Dependent +public class ConfigurationProducer { + + @EJB + ConfigService configService; + + @Produces + @AccountConfigurationValue(key = AccountConfigurationKey.Producer) + public String produceConfigurationValue(InjectionPoint injectionPoint) { + Annotated annotated = injectionPoint.getAnnotated(); + AccountConfigurationValue annotation = annotated.getAnnotation(AccountConfigurationValue.class); + if (annotation != null) { + AccountConfigurationKey key = annotation.key(); + if (key != null) { + try { + switch (key) { + case BaseUrl: + return configService.getConfigValue("base.url"); + case PasswordResetUrl: + return configService.getConfigValue("base.url") + "/login.xhtml"; + default: + throw new IllegalStateException("Invalid key " + key + " for injection point: " + injectionPoint); + } + } catch (ConfigException ex) { + throw new IllegalStateException("Invalid key " + key + " for injection point: " + injectionPoint + ". Exception: " + ex.getMessage()); + } + } + } + throw new IllegalStateException("No key for injection point: " + injectionPoint); + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntity.java index 59b9b7a..678d876 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntity.java @@ -1,149 +1,159 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.config.entity; - -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import java.io.Serializable; -import javax.persistence.Cacheable; -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.QueryHint; -import javax.persistence.Table; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import org.hibernate.annotations.Cache; -import org.hibernate.annotations.CacheConcurrencyStrategy; - -/** - * - * @author Joern Muehlencord - */ -@Entity -@Table(name = "config") -@XmlRootElement -@Cacheable(true) -@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "Configuration") -@NamedQueries({ - @NamedQuery(name = "ConfigEntity.findAll", query = "SELECT c FROM ConfigEntity c ORDER BY c.configPK.configKey", - hints = { - @QueryHint(name = "org.hibernate.cacheable", value = "true"), - @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), - @NamedQuery(name = "ConfigEntity.findByConfigKey", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configPK.configKey = :configKey", - hints = { - @QueryHint(name = "org.hibernate.cacheable", value = "true"), - @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), - @NamedQuery(name = "ConfigEntity.findByConfigKeyAndAccount", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configPK.configKey = :configKey AND c.configPK.configKeyAccount = :account", - hints = { - @QueryHint(name = "org.hibernate.cacheable", value = "true"), - @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), - @NamedQuery(name = "ConfigEntity.findByConfigValue", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configValue = :configValue", - hints = { - @QueryHint(name = "org.hibernate.cacheable", value = "true"), - @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}) -}) - -public class ConfigEntity implements Serializable { - - private static final long serialVersionUID = -2013982316933782223L; - - @EmbeddedId - protected ConfigEntityPK configPK; - @Size(max = 200) - @Column(name = "config_value") - private String configValue; - @Size(max = 200) - @Column(name = "config_key_group") - private String configKeyGroup; - @JoinColumn(name = "config_key_account", referencedColumnName = "id", insertable = false, updatable = false) - @ManyToOne(optional = false) - private AccountEntity account; - @JoinColumn(name = "application", referencedColumnName = "id", insertable = false, updatable = false) - @ManyToOne(optional = false) - private ApplicationEntity application; - - public ConfigEntity() { - } - - public ConfigEntity(ApplicationEntity application, String configKey, AccountEntity account) { - this.configPK = new ConfigEntityPK(application, configKey, account); - } - - public ConfigEntity(ConfigEntityPK configPK) { - this.configPK = configPK; - } - - public ConfigEntityPK getConfigPK() { - return configPK; - } - - public void setConfigPK(ConfigEntityPK configPK) { - this.configPK = configPK; - } - - public String getConfigValue() { - return configValue; - } - - public void setConfigValue(String configValue) { - this.configValue = configValue; - } - - public String getConfigKeyGroup() { - return configKeyGroup; - } - - public void setConfigKeyGroup(String configKeyGroup) { - this.configKeyGroup = configKeyGroup; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (configPK != null ? configPK.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof ConfigEntity)) { - return false; - } - ConfigEntity other = (ConfigEntity) object; - if ((this.configPK == null && other.configPK != null) || (this.configPK != null && !this.configPK.equals(other.configPK))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.business.config.entity.Config[ configPK=" + configPK + " ]"; - } - - public AccountEntity getAccount() { - return account; - } - - public void setAccount(AccountEntity account) { - this.account = account; - } - - public ApplicationEntity getApplication() { - return application; - } - - public void setApplication(ApplicationEntity application) { - this.application = application; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.entity; + +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import java.io.Serializable; +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.QueryHint; +import javax.persistence.Table; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + * + * @author Joern Muehlencord + */ +@Entity +@Table(name = "config") +@XmlRootElement +@Cacheable(true) +@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "Configuration") +@NamedQueries({ + @NamedQuery(name = "ConfigEntity.findAll", query = "SELECT c FROM ConfigEntity c ORDER BY c.configPK.configKey", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ConfigEntity.findByConfigKey", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configPK.configKey = :configKey", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ConfigEntity.findByConfigKeyAndAccount", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configPK.configKey = :configKey AND c.configPK.configKeyAccount = :account", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ConfigEntity.findByConfigValue", query = "SELECT c FROM ConfigEntity c WHERE c.configPK.application = :application AND c.configValue = :configValue", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}) +}) + +public class ConfigEntity implements Serializable { + + private static final long serialVersionUID = -2013982316933782223L; + + @EmbeddedId + protected ConfigEntityPK configPK; + @Size(max = 200) + @Column(name = "config_value") + private String configValue; + @Size(max = 200) + @Column(name = "config_key_group") + private String configKeyGroup; + @JoinColumn(name = "config_key_account", referencedColumnName = "id", insertable = false, updatable = false) + @ManyToOne(optional = false) + private AccountEntity account; + @JoinColumn(name = "application", referencedColumnName = "id", insertable = false, updatable = false) + @ManyToOne(optional = false) + private ApplicationEntity application; + + public ConfigEntity() { + } + + public ConfigEntity(ApplicationEntity application, String configKey, AccountEntity account) { + this.configPK = new ConfigEntityPK(application, configKey, account); + } + + public ConfigEntity(ConfigEntityPK configPK) { + this.configPK = configPK; + } + + public ConfigEntityPK getConfigPK() { + return configPK; + } + + public void setConfigPK(ConfigEntityPK configPK) { + this.configPK = configPK; + } + + public String getConfigValue() { + return configValue; + } + + public void setConfigValue(String configValue) { + this.configValue = configValue; + } + + public String getConfigKeyGroup() { + return configKeyGroup; + } + + public void setConfigKeyGroup(String configKeyGroup) { + this.configKeyGroup = configKeyGroup; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (configPK != null ? configPK.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ConfigEntity)) { + return false; + } + ConfigEntity other = (ConfigEntity) object; + if ((this.configPK == null && other.configPK != null) || (this.configPK != null && !this.configPK.equals(other.configPK))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.business.config.entity.Config[ configPK=" + configPK + " ]"; + } + + public AccountEntity getAccount() { + return account; + } + + public void setAccount(AccountEntity account) { + this.account = account; + } + + public ApplicationEntity getApplication() { + return application; + } + + public void setApplication(ApplicationEntity application) { + this.application = application; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntityPK.java b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntityPK.java index e76433a..140623f 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntityPK.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigEntityPK.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.entity; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigException.java b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigException.java index c3e404a..678dca4 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigException.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/config/entity/ConfigException.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.entity; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailService.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailService.java index 23c56ef..b78cbb9 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailService.java @@ -1,203 +1,218 @@ -package de.muehlencord.shared.account.business.mail.boundary; - -import de.muehlencord.shared.account.business.mail.entity.MailTemplateException; -import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationKey; -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.account.business.account.entity.AccountLoginEntity; -import de.muehlencord.shared.account.business.mail.entity.MailDatamodel; -import de.muehlencord.shared.account.business.mail.entity.MailException; -import java.util.Date; -import java.util.UUID; -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Multipart; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationValue; -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author joern.muehlencord - */ -@Stateless -public class MailService implements Serializable { - - private static final long serialVersionUID = -1937218474908356747L; - - private static final Logger LOGGER = LoggerFactory.getLogger(MailService.class); - - @EJB - private MailTemplateService mailTemplateService; - - @Inject - @AccountConfigurationValue(key = AccountConfigurationKey.BaseUrl) - private String baseUrl; - - @Inject - @AccountConfigurationValue(key = AccountConfigurationKey.PasswordResetUrl) - private String passwordResetUrl; - - // TODO make this configurable by injection from the application it uses it, fall back to defaul mail setup if not available - @Resource(lookup = "java:jboss/mail/ssgMail") - private Session mailSession; - - public String sendTestEmail(String recipient) throws MailException { - return sendMail(recipient, "Test email", "This is a test email"); - } - - public String sendTestHtmlEmail(String recipient) throws MailException { - Date now = new Date(); - AccountEntity account = new AccountEntity(); - account.setId (UUID.randomUUID()); - account.setFirstname("Jörn"); - account.setLastname ("Mühlencord"); - AccountLoginEntity accountLogin = new AccountLoginEntity(); - accountLogin.setAccountPassword("secret"); - accountLogin.setAccount(account); - account.setAccountLogin(accountLogin); - MailDatamodel dataModel = new MailDatamodel(account); - dataModel.addParameter("url", "http://url.de"); - dataModel.addParameter("resetUrl", "http://reseturl.de"); - return sendHTMLMail(recipient, "Test HTML Email", dataModel, "password_reset_html"); - } - - public String sendMail(String recipient, String subject, String body) throws MailException { - try { - MimeMessage message = new MimeMessage(mailSession); - message.setSubject(subject, "UTF-8"); - message.setFrom(); - message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient, false)); - message.setText(body, "UTF-8"); - return transportMail(message); - } catch (MessagingException ex) { - throw new MailException("Error while sending email.", ex); - } - } - - public String sendHTMLMail(String recipient, String subject, MailDatamodel dataModel, String templateName) throws MailException { - return sendHTMLMail(recipient, subject, dataModel, templateName, null); - } - - public String sendHTMLMail(String recipient, String subject, MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName) throws MailException { - return sendHTMLMail(recipient, null, null, subject, dataModel, htmlTemplateName, plainTemplateName, "UTF-8", new ArrayList<>()); - } - - public String sendHTMLMail(String recipient, String ccRecipient, String bccRecipient, String subject, MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName) throws MailException { - return sendHTMLMail(recipient, ccRecipient, bccRecipient, subject, dataModel, htmlTemplateName, plainTemplateName, "UTF-8", new ArrayList<>()); - } - - public String sendHTMLMail(String recipient, String ccRecipient, String bccRecipient, String subject, - MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName, String encoding, List attachments) throws MailException { - try { - MimeMessage message = new MimeMessage(mailSession); - message.setFrom(); // use default from - message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient, false)); - if (ccRecipient != null) { - message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccRecipient, false)); - } - if (bccRecipient != null) { - message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccRecipient, false)); - } - - message.setSubject(subject, encoding); - - Multipart contentMultiPart = new MimeMultipart("alternative"); - - String htmlBody = mailTemplateService.getStringFromTemplate(htmlTemplateName, dataModel); - MimeBodyPart htmlBodyPart = new MimeBodyPart(); - htmlBodyPart.setContent(htmlBody, "text/html; charset=UTF-8"); - contentMultiPart.addBodyPart(htmlBodyPart); - - if (plainTemplateName != null) { - String plainBody = mailTemplateService.getStringFromTemplate(plainTemplateName, dataModel); - MimeBodyPart plainBodyPart = new MimeBodyPart(); - plainBodyPart.setText(plainBody, "UTF-8"); - contentMultiPart.addBodyPart(plainBodyPart); - } - - - if ((attachments == null) || (attachments.isEmpty())) { - message.setContent(contentMultiPart); - } else { - MimeBodyPart contentBodyPart = new MimeBodyPart(); - contentBodyPart.setContent(contentMultiPart); - - MimeMultipart messageMultipart = new MimeMultipart("related"); - messageMultipart.addBodyPart(contentBodyPart); - for (File attachment : attachments) { - try { - MimeBodyPart attachmentBodyPart = new MimeBodyPart(); - attachmentBodyPart.attachFile(attachment); - String contentType = Files.probeContentType(attachment.toPath()); - if (contentType != null) { - attachmentBodyPart.setHeader("Content-Type", contentType); - } - messageMultipart.addBodyPart(attachmentBodyPart); - } catch (IOException ex) { - throw new MailException("Cannot attach " + attachment.toString() + " to email. Reason: " + ex.toString(), ex); - } - } - - message.setContent (messageMultipart); - } - - return transportMail(message); - } catch (MessagingException | MailTemplateException ex) { - throw new MailException("Error while sending email.", ex); - } - } - - public String sendPasswortResetStartEmail(AccountEntity account, String token) throws MailException { - MailDatamodel model = new MailDatamodel(account); - - /* old aproach via FacesContext - add this back as fallback if injection point if not configured - try { - // String absoluteWebPath = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath(); - ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); - String resetPage = "/login.xhtml?token=" + token; - URL baseUrl; - - // TODO move out of this class, this is not mandatorily connected to a form - baseUrl = new URL(externalContext.getRequestScheme(), - externalContext.getRequestServerName(), - externalContext.getRequestServerPort(), - externalContext.getRequestContextPath()); - model.addParameter("url", baseUrl.toString()); - model.addParameter("resetUrl", baseUrl.toString() + resetPage); - } catch (MalformedURLException ex) { - throw new MailException("Error while sending email.", ex); - } - String baseUrl = configService.getConfigValue(configKey); - String resetUrlWithToken = baseUrl + "/login.xhtml?token=" + token; - */ - String resetUrlWithToken = passwordResetUrl + "?token=" + token; - model.addParameter("url", baseUrl); - model.addParameter("resetUrl", resetUrlWithToken); - return sendHTMLMail(account.getEmailaddress(), "Reset your password", model, "password_reset_html"); - } - - private String transportMail(Message message) throws MessagingException { - message.setSentDate(new Date()); - Transport.send(message); - String messageId = message.getHeader("Message-ID")[0]; - LOGGER.info("Mail sent to {}, messageid = {}", message.getAllRecipients()[0].toString(), messageId); - return messageId; - - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.boundary; + +import de.muehlencord.shared.account.business.mail.entity.MailTemplateException; +import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationKey; +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import de.muehlencord.shared.account.business.account.entity.AccountLoginEntity; +import de.muehlencord.shared.account.business.mail.entity.MailDatamodel; +import de.muehlencord.shared.account.business.mail.entity.MailException; +import java.util.Date; +import java.util.UUID; +import javax.annotation.Resource; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Multipart; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import de.muehlencord.shared.account.business.accountconfig.entity.AccountConfigurationValue; +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author joern.muehlencord + */ +@Stateless +public class MailService implements Serializable { + + private static final long serialVersionUID = -1937218474908356747L; + + private static final Logger LOGGER = LoggerFactory.getLogger(MailService.class); + + @EJB + private MailTemplateService mailTemplateService; + + @Inject + @AccountConfigurationValue(key = AccountConfigurationKey.BaseUrl) + private String baseUrl; + + @Inject + @AccountConfigurationValue(key = AccountConfigurationKey.PasswordResetUrl) + private String passwordResetUrl; + + // TODO make this configurable by injection from the application it uses it, fall back to defaul mail setup if not available + @Resource(lookup = "java:jboss/mail/ssgMail") + private Session mailSession; + + public String sendTestEmail(String recipient) throws MailException { + return sendMail(recipient, "Test email", "This is a test email"); + } + + public String sendTestHtmlEmail(String recipient) throws MailException { + Date now = new Date(); + AccountEntity account = new AccountEntity(); + account.setId (UUID.randomUUID()); + account.setFirstname("Jörn"); + account.setLastname ("Mühlencord"); + AccountLoginEntity accountLogin = new AccountLoginEntity(); + accountLogin.setAccountPassword("secret"); + accountLogin.setAccount(account); + account.setAccountLogin(accountLogin); + MailDatamodel dataModel = new MailDatamodel(account); + dataModel.addParameter("url", "http://url.de"); + dataModel.addParameter("resetUrl", "http://reseturl.de"); + return sendHTMLMail(recipient, "Test HTML Email", dataModel, "password_reset_html"); + } + + public String sendMail(String recipient, String subject, String body) throws MailException { + try { + MimeMessage message = new MimeMessage(mailSession); + message.setSubject(subject, "UTF-8"); + message.setFrom(); + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient, false)); + message.setText(body, "UTF-8"); + return transportMail(message); + } catch (MessagingException ex) { + throw new MailException("Error while sending email.", ex); + } + } + + public String sendHTMLMail(String recipient, String subject, MailDatamodel dataModel, String templateName) throws MailException { + return sendHTMLMail(recipient, subject, dataModel, templateName, null); + } + + public String sendHTMLMail(String recipient, String subject, MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName) throws MailException { + return sendHTMLMail(recipient, null, null, subject, dataModel, htmlTemplateName, plainTemplateName, "UTF-8", new ArrayList<>()); + } + + public String sendHTMLMail(String recipient, String ccRecipient, String bccRecipient, String subject, MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName) throws MailException { + return sendHTMLMail(recipient, ccRecipient, bccRecipient, subject, dataModel, htmlTemplateName, plainTemplateName, "UTF-8", new ArrayList<>()); + } + + public String sendHTMLMail(String recipient, String ccRecipient, String bccRecipient, String subject, + MailDatamodel dataModel, String htmlTemplateName, String plainTemplateName, String encoding, List attachments) throws MailException { + try { + MimeMessage message = new MimeMessage(mailSession); + message.setFrom(); // use default from + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient, false)); + if (ccRecipient != null) { + message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccRecipient, false)); + } + if (bccRecipient != null) { + message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccRecipient, false)); + } + + message.setSubject(subject, encoding); + + Multipart contentMultiPart = new MimeMultipart("alternative"); + + String htmlBody = mailTemplateService.getStringFromTemplate(htmlTemplateName, dataModel); + MimeBodyPart htmlBodyPart = new MimeBodyPart(); + htmlBodyPart.setContent(htmlBody, "text/html; charset=UTF-8"); + contentMultiPart.addBodyPart(htmlBodyPart); + + if (plainTemplateName != null) { + String plainBody = mailTemplateService.getStringFromTemplate(plainTemplateName, dataModel); + MimeBodyPart plainBodyPart = new MimeBodyPart(); + plainBodyPart.setText(plainBody, "UTF-8"); + contentMultiPart.addBodyPart(plainBodyPart); + } + + + if ((attachments == null) || (attachments.isEmpty())) { + message.setContent(contentMultiPart); + } else { + MimeBodyPart contentBodyPart = new MimeBodyPart(); + contentBodyPart.setContent(contentMultiPart); + + MimeMultipart messageMultipart = new MimeMultipart("related"); + messageMultipart.addBodyPart(contentBodyPart); + for (File attachment : attachments) { + try { + MimeBodyPart attachmentBodyPart = new MimeBodyPart(); + attachmentBodyPart.attachFile(attachment); + String contentType = Files.probeContentType(attachment.toPath()); + if (contentType != null) { + attachmentBodyPart.setHeader("Content-Type", contentType); + } + messageMultipart.addBodyPart(attachmentBodyPart); + } catch (IOException ex) { + throw new MailException("Cannot attach " + attachment.toString() + " to email. Reason: " + ex.toString(), ex); + } + } + + message.setContent (messageMultipart); + } + + return transportMail(message); + } catch (MessagingException | MailTemplateException ex) { + throw new MailException("Error while sending email.", ex); + } + } + + public String sendPasswortResetStartEmail(AccountEntity account, String token) throws MailException { + MailDatamodel model = new MailDatamodel(account); + + /* old aproach via FacesContext - add this back as fallback if injection point if not configured + try { + // String absoluteWebPath = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath(); + ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); + String resetPage = "/login.xhtml?token=" + token; + URL baseUrl; + + // TODO move out of this class, this is not mandatorily connected to a form + baseUrl = new URL(externalContext.getRequestScheme(), + externalContext.getRequestServerName(), + externalContext.getRequestServerPort(), + externalContext.getRequestContextPath()); + model.addParameter("url", baseUrl.toString()); + model.addParameter("resetUrl", baseUrl.toString() + resetPage); + } catch (MalformedURLException ex) { + throw new MailException("Error while sending email.", ex); + } + String baseUrl = configService.getConfigValue(configKey); + String resetUrlWithToken = baseUrl + "/login.xhtml?token=" + token; + */ + String resetUrlWithToken = passwordResetUrl + "?token=" + token; + model.addParameter("url", baseUrl); + model.addParameter("resetUrl", resetUrlWithToken); + return sendHTMLMail(account.getEmailaddress(), "Reset your password", model, "password_reset_html"); + } + + private String transportMail(Message message) throws MessagingException { + message.setSentDate(new Date()); + Transport.send(message); + String messageId = message.getHeader("Message-ID")[0]; + LOGGER.info("Mail sent to {}, messageid = {}", message.getAllRecipients()[0].toString(), messageId); + return messageId; + + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java index 891cb63..5458e3e 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/boundary/MailTemplateService.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.boundary; import de.muehlencord.shared.account.business.mail.entity.MailDatamodel; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailDatamodel.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailDatamodel.java index 96d368c..609ed1d 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailDatamodel.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailDatamodel.java @@ -1,40 +1,55 @@ -package de.muehlencord.shared.account.business.mail.entity; - -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import java.util.HashMap; -import java.util.Map; - -/** - * - * @author jomu - */ -public class MailDatamodel { - - private final AccountEntity account; - private final Map parameter; - - public MailDatamodel() { - this.account = null; - this.parameter = new HashMap<>(); - } - - public MailDatamodel(AccountEntity account) { - this.parameter = new HashMap<>(); - this.account = account; - } - - public void addParameter(String name, Object value) { - this.parameter.put(name, value); - } - - - /* **** getter / setter **** */ - - public AccountEntity getAccount() { - return account; - } - - public Map getParameter() { - return parameter; - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.entity; + +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author jomu + */ +public class MailDatamodel { + + private final AccountEntity account; + private final Map parameter; + + public MailDatamodel() { + this.account = null; + this.parameter = new HashMap<>(); + } + + public MailDatamodel(AccountEntity account) { + this.parameter = new HashMap<>(); + this.account = account; + } + + public void addParameter(String name, Object value) { + this.parameter.put(name, value); + } + + + /* **** getter / setter **** */ + + public AccountEntity getAccount() { + return account; + } + + public Map getParameter() { + return parameter; + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailException.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailException.java index bc10f1c..d0ea59a 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailException.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailException.java @@ -1,36 +1,51 @@ -package de.muehlencord.shared.account.business.mail.entity; - -/** - * - * @author Raimund - */ -public class MailException extends Exception { - - /** - * Creates a new instance of MailException without detail - * message. - */ - public MailException() { - } - - /** - * Constructs an instance of MailException with the specified - * detail message. - * - * @param msg the detail message. - */ - public MailException(String msg) { - super(msg); - } - - /** - * Constructs an instance of MailException with the specified - * detail message. - * - * @param msg the detail message. - * @param th the root cause - */ - public MailException(String msg, Throwable th) { - super(msg, th); - } -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.entity; + +/** + * + * @author Raimund + */ +public class MailException extends Exception { + + /** + * Creates a new instance of MailException without detail + * message. + */ + public MailException() { + } + + /** + * Constructs an instance of MailException with the specified + * detail message. + * + * @param msg the detail message. + */ + public MailException(String msg) { + super(msg); + } + + /** + * Constructs an instance of MailException with the specified + * detail message. + * + * @param msg the detail message. + * @param th the root cause + */ + public MailException(String msg, Throwable th) { + super(msg, th); + } +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateEntity.java index 16b6949..fffb08b 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateEntity.java @@ -1,95 +1,110 @@ -package de.muehlencord.shared.account.business.mail.entity; - -import java.io.Serializable; -import javax.persistence.Basic; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; - -/** - * - * @author joern.muehlencord - */ -@Entity -@Table(name = "mail_template") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "MailTemplateEntity.findAll", query = "SELECT m FROM MailTemplateEntity m"), - @NamedQuery(name = "MailTemplateEntity.findByTemplateName", query = "SELECT m FROM MailTemplateEntity m WHERE m.templateName = :templateName"), - @NamedQuery(name = "MailTemplateEntity.findByTemplateValue", query = "SELECT m FROM MailTemplateEntity m WHERE m.templateValue = :templateValue")}) -public class MailTemplateEntity implements Serializable { - - private static final long serialVersionUID = 4527399247302581555L; - - @Id - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 40) - @Column(name = "template_name") - private String templateName; - @Basic(optional = false) - @NotNull - @Size(min = 1, max = 2147483647) - @Column(name = "template_value") - private String templateValue; - - public MailTemplateEntity() { - } - - public MailTemplateEntity(String templateName) { - this.templateName = templateName; - } - - public MailTemplateEntity(String templateName, String templateValue) { - this.templateName = templateName; - this.templateValue = templateValue; - } - - public String getTemplateName() { - return templateName; - } - - public void setTemplateName(String templateName) { - this.templateName = templateName; - } - - public String getTemplateValue() { - return templateValue; - } - - public void setTemplateValue(String templateValue) { - this.templateValue = templateValue; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (templateName != null ? templateName.hashCode() : 0); - return hash; - } - - @Override - public boolean equals(Object object) { - // TODO: Warning - this method won't work in the case the id fields are not set - if (!(object instanceof MailTemplateEntity)) { - return false; - } - MailTemplateEntity other = (MailTemplateEntity) object; - if ((this.templateName == null && other.templateName != null) || (this.templateName != null && !this.templateName.equals(other.templateName))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "de.muehlencord.shared.account.entity.MailTemplate[ templateName=" + templateName + " ]"; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.entity; + +import java.io.Serializable; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * + * @author joern.muehlencord + */ +@Entity +@Table(name = "mail_template") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "MailTemplateEntity.findAll", query = "SELECT m FROM MailTemplateEntity m"), + @NamedQuery(name = "MailTemplateEntity.findByTemplateName", query = "SELECT m FROM MailTemplateEntity m WHERE m.templateName = :templateName"), + @NamedQuery(name = "MailTemplateEntity.findByTemplateValue", query = "SELECT m FROM MailTemplateEntity m WHERE m.templateValue = :templateValue")}) +public class MailTemplateEntity implements Serializable { + + private static final long serialVersionUID = 4527399247302581555L; + + @Id + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 40) + @Column(name = "template_name") + private String templateName; + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 2147483647) + @Column(name = "template_value") + private String templateValue; + + public MailTemplateEntity() { + } + + public MailTemplateEntity(String templateName) { + this.templateName = templateName; + } + + public MailTemplateEntity(String templateName, String templateValue) { + this.templateName = templateName; + this.templateValue = templateValue; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getTemplateValue() { + return templateValue; + } + + public void setTemplateValue(String templateValue) { + this.templateValue = templateValue; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (templateName != null ? templateName.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof MailTemplateEntity)) { + return false; + } + MailTemplateEntity other = (MailTemplateEntity) object; + if ((this.templateName == null && other.templateName != null) || (this.templateName != null && !this.templateName.equals(other.templateName))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "de.muehlencord.shared.account.entity.MailTemplate[ templateName=" + templateName + " ]"; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateException.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateException.java index c6b68aa..cde67d8 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateException.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/entity/MailTemplateException.java @@ -1,37 +1,52 @@ -package de.muehlencord.shared.account.business.mail.entity; - -/** - * - * @author jomu - */ -public class MailTemplateException extends Exception { - - /** - * Creates a new instance of MailTemplateException without - * detail message. - */ - public MailTemplateException() { - } - - /** - * Constructs an instance of MailTemplateException with the - * specified detail message. - * - * @param msg the detail message. - */ - public MailTemplateException(String msg) { - super(msg); - } - - /** - * Constructs an instance of MailTemplateException with the - * specified detail message. - * - * @param msg the detail message. - * @param th the root cause - */ - public MailTemplateException(String msg, Throwable th) { - super(msg, th); - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.mail.entity; + +/** + * + * @author jomu + */ +public class MailTemplateException extends Exception { + + /** + * Creates a new instance of MailTemplateException without + * detail message. + */ + public MailTemplateException() { + } + + /** + * Constructs an instance of MailTemplateException with the + * specified detail message. + * + * @param msg the detail message. + */ + public MailTemplateException(String msg) { + super(msg); + } + + /** + * Constructs an instance of MailTemplateException with the + * specified detail message. + * + * @param msg the detail message. + * @param th the root cause + */ + public MailTemplateException(String msg, Throwable th) { + super(msg, th); + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/presentation/LoginView.java b/account/src/main/java/de/muehlencord/shared/account/presentation/LoginView.java index dcd7856..e97bdbb 100644 --- a/account/src/main/java/de/muehlencord/shared/account/presentation/LoginView.java +++ b/account/src/main/java/de/muehlencord/shared/account/presentation/LoginView.java @@ -1,185 +1,200 @@ -package de.muehlencord.shared.account.presentation; - -import de.muehlencord.shared.account.business.account.control.AccountControl; -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.jeeutil.FacesUtil; -import java.io.IOException; -import java.io.Serializable; -import javax.ejb.EJB; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.view.ViewScoped; -import javax.inject.Named; -import javax.naming.NamingException; - -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import org.apache.shiro.subject.Subject; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.web.util.WebUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author joern.muehlencord - */ -@Named(value = "loginView") -@ViewScoped -public class LoginView implements Serializable { - - private static final long serialVersionUID = -1164860380769648432L; - - @EJB - private AccountControl accountService; - - private String username = null; - private String password = null; - private boolean rememberMe = false; - - private String resetPasswordToken = null; - - private static final Logger LOGGER = LoggerFactory.getLogger(LoginView.class.getName()); - - public void authenticate() { - - // Example using most common scenario of username/password pair: - UsernamePasswordToken token = new UsernamePasswordToken(getUsername(), getPassword()); - - // "Remember Me" built-in: - token.setRememberMe(rememberMe); - Subject currentUser = SecurityUtils.getSubject(); - LOGGER.info("Trying to login user {}", username); - - try { - currentUser.login(token); - LOGGER.info("User {} logged in", username); - // user logged in, update account entity - AccountEntity account = accountService.getAccountEntity(username, true); - accountService.updateLogin(account); - - // redirect to home - ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); - ServletResponse servletResponse = (ServletResponse) ec.getResponse(); - String fallbackUrl = "/web/index.xhtml"; // TODO make configurable - // ec.redirect(url); - if (LOGGER.isTraceEnabled()) { - LOGGER.trace("redirecting to {}, fallbackUrl={}", servletResponse.toString(), fallbackUrl); - } - - WebUtils.redirectToSavedRequest((ServletRequest) ec.getRequest(), servletResponse, fallbackUrl); - } catch (IOException | AuthenticationException ex) { - // Could catch a subclass of AuthenticationException if you like - String hint = "Error while authenticating user " + username; - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(hint, ex); - } - - if (ex.getMessage() != null) { - hint += "Reason: " + ex.getMessage(); - } else { - hint += "Reason: " + ex.toString(); - } - if ((ex.getCause() != null) && (ex.getCause().getMessage() != null)) { - hint += "Rootcause: " + ex.getMessage(); - - LOGGER.error(hint); - } - FacesUtil.addGlobalErrorMessage("Login failed", hint); - - AccountEntity account = accountService.getAccountEntity(username, false); - if (account != null) { - accountService.addLoginError(account); - } - } finally { - token.clear(); - } - } - - public void logout() { - Subject currentUser = SecurityUtils.getSubject(); - try { - currentUser.logout(); - - ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); - - // check if redirect shall be executed - // default setting is yes to /login.xhtml - // can be overwritten using parameters - // de.muehlencord.shared.account.loginview.executeredirect boolean true/false - // de.muehlencord.shared.account.loginview.redirecttarget path to redirect to (without external context, will be added automatically) - String executeRedirectString = ec.getInitParameter("de.muehlencord.shared.account.loginview.executeredirect"); - boolean executeRedirect = true; - if (executeRedirectString != null) { - executeRedirect = Boolean.parseBoolean(executeRedirectString); - } - - String redirectTarget = ec.getInitParameter("de.muehlencord.shared.account.loginview.redirecttarget"); - if ((redirectTarget == null) || (redirectTarget.equals(""))) { - redirectTarget = "/login.xhtml"; - } - - if (executeRedirect) { - String url = ec.getRequestContextPath() + redirectTarget; - ec.redirect(url); - } - - } catch (Exception e) { - LOGGER.warn(e.toString()); - } - } - - public String executePasswordReset() { - boolean passwordResetted = accountService.resetPassword(username, password, resetPasswordToken); - if (passwordResetted) { - // TODO add email notification on updated user account - FacesUtil.addGlobalInfoMessage("Password resetted", null); - return login(); - } else { - // TODO add email notificaton on failed password reset - FacesUtil.addGlobalErrorMessage("Password reset failed", null); - return login(); - } - } - - /* **** naviation rules **** */ - public String login() { - return "/login.xhtml"; // TODO make configurable - } - - /* *** getter / setter */ - public String getUsername() { - return username; - } - - public void setUsername(String un) { - this.username = un; - } - - public String getPassword() { - return password; - } - - public void setPassword(String pw) { - this.password = pw; - } - - public boolean isRememberMe() { - return rememberMe; - } - - public void setRememberMe(boolean rememberMe) { - this.rememberMe = rememberMe; - } - - public String getResetPasswordToken() { - return resetPasswordToken; - } - - public void setResetPasswordToken(String resetPasswordToken) { - this.resetPasswordToken = resetPasswordToken; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.presentation; + +import de.muehlencord.shared.account.business.account.control.AccountControl; +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import de.muehlencord.shared.jeeutil.FacesUtil; +import java.io.IOException; +import java.io.Serializable; +import javax.ejb.EJB; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; +import javax.faces.view.ViewScoped; +import javax.inject.Named; +import javax.naming.NamingException; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.web.util.WebUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author joern.muehlencord + */ +@Named(value = "loginView") +@ViewScoped +public class LoginView implements Serializable { + + private static final long serialVersionUID = -1164860380769648432L; + + @EJB + private AccountControl accountService; + + private String username = null; + private String password = null; + private boolean rememberMe = false; + + private String resetPasswordToken = null; + + private static final Logger LOGGER = LoggerFactory.getLogger(LoginView.class.getName()); + + public void authenticate() { + + // Example using most common scenario of username/password pair: + UsernamePasswordToken token = new UsernamePasswordToken(getUsername(), getPassword()); + + // "Remember Me" built-in: + token.setRememberMe(rememberMe); + Subject currentUser = SecurityUtils.getSubject(); + LOGGER.info("Trying to login user {}", username); + + try { + currentUser.login(token); + LOGGER.info("User {} logged in", username); + // user logged in, update account entity + AccountEntity account = accountService.getAccountEntity(username, true); + accountService.updateLogin(account); + + // redirect to home + ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); + ServletResponse servletResponse = (ServletResponse) ec.getResponse(); + String fallbackUrl = "/web/index.xhtml"; // TODO make configurable + // ec.redirect(url); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("redirecting to {}, fallbackUrl={}", servletResponse.toString(), fallbackUrl); + } + + WebUtils.redirectToSavedRequest((ServletRequest) ec.getRequest(), servletResponse, fallbackUrl); + } catch (IOException | AuthenticationException ex) { + // Could catch a subclass of AuthenticationException if you like + String hint = "Error while authenticating user " + username; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(hint, ex); + } + + if (ex.getMessage() != null) { + hint += "Reason: " + ex.getMessage(); + } else { + hint += "Reason: " + ex.toString(); + } + if ((ex.getCause() != null) && (ex.getCause().getMessage() != null)) { + hint += "Rootcause: " + ex.getMessage(); + + LOGGER.error(hint); + } + FacesUtil.addGlobalErrorMessage("Login failed", hint); + + AccountEntity account = accountService.getAccountEntity(username, false); + if (account != null) { + accountService.addLoginError(account); + } + } finally { + token.clear(); + } + } + + public void logout() { + Subject currentUser = SecurityUtils.getSubject(); + try { + currentUser.logout(); + + ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); + + // check if redirect shall be executed + // default setting is yes to /login.xhtml + // can be overwritten using parameters + // de.muehlencord.shared.account.loginview.executeredirect boolean true/false + // de.muehlencord.shared.account.loginview.redirecttarget path to redirect to (without external context, will be added automatically) + String executeRedirectString = ec.getInitParameter("de.muehlencord.shared.account.loginview.executeredirect"); + boolean executeRedirect = true; + if (executeRedirectString != null) { + executeRedirect = Boolean.parseBoolean(executeRedirectString); + } + + String redirectTarget = ec.getInitParameter("de.muehlencord.shared.account.loginview.redirecttarget"); + if ((redirectTarget == null) || (redirectTarget.equals(""))) { + redirectTarget = "/login.xhtml"; + } + + if (executeRedirect) { + String url = ec.getRequestContextPath() + redirectTarget; + ec.redirect(url); + } + + } catch (Exception e) { + LOGGER.warn(e.toString()); + } + } + + public String executePasswordReset() { + boolean passwordResetted = accountService.resetPassword(username, password, resetPasswordToken); + if (passwordResetted) { + // TODO add email notification on updated user account + FacesUtil.addGlobalInfoMessage("Password resetted", null); + return login(); + } else { + // TODO add email notificaton on failed password reset + FacesUtil.addGlobalErrorMessage("Password reset failed", null); + return login(); + } + } + + /* **** naviation rules **** */ + public String login() { + return "/login.xhtml"; // TODO make configurable + } + + /* *** getter / setter */ + public String getUsername() { + return username; + } + + public void setUsername(String un) { + this.username = un; + } + + public String getPassword() { + return password; + } + + public void setPassword(String pw) { + this.password = pw; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + public String getResetPasswordToken() { + return resetPasswordToken; + } + + public void setResetPasswordToken(String resetPasswordToken) { + this.resetPasswordToken = resetPasswordToken; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/presentation/LostPasswordView.java b/account/src/main/java/de/muehlencord/shared/account/presentation/LostPasswordView.java index b6168b6..a74162f 100644 --- a/account/src/main/java/de/muehlencord/shared/account/presentation/LostPasswordView.java +++ b/account/src/main/java/de/muehlencord/shared/account/presentation/LostPasswordView.java @@ -1,48 +1,63 @@ -package de.muehlencord.shared.account.presentation; - -import de.muehlencord.shared.account.business.account.control.AccountControl; -import de.muehlencord.shared.jeeutil.FacesUtil; -import java.io.Serializable; -import javax.ejb.EJB; -import javax.faces.view.ViewScoped; -import javax.inject.Named; - -/** - * - * @author joern@muehlencord.de - */ -@Named (value = "lostPasswordView") -@ViewScoped -public class LostPasswordView implements Serializable { - - private static final long serialVersionUID = -1793445795465830069L; - - @EJB - private AccountControl accountService; - - private String userName; - private boolean passwordResetStarted = false; - - public String initPasswordReset() { - if (accountService.initPasswordReset(userName)) { - passwordResetStarted = true; - FacesUtil.addGlobalInfoMessage("Password reset started.", "Please check your email account."); - } else { - FacesUtil.addGlobalErrorMessage("Error while resetting password.", "Please contact your administrator."); - } - return "/login.xhtml"; // TODO make configurable, get from LoginView? - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public boolean getPasswordResetStarted() { - return passwordResetStarted; - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.presentation; + +import de.muehlencord.shared.account.business.account.control.AccountControl; +import de.muehlencord.shared.jeeutil.FacesUtil; +import java.io.Serializable; +import javax.ejb.EJB; +import javax.faces.view.ViewScoped; +import javax.inject.Named; + +/** + * + * @author joern@muehlencord.de + */ +@Named (value = "lostPasswordView") +@ViewScoped +public class LostPasswordView implements Serializable { + + private static final long serialVersionUID = -1793445795465830069L; + + @EJB + private AccountControl accountService; + + private String userName; + private boolean passwordResetStarted = false; + + public String initPasswordReset() { + if (accountService.initPasswordReset(userName)) { + passwordResetStarted = true; + FacesUtil.addGlobalInfoMessage("Password reset started.", "Please check your email account."); + } else { + FacesUtil.addGlobalErrorMessage("Error while resetting password.", "Please contact your administrator."); + } + return "/login.xhtml"; // TODO make configurable, get from LoginView? + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public boolean getPasswordResetStarted() { + return passwordResetStarted; + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/shiro/authc/JwtMatcher.java b/account/src/main/java/de/muehlencord/shared/account/shiro/authc/JwtMatcher.java index ffbb432..20277bb 100644 --- a/account/src/main/java/de/muehlencord/shared/account/shiro/authc/JwtMatcher.java +++ b/account/src/main/java/de/muehlencord/shared/account/shiro/authc/JwtMatcher.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.authc; diff --git a/account/src/main/java/de/muehlencord/shared/account/shiro/filter/JWTAuthenticationFilter.java b/account/src/main/java/de/muehlencord/shared/account/shiro/filter/JWTAuthenticationFilter.java index 28a5de7..f26157b 100644 --- a/account/src/main/java/de/muehlencord/shared/account/shiro/filter/JWTAuthenticationFilter.java +++ b/account/src/main/java/de/muehlencord/shared/account/shiro/filter/JWTAuthenticationFilter.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.filter; import de.muehlencord.shared.account.business.account.boundary.ApiKeyService; diff --git a/account/src/main/java/de/muehlencord/shared/account/shiro/realm/AccountRealm.java b/account/src/main/java/de/muehlencord/shared/account/shiro/realm/AccountRealm.java index 40bdb85..43d1b4b 100644 --- a/account/src/main/java/de/muehlencord/shared/account/shiro/realm/AccountRealm.java +++ b/account/src/main/java/de/muehlencord/shared/account/shiro/realm/AccountRealm.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.realm; import de.muehlencord.shared.account.shiro.authc.JwtMatcher; diff --git a/account/src/main/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealm.java b/account/src/main/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealm.java index f2f825e..5f49770 100644 --- a/account/src/main/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealm.java +++ b/account/src/main/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealm.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.realm; import java.util.HashSet; diff --git a/account/src/main/java/de/muehlencord/shared/account/shiro/token/JWTAuthenticationToken.java b/account/src/main/java/de/muehlencord/shared/account/shiro/token/JWTAuthenticationToken.java index 60faed7..a305718 100644 --- a/account/src/main/java/de/muehlencord/shared/account/shiro/token/JWTAuthenticationToken.java +++ b/account/src/main/java/de/muehlencord/shared/account/shiro/token/JWTAuthenticationToken.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.token; diff --git a/account/src/main/java/de/muehlencord/shared/account/util/AccountPU.java b/account/src/main/java/de/muehlencord/shared/account/util/AccountPU.java index e298731..58871dc 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/AccountPU.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/AccountPU.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; diff --git a/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityException.java b/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityException.java index e3a60e7..fec89d4 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityException.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityException.java @@ -1,44 +1,54 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.util; - -import java.io.Serializable; -import java.util.Locale; -import java.util.ResourceBundle; - -/** - * - * @author Joern Muehlencord - */ -public class AccountSecurityException extends Exception implements Serializable { - - private static final long serialVersionUID = 8135850463689587815L; - - private final SecurityError securityError; - - public AccountSecurityException(SecurityError securityError) { - this.securityError = securityError; - } - - public String getErrorCode() { - return securityError.getErrorCode(); - } - - public String getMessageKey() { - return securityError.getMessageKey(); - } - - public String getMessage() { - ResourceBundle resourceBundle = ResourceBundle.getBundle(securityError.getClass().getName(), Locale.ENGLISH); - return resourceBundle.getString(securityError.getMessageKey()); - } - - public String getLocalizedMessage(Locale locale) { - ResourceBundle resourceBundle = ResourceBundle.getBundle(securityError.getClass().getName(), locale); - return resourceBundle.getString(securityError.getMessageKey()); - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; + +import java.io.Serializable; +import java.util.Locale; +import java.util.ResourceBundle; + +/** + * + * @author Joern Muehlencord + */ +public class AccountSecurityException extends Exception implements Serializable { + + private static final long serialVersionUID = 8135850463689587815L; + + private final SecurityError securityError; + + public AccountSecurityException(SecurityError securityError) { + this.securityError = securityError; + } + + public String getErrorCode() { + return securityError.getErrorCode(); + } + + public String getMessageKey() { + return securityError.getMessageKey(); + } + + public String getMessage() { + ResourceBundle resourceBundle = ResourceBundle.getBundle(securityError.getClass().getName(), Locale.ENGLISH); + return resourceBundle.getString(securityError.getMessageKey()); + } + + public String getLocalizedMessage(Locale locale) { + ResourceBundle resourceBundle = ResourceBundle.getBundle(securityError.getClass().getName(), locale); + return resourceBundle.getString(securityError.getMessageKey()); + } + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityExceptionMapper.java b/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityExceptionMapper.java index 37467b3..df65b35 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityExceptionMapper.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/AccountSecurityExceptionMapper.java @@ -1,7 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; diff --git a/account/src/main/java/de/muehlencord/shared/account/util/Permission.java b/account/src/main/java/de/muehlencord/shared/account/util/Permission.java index c2501e6..e563e03 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/Permission.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/Permission.java @@ -1,13 +1,28 @@ -package de.muehlencord.shared.account.util; - -/** - * - * @author Joern Muehlencord - */ -public interface Permission { - - String getName(); - String getDescription(); - - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; + +/** + * + * @author Joern Muehlencord + */ +public interface Permission { + + String getName(); + String getDescription(); + + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/util/SecurityError.java b/account/src/main/java/de/muehlencord/shared/account/util/SecurityError.java index 51415cd..5451318 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/SecurityError.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/SecurityError.java @@ -1,12 +1,27 @@ -package de.muehlencord.shared.account.util; - -/** - * - * @author Joern Muehlencord - */ -public interface SecurityError { - - String getErrorCode(); - String getMessageKey(); - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; + +/** + * + * @author Joern Muehlencord + */ +public interface SecurityError { + + String getErrorCode(); + String getMessageKey(); + +} diff --git a/account/src/main/java/de/muehlencord/shared/account/util/SecurityUtil.java b/account/src/main/java/de/muehlencord/shared/account/util/SecurityUtil.java index 5c9ec56..1d188d1 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/SecurityUtil.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/SecurityUtil.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; import org.apache.shiro.SecurityUtils; diff --git a/account/src/main/java/de/muehlencord/shared/account/util/TransactionJoinInterceptor.java b/account/src/main/java/de/muehlencord/shared/account/util/TransactionJoinInterceptor.java index ddd376b..fbd6453 100644 --- a/account/src/main/java/de/muehlencord/shared/account/util/TransactionJoinInterceptor.java +++ b/account/src/main/java/de/muehlencord/shared/account/util/TransactionJoinInterceptor.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; import javax.annotation.Priority; diff --git a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.properties b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.properties index 6e61888..5cb1cb9 100644 --- a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.properties +++ b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError.properties @@ -1,5 +1,16 @@ -# To change this license header, choose License Headers in Project Properties. -# To change this template file, choose Tools | Templates -# and open the template in the editor. - +# +# Copyright 2018 joern.muehlencord. +# +# 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. +# listall_denied=You are not allowed to list all applications diff --git a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_de_DE.properties b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_de_DE.properties index c4a81a0..81d8f4e 100644 --- a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_de_DE.properties +++ b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_de_DE.properties @@ -1,5 +1,16 @@ -# To change this license header, choose License Headers in Project Properties. -# To change this template file, choose Tools | Templates -# and open the template in the editor. - +# +# Copyright 2018 joern.muehlencord. +# +# 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. +# listall_denied=Sie haben nicht die n\u00f6tige Rechte alle Applikationen aufzulisten diff --git a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_en_US.properties b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_en_US.properties index baa311f..9b85c69 100644 --- a/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_en_US.properties +++ b/account/src/main/resources/de/muehlencord/shared/account/business/application/boundary/ApplicationServiceError_en_US.properties @@ -1,5 +1,16 @@ -# To change this license header, choose License Headers in Project Properties. -# To change this template file, choose Tools | Templates -# and open the template in the editor. - +# +# Copyright 2018 joern.muehlencord. +# +# 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. +# listall_denied=User not allowed to list all applications diff --git a/account/src/test/java/de/muehlencord/shared/account/business/config/boundary/ConfigServiceTest.java b/account/src/test/java/de/muehlencord/shared/account/business/config/boundary/ConfigServiceTest.java index eb2fb24..c8846ef 100644 --- a/account/src/test/java/de/muehlencord/shared/account/business/config/boundary/ConfigServiceTest.java +++ b/account/src/test/java/de/muehlencord/shared/account/business/config/boundary/ConfigServiceTest.java @@ -1,62 +1,76 @@ - -package de.muehlencord.shared.account.business.config.boundary; - -import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.account.business.account.entity.AccountLoginEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.business.config.entity.ConfigEntity; -import de.muehlencord.shared.account.business.config.entity.ConfigEntityPK; -import java.util.UUID; -import javax.persistence.EntityManager; -import org.junit.Test; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import static org.mockito.Mockito.when; -import org.mockito.runners.MockitoJUnitRunner; - -/** - * - * @author joern.muehlencord - */ -@RunWith(MockitoJUnitRunner.class) -public class ConfigServiceTest { - - @InjectMocks - private ConfigService configService; - - @Mock - private EntityManager entityManagerMock; - - @Before - public void init() { - ApplicationEntity application = new ApplicationEntity(); - application.setId(UUID.randomUUID()); - application.setApplicationName("Test App"); - - AccountEntity account = new AccountEntity(); - account.setUsername("system"); - AccountLoginEntity login = new AccountLoginEntity(); - login.setAccount (account); - account.setAccountLogin(login); - - ConfigEntityPK pk = new ConfigEntityPK(application, "account.maxFailedLogins", account); - ConfigEntity configEntity = new ConfigEntity (pk); - configEntity.setConfigValue("7"); - when (entityManagerMock.find(ConfigEntity.class, "account.maxFailedLogins")).thenReturn (configEntity); - } - - @Test - @Ignore - // TODO move to account test - public void testGetMaxFailedLogins() { -// configService.init(); -// assertEquals ("maxFailedLogins", 7, configService.getMaxFailedLogins()); - } - - - - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.business.config.boundary; + +import de.muehlencord.shared.account.business.account.entity.AccountEntity; +import de.muehlencord.shared.account.business.account.entity.AccountLoginEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.business.config.entity.ConfigEntity; +import de.muehlencord.shared.account.business.config.entity.ConfigEntityPK; +import java.util.UUID; +import javax.persistence.EntityManager; +import org.junit.Test; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import static org.mockito.Mockito.when; +import org.mockito.runners.MockitoJUnitRunner; + +/** + * + * @author joern.muehlencord + */ +@RunWith(MockitoJUnitRunner.class) +public class ConfigServiceTest { + + @InjectMocks + private ConfigService configService; + + @Mock + private EntityManager entityManagerMock; + + @Before + public void init() { + ApplicationEntity application = new ApplicationEntity(); + application.setId(UUID.randomUUID()); + application.setApplicationName("Test App"); + + AccountEntity account = new AccountEntity(); + account.setUsername("system"); + AccountLoginEntity login = new AccountLoginEntity(); + login.setAccount (account); + account.setAccountLogin(login); + + ConfigEntityPK pk = new ConfigEntityPK(application, "account.maxFailedLogins", account); + ConfigEntity configEntity = new ConfigEntity (pk); + configEntity.setConfigValue("7"); + when (entityManagerMock.find(ConfigEntity.class, "account.maxFailedLogins")).thenReturn (configEntity); + } + + @Test + @Ignore + // TODO move to account test + public void testGetMaxFailedLogins() { +// configService.init(); +// assertEquals ("maxFailedLogins", 7, configService.getMaxFailedLogins()); + } + + + + +} diff --git a/account/src/test/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealmTest.java b/account/src/test/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealmTest.java index 3a8064b..dabce68 100644 --- a/account/src/test/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealmTest.java +++ b/account/src/test/java/de/muehlencord/shared/account/shiro/realm/UserNameActiveDirectoryRealmTest.java @@ -1,3 +1,18 @@ +/* + * Copyright 2018 joern.muehlencord. + * + * 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.shiro.realm; import org.apache.shiro.SecurityUtils; diff --git a/account/src/test/java/de/muehlencord/shared/account/util/SecurityUtilTest.java b/account/src/test/java/de/muehlencord/shared/account/util/SecurityUtilTest.java index f699a85..546de73 100644 --- a/account/src/test/java/de/muehlencord/shared/account/util/SecurityUtilTest.java +++ b/account/src/test/java/de/muehlencord/shared/account/util/SecurityUtilTest.java @@ -1,22 +1,32 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.util; - -import org.junit.Test; - -/** - * - * @author Joern Muehlencord - */ -public class SecurityUtilTest { - - - @Test - public void testCreatePassword() { - System.out.println (SecurityUtil.createPassword("secret")); - } - -} +/* + * Copyright 2018 joern.muehlencord. + * + * 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.util; + +import org.junit.Test; + +/** + * + * @author Joern Muehlencord + */ +public class SecurityUtilTest { + + + @Test + public void testCreatePassword() { + System.out.println (SecurityUtil.createPassword("secret")); + } + +}