Skip to content

Commit da2334d

Browse files
authored
[ENG-10294] Enable SSO for hidden availability institutions in shortcut mode (#108)
* Add shortcut SSO mode that show hidden availability institutions * Simplify shortcut SSO mode check * Update comments and JavaDoc * Improve logging
1 parent 6ec9f20 commit da2334d

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

src/main/java/io/cos/cas/osf/authentication/support/OsfInstitutionUtils.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ public final class OsfInstitutionUtils {
2626

2727
public static boolean validateInstitutionForLogin(final JpaOsfDao jpaOsfDao, final String id) {
2828
final OsfInstitution institution = jpaOsfDao.findOneInstitutionById(id);
29-
return institution != null && institution.getDelegationProtocol() != null;
29+
return institution != null
30+
&& institution.getDelegationProtocol() != null
31+
&& institution.getSsoAvailability() != SsoAvailability.UNAVAILABLE;
3032
}
3133

3234
public static String getInstitutionSupportEmail(final JpaOsfDao jpaOsfDao, final String id) {
@@ -37,15 +39,18 @@ public static String getInstitutionSupportEmail(final JpaOsfDao jpaOsfDao, final
3739
public static Map<String, String> getInstitutionLoginUrlMap(
3840
final JpaOsfDao jpaOsfDao,
3941
final String target,
40-
final String id
42+
final String institutionId
4143
) {
4244
List<OsfInstitution> institutionList = new LinkedList<>();
43-
if (id == null || id.isEmpty()) {
45+
boolean isShortcutSso = false;
46+
if (institutionId == null || institutionId.isEmpty()) {
4447
institutionList = jpaOsfDao.findAllInstitutions();
4548
} else {
46-
final OsfInstitution institution = jpaOsfDao.findOneInstitutionById(id);
49+
final OsfInstitution institution = jpaOsfDao.findOneInstitutionById(institutionId);
4750
if (institution != null) {
51+
// Must be a valid institution to trigger the shortcut SSO mode
4852
institutionList.add(institution);
53+
isShortcutSso = true;
4954
} else {
5055
institutionList = jpaOsfDao.findAllInstitutions();
5156
}
@@ -57,15 +62,22 @@ public static Map<String, String> getInstitutionLoginUrlMap(
5762
// Catch a rare exception case where OSF DB has changed the choices of the field
5863
// `sso_availability` in table `osf_institution` without syncing with CAS.
5964
LOGGER.error(
60-
"Skipped due to invalid SSO Availability: [institutionId={}]",
65+
"Skip instn with invalid SSO avail: [instnId={}]",
6166
institution.getInstitutionId()
6267
);
6368
continue;
6469
}
65-
if (!ssoAvailability.isPublic()) {
66-
// Hide institutions of which SSO Availability is not Public
70+
if (isShortcutSso && ssoAvailability.isHidden()) {
71+
// Show institutions of hidden SSO Availability in shortcut mode
6772
LOGGER.debug(
68-
"Skipped because SSO Availability is not public: [institutionId={}, ssoAvailability={}]",
73+
"Show instn with hidden SSO avail in shortcut mode: [instnId={}, avail={}]",
74+
institution.getInstitutionId(),
75+
ssoAvailability.getId()
76+
);
77+
} else if (!ssoAvailability.isPublic()) {
78+
// Hide institutions of non-public SSO Availability
79+
LOGGER.debug(
80+
"Skip instn with non-public SSO avail: [instnId={}, avail={}]",
6981
institution.getInstitutionId(),
7082
ssoAvailability.getId()
7183
);

src/main/java/io/cos/cas/osf/authentication/support/SsoAvailability.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ public boolean isPublic () {
4848
return SsoAvailability.PUBLIC.equals(this);
4949
}
5050

51+
/**
52+
* @return whether the enum type is {@link SsoAvailability#HIDDEN}.
53+
*/
54+
public boolean isHidden () {
55+
return SsoAvailability.HIDDEN.equals(this);
56+
}
57+
58+
/**
59+
* @return the enum type string
60+
*/
5161
public final String getId() {
5262
return id;
5363
}

0 commit comments

Comments
 (0)