Skip to content

Commit 8d05438

Browse files
mrkvonjoachimvh
authored andcommitted
Fix webId profile document's baseIRI during retrieval of trusted issuers
Also fix broken e2e tests. Fixes #311
1 parent b35fbed commit 8d05438

3 files changed

Lines changed: 33 additions & 8 deletions

File tree

src/algorithm/retrieveWebidTrustedOidcIssuers.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ import { WebidIriError } from "../error/WebidIriError";
66
import { WebidParsingError } from "../error/WebidParsingError";
77
import type { RetrieveOidcIssuersFunction } from "../type";
88

9-
async function dereferenceWebid(webid: string): Promise<string> {
9+
async function dereferenceWebid(
10+
webid: string,
11+
): Promise<{ rdf: string; baseIRI: string }> {
1012
try {
1113
const response = await fetch(webid, {
1214
headers: {
1315
accept: "text/turtle",
1416
},
1517
});
16-
return await response.text();
18+
return { rdf: await response.text(), baseIRI: response.url };
1719
} catch (e: unknown) {
1820
throw new WebidDereferencingError(webid);
1921
}
@@ -43,10 +45,8 @@ export async function retrieveWebidTrustedOidcIssuers(
4345
return getIssuers(webid);
4446
}
4547

46-
const store = parseRdf(
47-
await dereferenceWebid(webid),
48-
Object.assign(new URL(webid), { hash: "" }).href,
49-
);
48+
const { rdf, baseIRI } = await dereferenceWebid(webid);
49+
const store = parseRdf(rdf, baseIRI);
5050

5151
return store
5252
.getObjects(

test/e2e/retrieveWebidTrustedOidcIssuers.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
77
).toEqual(["https://login.inrupt.com"]);
88
});
99

10-
it("returns expected issuer set via inrupt.net", async () => {
10+
// inrupt.net has been discontinued: https://www.inrupt.com/blog/inrupt-net-service-migration
11+
// eslint-disable-next-line jest/no-disabled-tests
12+
it.skip("returns expected issuer set via inrupt.net", async () => {
1113
expect(
1214
await retrieveWebidTrustedOidcIssuers(
1315
"https://matthieubosquet.inrupt.net/profile/card#me",
@@ -20,7 +22,7 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
2022
await retrieveWebidTrustedOidcIssuers(
2123
"https://matthieubi.solidcommunity.net/profile/card#me",
2224
),
23-
).toEqual(["https://solidcommunity.net"]);
25+
).toEqual(["https://solidcommunity.net/"]);
2426
});
2527

2628
it("returns expected issuer set via solidweb.org", async () => {

test/unit/algorithm/retrieveWebidTrustedOidcIssuers.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { WebidParsingError } from "../../../src/error/WebidParsingError";
77
jest.mock("node-fetch", () => jest.fn());
88

99
const webid = "https://example.com/webid#";
10+
const webidDocument = "https://example.com/webid";
1011

1112
describe("retrieveWebidTrustedOidcIssuers", () => {
1213
it("returns the trusted OIDC issuer of a WebID", async () => {
@@ -16,6 +17,7 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
1617
text: () => {
1718
return `<${webid}> <http://www.w3.org/ns/solid/terms#oidcIssuer> <https://example.issuer.com/> .`;
1819
},
20+
url: webidDocument,
1921
}),
2022
);
2123

@@ -31,6 +33,7 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
3133
text: () => {
3234
return `<${webid}> <http://www.w3.org/ns/solid/terms#oidcIssuer> <https://example.issuer.com/>, <https://example.other.issuer.com/> .`;
3335
},
36+
url: webidDocument,
3437
}),
3538
);
3639

@@ -40,13 +43,32 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
4043
]);
4144
});
4245

46+
it("returns the trusted OIDC issuers with relative paths and redirect webId", async () => {
47+
const webidDocumentRedirect = "https://webid.example/profile/card";
48+
49+
(fetch as unknown as jest.Mock).mockImplementationOnce(() =>
50+
Promise.resolve({
51+
ok: true,
52+
text: () => {
53+
return `<${webid}> <http://www.w3.org/ns/solid/terms#oidcIssuer> <../> .`;
54+
},
55+
url: webidDocumentRedirect,
56+
}),
57+
);
58+
59+
expect(await retrieveWebidTrustedOidcIssuers(webid)).toStrictEqual([
60+
"https://webid.example/",
61+
]);
62+
});
63+
4364
it("ignores issuers in a non-default graph", async () => {
4465
(fetch as unknown as jest.Mock).mockImplementationOnce(() =>
4566
Promise.resolve({
4667
ok: true,
4768
text: () => {
4869
return `<#g> { <${webid}> <http://www.w3.org/ns/solid/terms#oidcIssuer> <https://example.issuer.com/> . }`;
4970
},
71+
url: webidDocument,
5072
}),
5173
);
5274

@@ -83,6 +105,7 @@ describe("retrieveWebidTrustedOidcIssuers", () => {
83105
text: () => {
84106
return "very invalid turtle";
85107
},
108+
url: webidDocument,
86109
}),
87110
);
88111

0 commit comments

Comments
 (0)