@@ -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 );
0 commit comments