package elw.dao; import com.google.common.base.Strings; import elw.vo.Admin; import elw.vo.Group; import elw.vo.Student; import org.codehaus.jackson.map.annotate.JsonSerialize; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Authentication state of any given session. */ @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class Auth { public static final String SESSION_KEY = "elw_auth"; public static final String MODEL_KEY = SESSION_KEY; private String sourceAddr; public String getSourceAddr() { return sourceAddr; } public void setSourceAddr(String sourceAddr) { this.sourceAddr = sourceAddr; } private List<String> verifiedOpenIds = new ArrayList<String>(1); public List<String> getVerifiedOpenIds() { return Collections.unmodifiableList(verifiedOpenIds); } public void setVerifiedOpenIds(List<String> verifiedOpenIds) { this.verifiedOpenIds.clear(); if (verifiedOpenIds != null) { this.verifiedOpenIds.addAll(verifiedOpenIds); } } private List<String> verifiedEmails = new ArrayList<String>(1); public List<String> getVerifiedEmails() { return Collections.unmodifiableList(verifiedEmails); } public void setVerifiedEmails(List<String> verifiedEmails) { this.verifiedEmails.clear(); if (verifiedEmails != null) { this.verifiedEmails.addAll(verifiedEmails); } } private Admin admin; public Admin getAdmin() { return admin; } public void setAdmin(Admin admin) { this.admin = admin; } private Student student; public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } private Group group; public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public boolean isAdm() { return admin != null; } public boolean isStud() { return student != null && group != null; } public boolean isVerified() { final boolean studentOnlyAuth = admin == null && student != null; //noinspection SimplifiableIfStatement if (studentOnlyAuth && isVerificationSetupEmpty(student)) { return true; } return !getVerifiedOpenIds().isEmpty() || !getVerifiedEmails().isEmpty(); } public static boolean isVerificationSetupEmpty(Student student) { return student.getOpenIds().isEmpty() && isEmailEmpty(student); } public static boolean isEmailEmpty(Student student) { // couple of silly placeholders made it into the couch, so... return Strings.isNullOrEmpty(student.getEmail()) || "1".equalsIgnoreCase(student.getEmail()) || "undef@in.ed".equalsIgnoreCase(student.getEmail()); } public boolean isEmpty() { return admin == null && (student == null || group == null); } public void renew(QueriesImpl queries) { this.admin = admin == null ? null : queries.adminSome(admin.getId()); this.group = group == null ? null : queries.group(group.getId()); this.student = isStud() ? group.getStudents().get(student.getId()) : null; } public String getId() { if (isAdm()) { return getAdmin().getId(); } return getGroup().getId() + "-" + getStudent().getId(); } public String getName() { if (isAdm()) { return getAdmin().getName(); } return getStudent().getName() + " " + getGroup().getName(); } }