Skip to content

Commit 6b99b20

Browse files
committed
feat: backport to IdP 4
1 parent 17de181 commit 6b99b20

File tree

11 files changed

+72
-67
lines changed

11 files changed

+72
-67
lines changed

.github/workflows/build-snapshot.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ jobs:
1414

1515
steps:
1616
- uses: actions/checkout@v4
17-
- name: Set up JDK 17
17+
- name: Set up JDK 11
1818
uses: actions/setup-java@v4
1919
with:
20-
java-version: '17'
20+
java-version: '11'
2121
distribution: 'temurin'
2222
cache: maven
2323
- name: Generate single-use GPG key

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121

2222
steps:
2323
- uses: actions/checkout@v4
24-
- name: Set up JDK 17
24+
- name: Set up JDK 11
2525
uses: actions/setup-java@v4
2626
with:
27-
java-version: '17'
27+
java-version: '11'
2828
distribution: 'temurin'
2929
cache: maven
3030
- name: Build with Maven
@@ -35,5 +35,5 @@ jobs:
3535
subject-path: andrvotr-dist/target/*.tar.gz*
3636
- name: Release
3737
run: |
38-
title="Andrvotr $GITHUB_REF_NAME (for IdP 5.x)"
38+
title="Andrvotr $GITHUB_REF_NAME (for IdP 4.x)"
3939
gh release create "$GITHUB_REF_NAME" --title "$title" --verify-tag andrvotr-dist/target/*.tar.gz*

andrvotr-impl/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
<scope>provided</scope>
3333
</dependency>
3434
<dependency>
35-
<groupId>jakarta.servlet</groupId>
36-
<artifactId>jakarta.servlet-api</artifactId>
35+
<groupId>javax.servlet</groupId>
36+
<artifactId>javax.servlet-api</artifactId>
3737
<scope>provided</scope>
3838
</dependency>
3939
<dependency>

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/AndrvotrPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.github.fmfi_svt.andrvotr;
22

33
import java.io.IOException;
4+
import net.shibboleth.idp.plugin.PluginException;
45
import net.shibboleth.idp.plugin.PropertyDrivenIdPPlugin;
5-
import net.shibboleth.profile.plugin.PluginException;
66

77
public class AndrvotrPlugin extends PropertyDrivenIdPPlugin {
88
public AndrvotrPlugin() throws IOException, PluginException {

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/AuthorityTokenGenerator.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
11
package io.github.fmfi_svt.andrvotr;
22

33
import com.google.common.base.Strings;
4-
import jakarta.servlet.http.HttpServletRequest;
5-
import jakarta.servlet.http.HttpServletResponse;
64
import java.time.Duration;
75
import java.time.Instant;
86
import java.util.Collections;
97
import java.util.List;
108
import java.util.function.Function;
119
import javax.annotation.Nonnull;
1210
import javax.annotation.Nullable;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
1313
import net.shibboleth.idp.attribute.IdPAttributeValue;
1414
import net.shibboleth.idp.attribute.StringAttributeValue;
15+
import net.shibboleth.idp.profile.context.RelyingPartyContext;
1516
import net.shibboleth.idp.profile.context.SpringRequestContext;
1617
import net.shibboleth.idp.session.IdPSession;
1718
import net.shibboleth.idp.session.context.SessionContext;
18-
import net.shibboleth.profile.context.RelyingPartyContext;
19-
import net.shibboleth.shared.component.AbstractInitializableComponent;
20-
import net.shibboleth.shared.component.ComponentInitializationException;
21-
import net.shibboleth.shared.logic.Constraint;
22-
import net.shibboleth.shared.primitive.LoggerFactory;
23-
import net.shibboleth.shared.security.DataSealer;
24-
import net.shibboleth.shared.security.DataSealerException;
19+
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
20+
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
21+
import net.shibboleth.utilities.java.support.component.ComponentSupport;
22+
import net.shibboleth.utilities.java.support.logic.Constraint;
23+
import net.shibboleth.utilities.java.support.security.DataSealer;
24+
import net.shibboleth.utilities.java.support.security.DataSealerException;
2525
import org.opensaml.profile.context.ProfileRequestContext;
2626
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
2728
import org.springframework.webflow.context.ExternalContext;
2829
import org.springframework.webflow.execution.RequestContext;
2930

@@ -41,23 +42,23 @@ public final class AuthorityTokenGenerator extends AbstractInitializableComponen
4142
private Duration tokenLifetime;
4243

4344
public void setConfig(@Nonnull Config newConfig) {
44-
checkSetterPreconditions();
45+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
4546
config = Constraint.isNotNull(newConfig, "Config cannot be null");
4647
}
4748

4849
public void setDataSealer(@Nonnull DataSealer sealer) {
49-
checkSetterPreconditions();
50+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5051
dataSealer = Constraint.isNotNull(sealer, "DataSealer cannot be null");
5152
}
5253

5354
public void setIdpSessionCookieName(@Nonnull String name) {
54-
checkSetterPreconditions();
55+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5556
Constraint.isFalse(Strings.isNullOrEmpty(name), "idpSessionCookieName cannot be null or empty");
5657
idpSessionCookieName = name;
5758
}
5859

5960
public void setTokenLifetime(@Nonnull Duration lifetime) {
60-
checkSetterPreconditions();
61+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
6162
Constraint.isNotNull(lifetime, "Lifetime cannot be null");
6263
Constraint.isFalse(lifetime.isNegative() || lifetime.isZero(), "Lifetime must be positive");
6364
tokenLifetime = lifetime;

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/Config.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
11
package io.github.fmfi_svt.andrvotr;
22

33
import com.google.common.base.Strings;
4+
import java.util.Collections;
45
import java.util.HashSet;
56
import java.util.Set;
67
import javax.annotation.Nonnull;
78
import javax.annotation.Nullable;
8-
import net.shibboleth.shared.collection.CollectionSupport;
9-
import net.shibboleth.shared.collection.Pair;
10-
import net.shibboleth.shared.component.AbstractInitializableComponent;
11-
import net.shibboleth.shared.component.ComponentInitializationException;
9+
import net.shibboleth.utilities.java.support.collection.Pair;
10+
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
11+
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
12+
import net.shibboleth.utilities.java.support.component.ComponentSupport;
1213

1314
public final class Config extends AbstractInitializableComponent {
1415

1516
private @Nullable String apiKeysString;
1617

17-
private @Nonnull Set<Pair<String, String>> apiKeys = CollectionSupport.emptySet();
18+
private @Nonnull Set<Pair<String, String>> apiKeys = Collections.emptySet();
1819

19-
private @Nonnull Set<String> apiKeyFronts = CollectionSupport.emptySet();
20+
private @Nonnull Set<String> apiKeyFronts = Collections.emptySet();
2021

2122
private @Nullable String allowedConnectionsString;
2223

23-
private @Nonnull Set<Pair<String, String>> allowedConnections = CollectionSupport.emptySet();
24+
private @Nonnull Set<Pair<String, String>> allowedConnections = Collections.emptySet();
2425

25-
private @Nonnull Set<String> allowedConnectionFronts = CollectionSupport.emptySet();
26+
private @Nonnull Set<String> allowedConnectionFronts = Collections.emptySet();
2627

2728
public void setApiKeys(@Nullable String string) {
28-
checkSetterPreconditions();
29+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
2930
apiKeysString = string;
3031
}
3132

3233
public void setAllowedConnections(@Nullable String string) {
33-
checkSetterPreconditions();
34+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
3435
allowedConnectionsString = string;
3536
}
3637

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/FabricationWebflowListener.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package io.github.fmfi_svt.andrvotr;
22

33
import com.google.common.base.Strings;
4-
import jakarta.servlet.http.HttpServletRequest;
5-
import jakarta.servlet.http.HttpServletResponse;
64
import javax.annotation.Nonnull;
5+
import javax.servlet.http.HttpServletRequest;
6+
import javax.servlet.http.HttpServletResponse;
7+
import net.shibboleth.idp.profile.context.RelyingPartyContext;
78
import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
8-
import net.shibboleth.profile.context.RelyingPartyContext;
9-
import net.shibboleth.shared.component.AbstractInitializableComponent;
10-
import net.shibboleth.shared.component.ComponentInitializationException;
11-
import net.shibboleth.shared.logic.Constraint;
12-
import net.shibboleth.shared.primitive.LoggerFactory;
13-
import net.shibboleth.shared.security.DataSealer;
9+
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
10+
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
11+
import net.shibboleth.utilities.java.support.component.ComponentSupport;
12+
import net.shibboleth.utilities.java.support.logic.Constraint;
13+
import net.shibboleth.utilities.java.support.security.DataSealer;
1414
import org.opensaml.profile.context.ProfileRequestContext;
1515
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
1617
import org.springframework.webflow.definition.StateDefinition;
1718
import org.springframework.webflow.execution.Event;
1819
import org.springframework.webflow.execution.FlowExecutionListener;
@@ -46,12 +47,12 @@ public final class FabricationWebflowListener extends AbstractInitializableCompo
4647
private DataSealer dataSealer;
4748

4849
public void setDataSealer(@Nonnull DataSealer sealer) {
49-
checkSetterPreconditions();
50+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5051
dataSealer = Constraint.isNotNull(sealer, "DataSealer cannot be null");
5152
}
5253

5354
public void setConfig(@Nonnull Config newConfig) {
54-
checkSetterPreconditions();
55+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5556
config = Constraint.isNotNull(newConfig, "Config cannot be null");
5657
}
5758

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/FabricationWebflowListenerInjector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import java.util.Map;
44
import javax.annotation.Nonnull;
5-
import net.shibboleth.shared.component.AbstractInitializableComponent;
6-
import net.shibboleth.shared.primitive.LoggerFactory;
5+
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
76
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
88
import org.springframework.beans.factory.config.BeanDefinition;
99
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
1010
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

andrvotr-impl/src/main/java/io/github/fmfi_svt/andrvotr/HttpController.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.github.fmfi_svt.andrvotr;
22

33
import com.google.common.base.Strings;
4-
import jakarta.servlet.http.HttpServletRequest;
5-
import jakarta.servlet.http.HttpServletResponse;
64
import java.io.IOException;
75
import java.io.OutputStream;
86
import java.net.URL;
@@ -13,18 +11,21 @@
1311
import java.util.List;
1412
import java.util.stream.Collectors;
1513
import javax.annotation.Nonnull;
16-
import net.shibboleth.shared.component.AbstractInitializableComponent;
17-
import net.shibboleth.shared.component.ComponentInitializationException;
18-
import net.shibboleth.shared.logic.Constraint;
19-
import net.shibboleth.shared.primitive.LoggerFactory;
20-
import net.shibboleth.shared.security.DataExpiredException;
21-
import net.shibboleth.shared.security.DataSealer;
22-
import net.shibboleth.shared.security.DataSealerException;
23-
import org.apache.hc.client5.http.classic.HttpClient;
24-
import org.apache.hc.client5.http.classic.methods.HttpGet;
25-
import org.apache.hc.core5.http.Header;
26-
import org.apache.hc.core5.http.io.entity.EntityUtils;
14+
import javax.servlet.http.HttpServletRequest;
15+
import javax.servlet.http.HttpServletResponse;
16+
import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
17+
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
18+
import net.shibboleth.utilities.java.support.component.ComponentSupport;
19+
import net.shibboleth.utilities.java.support.logic.Constraint;
20+
import net.shibboleth.utilities.java.support.security.DataExpiredException;
21+
import net.shibboleth.utilities.java.support.security.DataSealer;
22+
import net.shibboleth.utilities.java.support.security.DataSealerException;
23+
import org.apache.http.Header;
24+
import org.apache.http.client.HttpClient;
25+
import org.apache.http.client.methods.HttpGet;
26+
import org.apache.http.util.EntityUtils;
2727
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
2829
import org.springframework.stereotype.Controller;
2930
import org.springframework.web.bind.annotation.PostMapping;
3031
import org.springframework.web.bind.annotation.RequestMapping;
@@ -44,22 +45,22 @@ public final class HttpController extends AbstractInitializableComponent {
4445
private String idpEntityID;
4546

4647
public void setHttpClient(@Nonnull HttpClient client) {
47-
checkSetterPreconditions();
48+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
4849
httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
4950
}
5051

5152
public void setConfig(@Nonnull Config newConfig) {
52-
checkSetterPreconditions();
53+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5354
config = Constraint.isNotNull(newConfig, "Config cannot be null");
5455
}
5556

5657
public void setDataSealer(@Nonnull DataSealer sealer) {
57-
checkSetterPreconditions();
58+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
5859
dataSealer = Constraint.isNotNull(sealer, "DataSealer cannot be null");
5960
}
6061

6162
public void setIdpEntityID(@Nonnull String id) {
62-
checkSetterPreconditions();
63+
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
6364
Constraint.isFalse(Strings.isNullOrEmpty(id), "idpEntityId cannot be null or empty");
6465
idpEntityID = id;
6566
}
@@ -176,8 +177,9 @@ public void fabricate(@Nonnull HttpServletRequest httpRequest, @Nonnull HttpServ
176177
nestedRequest.addHeader(Constants.HEADER_ANDRVOTR_INTERNAL_FABRICATION_FRONT, frontEntityID);
177178

178179
httpClient.execute(nestedRequest, (nestedResponse) -> {
179-
int statusCode = nestedResponse.getCode();
180-
String contentType = nestedResponse.getEntity().getContentType();
180+
int statusCode = nestedResponse.getStatusLine().getStatusCode();
181+
Header contentTypeHeader = nestedResponse.getEntity().getContentType();
182+
String contentType = contentTypeHeader == null ? null : contentTypeHeader.getValue();
181183
long contentLength = nestedResponse.getEntity().getContentLength();
182184

183185
List<String> trace = Arrays.stream(
@@ -207,7 +209,7 @@ public void fabricate(@Nonnull HttpServletRequest httpRequest, @Nonnull HttpServ
207209
try {
208210
if ((contentType != null && contentType.startsWith("text/"))
209211
|| nestedResponse.getEntity().getContentEncoding() != null) {
210-
String body = EntityUtils.toString(nestedResponse.getEntity(), 4096);
212+
String body = EntityUtils.toString(nestedResponse.getEntity());
211213
log.warn("andrvotr/fabricate error body: [{}]", body.replace("\n", "[\\n]"));
212214
}
213215
} catch (Exception e) {

andrvotr-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
class="io.github.fmfi_svt.andrvotr.AuthorityTokenGenerator"
2020
p:config-ref="andrvotr.Config"
2121
p:dataSealer-ref="shibboleth.DataSealer"
22-
p:idpSessionCookieName="%{idp.session.cookieName:__Host-shib_idp_session}"
22+
p:idpSessionCookieName="%{idp.session.cookieName:shib_idp_session}"
2323
p:tokenLifetime="%{andrvotr.authorityTokenLifetime:PT5M}" />
2424

2525
<bean class="io.github.fmfi_svt.andrvotr.HttpController"

0 commit comments

Comments
 (0)