Skip to content

Commit 0f4168e

Browse files
committed
Fixed access request URL building
1 parent f53fb56 commit 0f4168e

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

src/main/java/com/atomgraph/linkeddatahub/resource/acl/AccessRequest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,8 @@
3737
import jakarta.ws.rs.POST;
3838
import jakarta.ws.rs.QueryParam;
3939
import jakarta.ws.rs.core.Context;
40-
import jakarta.ws.rs.core.Request;
4140
import jakarta.ws.rs.core.Response;
4241
import jakarta.ws.rs.core.UriBuilder;
43-
import jakarta.ws.rs.core.UriInfo;
4442
import java.net.URI;
4543
import java.util.GregorianCalendar;
4644
import java.util.Optional;
@@ -75,16 +73,13 @@ public class AccessRequest
7573
/**
7674
* Constructs an AccessRequest resource handler.
7775
*
78-
* @param request HTTP request context
79-
* @param uriInfo URI information context
8076
* @param application current application
8177
* @param agentContext optional agent context
8278
* @param system system application
8379
* @param servletConfig servlet configuration
8480
*/
8581
@Inject
86-
public AccessRequest(@Context Request request, @Context UriInfo uriInfo,
87-
com.atomgraph.linkeddatahub.apps.model.Application application, Optional<AgentContext> agentContext,
82+
public AccessRequest(com.atomgraph.linkeddatahub.apps.model.Application application, Optional<AgentContext> agentContext,
8883
com.atomgraph.linkeddatahub.Application system, @Context ServletConfig servletConfig)
8984
{
9085
if (log.isDebugEnabled()) log.debug("Constructing {}", getClass());
@@ -122,7 +117,7 @@ public Response post(Model model, @QueryParam("default") @DefaultValue("false")
122117
Model requestModel = ModelFactory.createDefaultModel();
123118

124119
Resource agent = authorization.getPropertyResourceValue(ACL.agent);
125-
if (!agent.equals(getAgentContext().get().getAgent())) throw new IllegalStateException("Agent requesting access must be authenticated");
120+
if (getAgentContext().isEmpty() || !agent.equals(getAgentContext().get().getAgent())) throw new IllegalStateException("Agent requesting access must be authenticated");
126121

127122
String humanReadableName = getAgentsHumanReadableName(getAgentContext().get().getAgent());
128123
String accessRequestLabel = humanReadableName != null ? "Access request by " + humanReadableName : null; // TO-DO: localize the string

src/main/java/com/atomgraph/linkeddatahub/server/filter/response/CORSFilter.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,19 @@ public class CORSFilter implements ContainerResponseFilter
4949
@Override
5050
public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException
5151
{
52-
// Add CORS headers for all responses
53-
response.getHeaders().add("Access-Control-Allow-Origin", "*");
54-
response.getHeaders().add("Access-Control-Allow-Methods", ALLOWED_METHODS);
55-
response.getHeaders().add("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization");
56-
response.getHeaders().add("Access-Control-Expose-Headers", "Link, Content-Location, Location");
57-
58-
// Handle preflight OPTIONS requests
59-
if (HttpMethod.OPTIONS.equalsIgnoreCase(request.getMethod()))
52+
if (request.getHeaderString("Origin") != null)
6053
{
61-
response.setStatus(Response.Status.NO_CONTENT.getStatusCode());
62-
response.getHeaders().add("Access-Control-Max-Age", String.valueOf(getMaxAge()));
54+
response.getHeaders().add("Access-Control-Allow-Origin", "*");
55+
response.getHeaders().add("Access-Control-Allow-Methods", ALLOWED_METHODS);
56+
response.getHeaders().add("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization");
57+
response.getHeaders().add("Access-Control-Expose-Headers", "Link, Content-Location, Location");
58+
59+
// Handle preflight OPTIONS requests
60+
if (HttpMethod.OPTIONS.equalsIgnoreCase(request.getMethod()))
61+
{
62+
response.setStatus(Response.Status.NO_CONTENT.getStatusCode());
63+
response.getHeaders().add("Access-Control-Max-Age", String.valueOf(getMaxAge()));
64+
}
6365
}
6466
}
6567

src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/modal.xsl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ LIMIT 10
343343
<xsl:param name="id" select="'request-access'" as="xs:string?"/>
344344
<xsl:param name="button-class" select="'btn btn-primary btn-access-form'" as="xs:string?"/>
345345
<xsl:param name="accept-charset" select="'UTF-8'" as="xs:string?"/>
346-
<xsl:param name="action" select="resolve-uri('access/request', ldt:base())" as="xs:anyURI"/>
346+
<xsl:param name="this" as="xs:anyURI"/>
347+
<xsl:param name="action" select="ldh:href(resolve-uri('access/request', ldh:origin($this)))" as="xs:anyURI"/>
347348
<xsl:param name="legend-label" select="ac:label(key('resources', 'request-access', document(resolve-uri('static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/translations.rdf', $ac:contextUri))))" as="xs:string"/>
348349
<xsl:param name="agent" as="xs:anyURI"/>
349350

@@ -413,6 +414,7 @@ LIMIT 10
413414
<!-- TO-DO: support agent-group? -->
414415
<xsl:param name="this" as="xs:anyURI"/>
415416
<xsl:param name="access-modes" select="(xs:anyURI('&acl;Read'), xs:anyURI('&acl;Append'), xs:anyURI('&acl;Write'))" as="xs:anyURI*"/>
417+
<xsl:param name="base" select="ldh:origin($this)" as="xs:anyURI"/>
416418

417419
<fieldset>
418420
<legend>URL-based access</legend>
@@ -448,7 +450,7 @@ LIMIT 10
448450
<!-- append an authorization for the current URL unless such already exists (e.g. lacl:OwnerAuthorization) -->
449451
<xsl:variable name="has-access-to-this-auth" select="exists(rdf:Description[acl:accessTo/@rdf:resource = $this])" as="xs:boolean"/>
450452
<xsl:for-each-group select="if ($has-access-to-this-auth) then rdf:Description[acl:accessTo/@rdf:resource] else ($this-auth, rdf:Description[acl:accessTo/@rdf:resource])"
451-
group-by="acl:accessTo/@rdf:resource[starts-with(., ldt:base())]">
453+
group-by="acl:accessTo/@rdf:resource[starts-with(., $base)]">
452454
<xsl:variable name="granted-access-modes" select="distinct-values(current-group()/acl:mode/@rdf:resource)" as="xs:anyURI*"/>
453455

454456
<!-- applying on the first authorization in the group -->
@@ -712,7 +714,7 @@ LIMIT 10
712714
<xsl:template match="button[contains-token(@class, 'btn-access-form')]" mode="ixsl:onclick">
713715
<!-- TO-DO: fix for admin apps -->
714716
<xsl:param name="this" select="ac:absolute-path(ldh:base-uri(.))" as="xs:anyURI"/>
715-
<xsl:variable name="request-uri" select="ldh:href(ac:build-uri(resolve-uri('access', ldt:base()), map{ 'this': $this }))" as="xs:anyURI"/>
717+
<xsl:variable name="request-uri" select="ldh:href(ac:build-uri(resolve-uri('access', ldh:origin($this)), map{ 'this': $this }))" as="xs:anyURI"/>
716718
<xsl:variable name="request" as="item()*">
717719
<ixsl:schedule-action http-request="map{ 'method': 'GET', 'href': $request-uri, 'headers': map{ 'Accept': 'application/rdf+xml' } }">
718720
<xsl:call-template name="onAccessResponseLoad">
@@ -1198,6 +1200,7 @@ LIMIT 10
11981200
<xsl:call-template name="ldh:ShowModalForm">
11991201
<xsl:with-param name="form" as="element()">
12001202
<xsl:apply-templates select="$body" mode="ldh:RequestAccessForm">
1203+
<xsl:with-param name="this" select="$this"/>
12011204
<xsl:with-param name="agent" select="$agent"/>
12021205
</xsl:apply-templates>
12031206
</xsl:with-param>

0 commit comments

Comments
 (0)