From 56480de101ad5893682ac858631bff8b21c62b64 Mon Sep 17 00:00:00 2001 From: Longze Chen Date: Mon, 23 Mar 2026 12:38:34 -0400 Subject: [PATCH 1/2] Add SsoAvailability enum and update institution model --- .../support/SsoAvailability.java | 47 +++++++++++++++++++ .../io/cos/cas/osf/model/OsfInstitution.java | 24 ++++++++-- 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java diff --git a/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java b/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java new file mode 100644 index 00000000..77c9a142 --- /dev/null +++ b/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java @@ -0,0 +1,47 @@ +package io.cos.cas.osf.authentication.support; + +/** + * This is {@link SsoAvailability}. + * + * @author Longze Chen + * @since 26.1.1 + */ +public enum SsoAvailability { + + /** + * The institution is active, has a delegation protocol, and its SSO setup has been verified. + * */ + PUBLIC("Public"), + /** + * The institution is either: 1) inactive and has a delegation protocol, + * or 2) active, has a delegation protocol but its SSO setup is in-progress. + */ + HIDDEN("Hidden"), + /** + * The institution does not have a delegation protocol (i.e. not eligible for SSO). + */ + UNAVAILABLE("Unavailable"); + + private final String id; + + SsoAvailability(final String id) { + this.id = id; + } + + public static SsoAvailability getType(final String id) throws IllegalArgumentException { + if (id == null) { + return null; + } + + for (final SsoAvailability type : SsoAvailability.values()) { + if (id.equals(type.getId())) { + return type; + } + } + throw new IllegalArgumentException("No matching type for id " + id); + } + + public final String getId() { + return id; + } +} diff --git a/src/main/java/io/cos/cas/osf/model/OsfInstitution.java b/src/main/java/io/cos/cas/osf/model/OsfInstitution.java index e57a1dcf..915386bf 100644 --- a/src/main/java/io/cos/cas/osf/model/OsfInstitution.java +++ b/src/main/java/io/cos/cas/osf/model/OsfInstitution.java @@ -1,6 +1,7 @@ package io.cos.cas.osf.model; import io.cos.cas.osf.authentication.support.DelegationProtocol; +import io.cos.cas.osf.authentication.support.SsoAvailability; import lombok.Getter; import lombok.NoArgsConstructor; @@ -14,7 +15,8 @@ import java.util.Date; /** - * This is {@link OsfInstitution}. + * This is {@link OsfInstitution}. It maps to a subset of columns in the OSF DB table {@code osf_instittuion}. + * This subset is required to support institution SSO for CAS and OSF. * * @author Longze Chen * @since 21.0.0 @@ -43,12 +45,15 @@ public class OsfInstitution extends AbstractOsfModel { @Column(name = "delegation_protocol") private String delegationProtocol; + /** + * Maps to column {@code sso_availability} of table {@code osf_instittuion} in OSF database. + */ + @Column(name = "sso_availability") + private String ssoAvailability; + @Column(name = "is_deleted") private Boolean deleted; - @Column(name = "sso_in_progress") - private Boolean ssoInProgress; - @Temporal(TemporalType.TIMESTAMP) @Column(name = "deactivated") private Date dateDeactivated; @@ -63,4 +68,15 @@ public DelegationProtocol getDelegationProtocol() { return null; } } + + /** + * @return the string value of the institution's SSO availability. + */ + public SsoAvailability getSsoAvailability() { + try { + return SsoAvailability.getType(ssoAvailability); + } catch (final IllegalArgumentException e) { + return null; + } + } } From b5a6773fa9be0b92add3af785f06dd00820ce0b5 Mon Sep 17 00:00:00 2001 From: Longze Chen Date: Mon, 23 Mar 2026 12:59:56 -0400 Subject: [PATCH 2/2] Fix JavaDoc and style --- .../cas/osf/authentication/support/SsoAvailability.java | 3 +-- src/main/java/io/cos/cas/osf/model/OsfInstitution.java | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java b/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java index 77c9a142..0c3d29de 100644 --- a/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java +++ b/src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java @@ -4,7 +4,7 @@ * This is {@link SsoAvailability}. * * @author Longze Chen - * @since 26.1.1 + * @since 26.1.0 */ public enum SsoAvailability { @@ -32,7 +32,6 @@ public static SsoAvailability getType(final String id) throws IllegalArgumentExc if (id == null) { return null; } - for (final SsoAvailability type : SsoAvailability.values()) { if (id.equals(type.getId())) { return type; diff --git a/src/main/java/io/cos/cas/osf/model/OsfInstitution.java b/src/main/java/io/cos/cas/osf/model/OsfInstitution.java index 915386bf..bf44ef95 100644 --- a/src/main/java/io/cos/cas/osf/model/OsfInstitution.java +++ b/src/main/java/io/cos/cas/osf/model/OsfInstitution.java @@ -42,6 +42,9 @@ public class OsfInstitution extends AbstractOsfModel { @Column(name = "logout_url") private String logoutUrl; + /** + * Maps to column {@code delegation_protocol} of table {@code osf_instittuion} in OSF database. + */ @Column(name = "delegation_protocol") private String delegationProtocol; @@ -61,6 +64,9 @@ public class OsfInstitution extends AbstractOsfModel { @Column(name = "support_email", nullable = false) private String supportEmail; + /** + * @return the institution's delegation protocol. + */ public DelegationProtocol getDelegationProtocol() { try { return DelegationProtocol.getType(delegationProtocol); @@ -70,7 +76,7 @@ public DelegationProtocol getDelegationProtocol() { } /** - * @return the string value of the institution's SSO availability. + * @return the institution's SSO Availability. */ public SsoAvailability getSsoAvailability() { try {