package edu.harvard.iq.dataverse.confirmemail; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import java.io.Serializable; import java.sql.Timestamp; import java.util.Date; import java.util.UUID; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; import javax.persistence.Table; /** * * @author bsilverstein */ @Table(indexes = { @Index(columnList = "token"), @Index(columnList = "authenticateduser_id")}) @NamedQueries({ @NamedQuery(name = "ConfirmEmailData.findAll", query = "SELECT prd FROM ConfirmEmailData prd"), @NamedQuery(name = "ConfirmEmailData.findByUser", query = "SELECT prd FROM ConfirmEmailData prd WHERE prd.authenticatedUser = :user"), @NamedQuery(name = "ConfirmEmailData.findByToken", query = "SELECT prd FROM ConfirmEmailData prd WHERE prd.token = :token") }) @Entity public class ConfirmEmailData implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = true) private String token; @OneToOne @JoinColumn(nullable = false, unique = true) private AuthenticatedUser authenticatedUser; @Column(nullable = false) private Timestamp created; @Column(nullable = false) private Timestamp expires; public ConfirmEmailData(AuthenticatedUser anAuthenticatedUser, long minutesUntilConfirmEmailTokenExpires) { authenticatedUser = anAuthenticatedUser; token = UUID.randomUUID().toString(); long nowInMilliseconds = new Date().getTime(); created = new Timestamp(nowInMilliseconds); long ONE_MINUTE_IN_MILLISECONDS = 60000; long futureInMilliseconds = nowInMilliseconds + (minutesUntilConfirmEmailTokenExpires * ONE_MINUTE_IN_MILLISECONDS); expires = new Timestamp(new Date(futureInMilliseconds).getTime()); } public boolean isExpired() { if (this.expires == null) { return true; } long expiresInMilliseconds = this.expires.getTime(); long nowInMilliseconds = new Date().getTime(); return nowInMilliseconds > expiresInMilliseconds; } public String getToken() { return token; } public AuthenticatedUser getAuthenticatedUser() { return authenticatedUser; } public Timestamp getCreated() { return created; } public Timestamp getExpires() { return expires; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * This is only here because it has to be: "The class should have a no-arg, * public or protected constructor." Please use the constructor that takes * arguments. */ @Deprecated public ConfirmEmailData() { } }