Skip to content
This repository was archived by the owner on Sep 28, 2022. It is now read-only.

Commit b4cd6a4

Browse files
author
Dominik Frantisek Bucik
committed
refactor: 💡 Got rid of PerunPrincipal class
1 parent 52e5c01 commit b4cd6a4

File tree

8 files changed

+38
-103
lines changed

8 files changed

+38
-103
lines changed

perun-oidc-server/src/main/java/cz/muni/ics/oauth2/service/impl/DefaultOAuth2AuthorizationCodeService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.security.oauth2.common.util.RandomValueStringGenerator;
3434
import org.springframework.security.oauth2.provider.OAuth2Authentication;
3535
import org.springframework.security.oauth2.provider.code.AuthorizationCodeServices;
36+
import org.springframework.security.providers.ExpiringUsernameAuthenticationToken;
3637
import org.springframework.stereotype.Service;
3738
import org.springframework.transaction.annotation.Transactional;
3839

perun-oidc-server/src/main/java/cz/muni/ics/oidc/saml/PerunSamlUserDetailsService.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cz.muni.ics.oidc.saml;
22

3-
import cz.muni.ics.oidc.server.PerunPrincipal;
43
import cz.muni.ics.oidc.server.adapters.PerunAdapter;
54
import cz.muni.ics.oidc.server.filters.FiltersUtils;
65
import lombok.extern.slf4j.Slf4j;
@@ -24,9 +23,7 @@ public PerunSamlUserDetailsService(PerunAdapter perunAdapter, SamlProperties sam
2423
@Override
2524
public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
2625
log.debug("Loading user for SAML credential");
27-
PerunPrincipal p = FiltersUtils.getPerunPrincipal(credential, samlProperties.getUserIdentifierAttribute());
28-
log.debug("Fetching user from perun ({})", p);
29-
return perunAdapter.getPreauthenticatedUserId(p);
26+
return FiltersUtils.getPerunUser(credential, perunAdapter, samlProperties.getUserIdentifierAttribute());
3027
}
3128

3229
}

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/PerunPrincipal.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/PerunAdapterMethods.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import cz.muni.ics.oidc.models.PerunUser;
77
import cz.muni.ics.oidc.models.Resource;
88
import cz.muni.ics.oidc.models.Vo;
9-
import cz.muni.ics.oidc.server.PerunPrincipal;
109
import cz.muni.ics.oidc.server.connectors.Affiliation;
1110
import java.util.Collection;
1211
import java.util.List;
@@ -26,10 +25,9 @@ public interface PerunAdapterMethods {
2625
/**
2726
* Fetch user based on his principal (extLogin and extSource) from Perun
2827
*
29-
* @param perunPrincipal principal of user
3028
* @return PerunUser with id of found user
3129
*/
32-
PerunUser getPreauthenticatedUserId(PerunPrincipal perunPrincipal);
30+
PerunUser getPreauthenticatedUserId(String extLogin, String extSourceName);
3331

3432
/**
3533
* Fetch user attribute values

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterImpl.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import cz.muni.ics.oidc.models.PerunUser;
77
import cz.muni.ics.oidc.models.Resource;
88
import cz.muni.ics.oidc.models.Vo;
9-
import cz.muni.ics.oidc.server.PerunPrincipal;
109
import cz.muni.ics.oidc.server.adapters.PerunAdapter;
1110
import cz.muni.ics.oidc.server.connectors.Affiliation;
1211
import java.util.Collection;
@@ -23,12 +22,12 @@
2322
public class PerunAdapterImpl extends PerunAdapter {
2423

2524
@Override
26-
public PerunUser getPreauthenticatedUserId(PerunPrincipal perunPrincipal) {
25+
public PerunUser getPreauthenticatedUserId(String extLogin, String extSourceName) {
2726
try {
28-
return this.getAdapterPrimary().getPreauthenticatedUserId(perunPrincipal);
27+
return this.getAdapterPrimary().getPreauthenticatedUserId(extLogin, extSourceName);
2928
} catch (UnsupportedOperationException e) {
3029
if (this.isCallFallback()) {
31-
return this.getAdapterFallback().getPreauthenticatedUserId(perunPrincipal);
30+
return this.getAdapterFallback().getPreauthenticatedUserId(extLogin, extSourceName);
3231
} else {
3332
throw e;
3433
}

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterLdap.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import cz.muni.ics.oidc.models.Vo;
4444
import cz.muni.ics.oidc.models.enums.PerunAttrValueType;
4545
import cz.muni.ics.oidc.models.enums.PerunEntityType;
46-
import cz.muni.ics.oidc.server.PerunPrincipal;
4746
import cz.muni.ics.oidc.server.adapters.PerunAdapter;
4847
import cz.muni.ics.oidc.server.adapters.PerunAdapterMethods;
4948
import cz.muni.ics.oidc.server.adapters.PerunAdapterMethodsLdap;
@@ -96,16 +95,10 @@ public void setOidcCheckMembershipAttr(String oidcCheckMembershipAttr) {
9695
this.oidcCheckMembershipAttr = oidcCheckMembershipAttr;
9796
}
9897

99-
/**
100-
* Fetch user based on his principal (extLogin and extSource) from Perun
101-
*
102-
* @param perunPrincipal principal of user
103-
* @return PerunUser with id of found user
104-
*/
10598
@Override
106-
public PerunUser getPreauthenticatedUserId(PerunPrincipal perunPrincipal) {
99+
public PerunUser getPreauthenticatedUserId(String extLogin, String extSourceName) {
107100
FilterBuilder filter = and(
108-
equal(OBJECT_CLASS, PERUN_USER), equal(EDU_PERSON_PRINCIPAL_NAMES, perunPrincipal.getExtLogin())
101+
equal(OBJECT_CLASS, PERUN_USER), equal(EDU_PERSON_PRINCIPAL_NAMES, extLogin)
109102
);
110103
SearchScope scope = SearchScope.ONELEVEL;
111104
String[] attributes = new String[]{PERUN_USER_ID, GIVEN_NAME, SN};

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/adapters/impl/PerunAdapterRpc.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import cz.muni.ics.oidc.models.enums.MemberStatus;
2828
import cz.muni.ics.oidc.models.enums.PerunEntityType;
2929
import cz.muni.ics.oidc.models.mappers.RpcMapper;
30-
import cz.muni.ics.oidc.server.PerunPrincipal;
3130
import cz.muni.ics.oidc.server.adapters.PerunAdapter;
3231
import cz.muni.ics.oidc.server.adapters.PerunAdapterMethods;
3332
import cz.muni.ics.oidc.server.adapters.PerunAdapterMethodsRpc;
@@ -85,13 +84,13 @@ public void setAffiliationsAttr(String affiliationsAttr) {
8584
}
8685

8786
@Override
88-
public PerunUser getPreauthenticatedUserId(PerunPrincipal perunPrincipal) {
87+
public PerunUser getPreauthenticatedUserId(String extLogin, String extSourceName) {
8988
if (!this.connectorRpc.isEnabled()) {
9089
return null;
9190
}
9291
Map<String, Object> map = new LinkedHashMap<>();
93-
map.put("extLogin", perunPrincipal.getExtLogin());
94-
map.put("extSourceName", perunPrincipal.getExtSourceName());
92+
map.put("extLogin", extLogin);
93+
map.put("extSourceName", extSourceName);
9594

9695
JsonNode response = connectorRpc.post(USERS_MANAGER, "getUserByExtSourceNameAndExtLogin", map);
9796
return RpcMapper.mapPerunUser(response);

perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/filters/FiltersUtils.java

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import cz.muni.ics.oidc.models.Facility;
99
import cz.muni.ics.oidc.models.PerunAttributeValue;
1010
import cz.muni.ics.oidc.models.PerunUser;
11-
import cz.muni.ics.oidc.server.PerunPrincipal;
1211
import cz.muni.ics.oidc.server.adapters.PerunAdapter;
1312
import cz.muni.ics.oidc.server.configurations.FacilityAttrsConfig;
1413
import cz.muni.ics.oidc.web.controllers.ControllerUtils;
@@ -93,21 +92,30 @@ public static ClientDetailsEntity extractClientFromRequest(HttpServletRequest re
9392
return client;
9493
}
9594

96-
/**
97-
* Get Perun user
98-
* @param request Request object
99-
* @param perunAdapter Adapter of Perun interface
100-
* @return Found PerunUser
101-
*/
102-
public static PerunUser getPerunUser(HttpServletRequest request, PerunAdapter perunAdapter, String samlIdAttribute) {
103-
SAMLCredential samlCredential = getSamlCredential(request);
95+
public static PerunUser getPerunUser(HttpServletRequest request,
96+
PerunAdapter perunAdapter,
97+
String samlIdAttribute)
98+
{
99+
return getPerunUser(getSamlCredential(request), perunAdapter, samlIdAttribute);
100+
}
101+
102+
public static PerunUser getPerunUser(SAMLCredential samlCredential,
103+
PerunAdapter perunAdapter,
104+
String samlIdAttribute) {
105+
if (perunAdapter == null) {
106+
throw new IllegalArgumentException("Cannot fetch user, no adapter passed");
107+
}
104108
if (samlCredential == null) {
105109
return null;
106110
}
107-
PerunPrincipal principal = getPerunPrincipal(samlCredential, samlIdAttribute);
108-
log.debug("fetching Perun user with extLogin '{}' and extSourceName '{}'",
109-
principal.getExtLogin(), principal.getExtSourceName());
110-
return perunAdapter.getPreauthenticatedUserId(principal);
111+
String extLogin = getExtLogin(samlCredential, samlIdAttribute);
112+
String extSourceName = getExtSourceName(samlCredential);
113+
if (!StringUtils.hasText(extLogin)) {
114+
return null;
115+
} else if (!StringUtils.hasText(extSourceName)) {
116+
return null;
117+
}
118+
return perunAdapter.getPreauthenticatedUserId(extLogin, extSourceName);
111119
}
112120

113121
public static SAMLCredential getSamlCredential(HttpServletRequest request) {
@@ -118,7 +126,7 @@ public static SAMLCredential getSamlCredential(HttpServletRequest request) {
118126
return (SAMLCredential) p.getCredentials();
119127
}
120128

121-
public static PerunPrincipal getPerunPrincipal(SAMLCredential credential, String idAttribute) {
129+
public static String getExtLogin(SAMLCredential credential, String idAttribute) {
122130
if (credential == null) {
123131
throw new IllegalArgumentException("No SAML credential passed");
124132
} else if (!StringUtils.hasText(idAttribute)) {
@@ -128,39 +136,14 @@ public static PerunPrincipal getPerunPrincipal(SAMLCredential credential, String
128136
if (identifierAttrOid == null) {
129137
throw new IllegalStateException("SAML credentials has no value for attribute: " + idAttribute);
130138
}
131-
String extLogin = credential.getAttributeAsString(identifierAttrOid);
132-
String extSourceName = credential.getRemoteEntityID();
133-
return new PerunPrincipal(extLogin, extSourceName);
139+
return credential.getAttributeAsString(identifierAttrOid);
134140
}
135141

136-
/**
137-
* Extract PerunPrincipal from request
138-
* @param req request object
139-
* @param proxyExtSourceName name of proxy
140-
* @return extracted principal or null if not present
141-
*/
142-
public static PerunPrincipal extractPerunPrincipal(HttpServletRequest req, String proxyExtSourceName) {
143-
String extLogin = null;
144-
String remoteUser = req.getRemoteUser();
145-
if (StringUtils.hasText(remoteUser)) {
146-
extLogin = remoteUser;
147-
} else if (req.getUserPrincipal() != null) {
148-
extLogin = ((User)req.getUserPrincipal()).getUsername();
149-
}
150-
151-
PerunPrincipal principal = null;
152-
log.error("{}", req.getUserPrincipal());
153-
log.error("{}", req.getRemoteUser());
154-
155-
156-
if (extLogin != null) {
157-
principal = new PerunPrincipal(extLogin, proxyExtSourceName);
158-
log.debug("extracted principal '{}'", principal);
159-
} else {
160-
log.debug("could not extract principal");
142+
public static String getExtSourceName(SAMLCredential credential) {
143+
if (credential == null) {
144+
throw new IllegalArgumentException("No SAML credential passed");
161145
}
162-
163-
return principal;
146+
return credential.getRemoteEntityID();
164147
}
165148

166149
/**

0 commit comments

Comments
 (0)