Skip to content

Commit a12f7ec

Browse files
committed
Add shortcut SSO mode that show hidden availability institutions
1 parent 6ec9f20 commit a12f7ec

3 files changed

Lines changed: 21 additions & 8 deletions

File tree

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ 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 && institution.getDelegationProtocol() != null && institution.getSsoAvailability() != SsoAvailability.UNAVAILABLE;
3030
}
3131

3232
public static String getInstitutionSupportEmail(final JpaOsfDao jpaOsfDao, final String id) {
@@ -37,13 +37,14 @@ public static String getInstitutionSupportEmail(final JpaOsfDao jpaOsfDao, final
3737
public static Map<String, String> getInstitutionLoginUrlMap(
3838
final JpaOsfDao jpaOsfDao,
3939
final String target,
40-
final String id
40+
final String institutionId,
41+
boolean isShortcutSso
4142
) {
4243
List<OsfInstitution> institutionList = new LinkedList<>();
43-
if (id == null || id.isEmpty()) {
44+
if (institutionId == null || institutionId.isEmpty()) {
4445
institutionList = jpaOsfDao.findAllInstitutions();
4546
} else {
46-
final OsfInstitution institution = jpaOsfDao.findOneInstitutionById(id);
47+
final OsfInstitution institution = jpaOsfDao.findOneInstitutionById(institutionId);
4748
if (institution != null) {
4849
institutionList.add(institution);
4950
} else {
@@ -57,15 +58,21 @@ public static Map<String, String> getInstitutionLoginUrlMap(
5758
// Catch a rare exception case where OSF DB has changed the choices of the field
5859
// `sso_availability` in table `osf_institution` without syncing with CAS.
5960
LOGGER.error(
60-
"Skipped due to invalid SSO Availability: [institutionId={}]",
61+
"Skip invalid SSO availability: [institutionId={}]",
6162
institution.getInstitutionId()
6263
);
6364
continue;
6465
}
65-
if (!ssoAvailability.isPublic()) {
66+
if (isShortcutSso && ssoAvailability.isHidden()) {
67+
LOGGER.debug(
68+
"Show hidden SSO availability with shortcut URL: [institutionId={}, ssoAvailability={}]",
69+
institution.getInstitutionId(),
70+
ssoAvailability.getId()
71+
);
72+
} else if (!ssoAvailability.isPublic()) {
6673
// Hide institutions of which SSO Availability is not Public
6774
LOGGER.debug(
68-
"Skipped because SSO Availability is not public: [institutionId={}, ssoAvailability={}]",
75+
"Skip non-public SSO availability: [institutionId={}, ssoAvailability={}]",
6976
institution.getInstitutionId(),
7077
ssoAvailability.getId()
7178
);

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

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

51+
public boolean isHidden () {
52+
return SsoAvailability.HIDDEN.equals(this);
53+
}
54+
5155
public final String getId() {
5256
return id;
5357
}

src/main/java/io/cos/cas/osf/web/flow/login/OsfInstitutionLoginPreparationAction.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ protected Event doExecute(RequestContext context) {
7171
}
7272

7373
String institutionId = null;
74+
boolean isShortcutSsoMode = false;
7475
OsfCasLoginContext loginContext;
7576
loginContext = Optional.of(context).map(requestContext
7677
-> (OsfCasLoginContext) requestContext.getFlowScope().get(PARAMETER_LOGIN_CONTEXT)).orElse(null);
@@ -81,6 +82,7 @@ protected Event doExecute(RequestContext context) {
8182
context.getFlowScope().put(PARAMETER_LOGIN_CONTEXT, loginContext);
8283
institutionId = null;
8384
} else {
85+
isShortcutSsoMode = true;
8486
final String institutionSupportEmail = OsfInstitutionUtils.getInstitutionSupportEmail(jpaOsfDao, institutionId);
8587
if (institutionSupportEmail != null) {
8688
loginContext.setInstitutionSupportEmail(institutionSupportEmail);
@@ -89,7 +91,7 @@ protected Event doExecute(RequestContext context) {
8991
}
9092

9193
final Map<String, String> institutionLoginUrlMap
92-
= OsfInstitutionUtils.getInstitutionLoginUrlMap(jpaOsfDao, target, institutionId);
94+
= OsfInstitutionUtils.getInstitutionLoginUrlMap(jpaOsfDao, target, institutionId, isShortcutSsoMode);
9395
final Map<String, String> institutionLoginUrlMapSorted;
9496
if (institutionId != null) {
9597
institutionLoginUrlMapSorted = institutionLoginUrlMap;

0 commit comments

Comments
 (0)