package org.apereo.cas.trusted.authentication.api; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import java.time.LocalDate; /** * This is {@link MultifactorAuthenticationTrustRecord}. * * @author Misagh Moayyed * @since 5.0.0 */ @Entity @Table(name = "MultifactorAuthenticationTrustRecord") @JsonIgnoreProperties(ignoreUnknown = true) public class MultifactorAuthenticationTrustRecord implements Comparable<MultifactorAuthenticationTrustRecord> { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id = Integer.MAX_VALUE; @Column(length = 255, updatable = true, insertable = true, nullable = false) private String principal; @Column(length = 255, updatable = true, insertable = true, nullable = false) private String geography; @Column(nullable = false, columnDefinition = "TIMESTAMP") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private LocalDate date; @Column(length = 255, updatable = true, insertable = true, nullable = false) private String key; @Column(length = 255, updatable = true, insertable = true, nullable = false) private String name; public String getKey() { return key; } public void setKey(final String id) { this.key = id; } public String getPrincipal() { return principal; } public void setPrincipal(final String principal) { this.principal = principal; } public String getGeography() { return geography; } public void setGeography(final String geography) { this.geography = geography; } public LocalDate getDate() { return date; } public void setDate(final LocalDate date) { this.date = date; } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } final MultifactorAuthenticationTrustRecord rhs = (MultifactorAuthenticationTrustRecord) obj; return new EqualsBuilder() .append(this.principal, rhs.principal) .append(this.geography, rhs.geography) .append(this.date, rhs.date) .append(this.key, rhs.key) .append(this.name, rhs.name) .isEquals(); } public String getName() { return name; } public void setName(final String name) { this.name = name; } @Override public int hashCode() { return new HashCodeBuilder() .append(principal) .append(geography) .append(date) .append(key) .append(name) .toHashCode(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.NO_CLASS_NAME_STYLE) .append("principal", principal) .append("geography", geography) .append("date", date) .append("name", name) .toString(); } /** * New instance of authentication trust record. * * @param principal the principal * @param geography the geography * @return the authentication trust record */ public static MultifactorAuthenticationTrustRecord newInstance(final String principal, final String geography) { final MultifactorAuthenticationTrustRecord r = new MultifactorAuthenticationTrustRecord(); r.setDate(LocalDate.now()); r.setPrincipal(principal); r.setGeography(geography); r.setName(principal.concat("-").concat(LocalDate.now().toString()).concat("-").concat(geography)); return r; } @Override public int compareTo(final MultifactorAuthenticationTrustRecord o) { return this.date.compareTo(o.getDate()); } }