solid-server 5.8.8-3f2fe825 → 5.8.8-4cf09686
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/js/index-buttons.mjs +11 -5
- package/config/templates/server/index.html +1 -1
- package/coverage/tmp/coverage-2264-1767721071420-0.json +1 -0
- package/coverage/tmp/{coverage-2270-1766877996470-0.json → coverage-2265-1767721050068-0.json} +1 -1
- package/default-templates/server/index.html +1 -1
- package/eslint.config.mjs +1 -1
- package/lib/create-server.mjs +2 -2
- package/lib/handlers/auth-proxy.mjs +4 -5
- package/lib/handlers/cors-proxy.mjs +2 -1
- package/lib/handlers/get.mjs +3 -3
- package/lib/ldp.mjs +2 -2
- package/lib/models/account-manager.mjs +3 -3
- package/lib/utils.mjs +1 -1
- package/package.json +28 -15
- package/solid-server-5.8.8.tgz +0 -0
- package/test/index.mjs +2 -2
- package/test/integration/account-manager-test.mjs +2 -2
- package/test/integration/acl-oidc-test.mjs +1 -1
- package/test/integration/authentication-oidc-test.mjs +2 -1
- package/test/integration/http-copy-test.mjs +2 -2
- package/test/integration/oidc-manager-test.mjs +95 -1
- package/test/integration/params-test.mjs +5 -5
- package/test/resources/accounts/db/oidc/op/clients/{_key_9bb7523c8ddc5c445f210cc36c2d2e26.json → _key_69eaaa0e44e3f95d54a021c5b41e6d72.json} +1 -1
- package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -1
- package/test/resources/accounts-scenario/alice/db/oidc/op/clients/{_key_80b4257058990d4e0b6255490b635b19.json → _key_c07d7590e034645477f72d1d3000b04e.json} +1 -1
- package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +538 -313
- package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -1
- package/test/resources/accounts-scenario/bob/db/oidc/op/clients/{_key_01798c37b9663a7129689752efaa329f.json → _key_a10918196ba5adab47f1cf77ec7fa4a6.json} +1 -1
- package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +538 -313
- package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -1
- package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/{_key_0606dda8525a70b23719906c2b258f1b.json → _key_e5c13302f9989c257c6967238e7ae2df.json} +1 -1
- package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -1
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/{_key_cb72eef4d57f4ddd28368afc5534b2d3.json → _key_e262eb5992e08f1284fbda4d22e0f363.json} +1 -1
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -1
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/{_key_4c878fad2e43e354847663498e9a3682.json → _key_94d6296485729c61ea033a86a1ee2b9b.json} +1 -1
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -1
- package/test/resources/config/templates/server/index.html +1 -1
- package/test/unit/account-manager-test.mjs +2 -2
- package/test/unit/create-account-request-test.mjs +1 -1
- package/test/unit/email-welcome-test.mjs +1 -1
- package/test/utils/index.mjs +2 -2
- package/test/utils.mjs +5 -5
- package/common/js/auth-buttons.js +0 -67
- package/common/js/index-buttons.js +0 -44
- package/coverage/tmp/coverage-2269-1766878018867-0.json +0 -1
package/eslint.config.mjs
CHANGED
package/lib/create-server.mjs
CHANGED
|
@@ -6,7 +6,8 @@ import debug from '../debug.mjs'
|
|
|
6
6
|
import allow from './allow.mjs'
|
|
7
7
|
|
|
8
8
|
const PROXY_SETTINGS = {
|
|
9
|
-
|
|
9
|
+
logLevel: 'silent',
|
|
10
|
+
changeOrigin: true
|
|
10
11
|
}
|
|
11
12
|
const REQUIRED_PERMISSIONS = {
|
|
12
13
|
get: ['Read'],
|
|
@@ -30,10 +31,8 @@ function addAuthProxyHandler (app, sourcePath, target) {
|
|
|
30
31
|
const sourcePathLength = sourcePath.length
|
|
31
32
|
const settings = Object.assign({
|
|
32
33
|
target,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
proxyReqWs: addAuthHeaders
|
|
36
|
-
},
|
|
34
|
+
onProxyReq: addAuthHeaders,
|
|
35
|
+
onProxyReqWs: addAuthHeaders,
|
|
37
36
|
pathRewrite: path => path.substr(sourcePathLength)
|
|
38
37
|
}, PROXY_SETTINGS)
|
|
39
38
|
|
|
@@ -14,7 +14,8 @@ const CORS_SETTINGS = {
|
|
|
14
14
|
origin: true
|
|
15
15
|
}
|
|
16
16
|
const PROXY_SETTINGS = {
|
|
17
|
-
target: '
|
|
17
|
+
target: 'dynamic',
|
|
18
|
+
logLevel: 'silent',
|
|
18
19
|
changeOrigin: true,
|
|
19
20
|
followRedirects: true,
|
|
20
21
|
proxyTimeout: 10000,
|
package/lib/handlers/get.mjs
CHANGED
|
@@ -48,9 +48,9 @@ export default async function handler (req, res, next) {
|
|
|
48
48
|
|
|
49
49
|
const options = {
|
|
50
50
|
hostname: req.hostname,
|
|
51
|
-
path,
|
|
52
|
-
includeBody,
|
|
53
|
-
possibleRDFType,
|
|
51
|
+
path: path,
|
|
52
|
+
includeBody: includeBody,
|
|
53
|
+
possibleRDFType: possibleRDFType,
|
|
54
54
|
range: req.headers.range,
|
|
55
55
|
contentType: req.headers.accept
|
|
56
56
|
}
|
package/lib/ldp.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import debug from './debug.mjs'
|
|
|
9
9
|
import error from './http-error.mjs'
|
|
10
10
|
import { stringToStream, serialize, overQuota, getContentType, parse } from './utils.mjs'
|
|
11
11
|
import extend from 'extend'
|
|
12
|
-
import
|
|
12
|
+
import rimraf from 'rimraf'
|
|
13
13
|
import { exec } from 'child_process'
|
|
14
14
|
import * as ldpContainer from './ldp-container.mjs'
|
|
15
15
|
import { promisify } from 'util'
|
|
@@ -543,7 +543,7 @@ class LDP {
|
|
|
543
543
|
|
|
544
544
|
// Delete the directory recursively
|
|
545
545
|
try {
|
|
546
|
-
await rimraf(directory)
|
|
546
|
+
await promisify(rimraf)(directory)
|
|
547
547
|
} catch (err) {
|
|
548
548
|
throw error(err, 'Failed to delete the container')
|
|
549
549
|
}
|
|
@@ -258,7 +258,7 @@ class AccountManager {
|
|
|
258
258
|
const emailData = {
|
|
259
259
|
to: userAccount.email,
|
|
260
260
|
webId: userAccount.webId,
|
|
261
|
-
deleteUrl
|
|
261
|
+
deleteUrl: deleteUrl
|
|
262
262
|
}
|
|
263
263
|
return this.emailService.sendWithTemplate('delete-account.mjs', emailData)
|
|
264
264
|
})
|
|
@@ -275,7 +275,7 @@ class AccountManager {
|
|
|
275
275
|
webId: userAccount.webId,
|
|
276
276
|
resetUrl
|
|
277
277
|
}
|
|
278
|
-
return this.emailService.sendWithTemplate('reset-password', emailData)
|
|
278
|
+
return this.emailService.sendWithTemplate('reset-password.mjs', emailData)
|
|
279
279
|
})
|
|
280
280
|
}
|
|
281
281
|
|
|
@@ -289,7 +289,7 @@ class AccountManager {
|
|
|
289
289
|
webid: newUser.webId,
|
|
290
290
|
name: newUser.displayName
|
|
291
291
|
}
|
|
292
|
-
return emailService.sendWithTemplate('welcome', emailData)
|
|
292
|
+
return emailService.sendWithTemplate('welcome.mjs', emailData)
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
|
package/lib/utils.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-server",
|
|
3
3
|
"description": "Solid server on top of the file-system",
|
|
4
|
-
"version": "5.8.8-
|
|
4
|
+
"version": "5.8.8-4cf09686",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Tim Berners-Lee",
|
|
7
7
|
"email": "timbl@w3.org"
|
|
@@ -62,11 +62,12 @@
|
|
|
62
62
|
"@fastify/busboy": "^3.2.0",
|
|
63
63
|
"@fastify/pre-commit": "^2.2.1",
|
|
64
64
|
"@solid/acl-check": "^0.4.5",
|
|
65
|
-
"@solid/oidc-auth-manager": "^0.25.
|
|
66
|
-
"@solid/oidc-op": "^0.12.
|
|
67
|
-
"@solid/oidc-rp": "^0.12.
|
|
65
|
+
"@solid/oidc-auth-manager": "^0.25.2",
|
|
66
|
+
"@solid/oidc-op": "^0.12.1",
|
|
67
|
+
"@solid/oidc-rp": "^0.12.1",
|
|
68
|
+
"@solid/solid-multi-rp-client": "^0.7.2",
|
|
68
69
|
"async-lock": "^1.4.1",
|
|
69
|
-
"body-parser": "^
|
|
70
|
+
"body-parser": "^1.20.4",
|
|
70
71
|
"bootstrap": "^3.4.1",
|
|
71
72
|
"cached-path-relative": "^1.1.0",
|
|
72
73
|
"camelize": "^1.0.1",
|
|
@@ -75,6 +76,7 @@
|
|
|
75
76
|
"commander": "^14.0.2",
|
|
76
77
|
"cors": "^2.8.5",
|
|
77
78
|
"debug": "^4.4.3",
|
|
79
|
+
"eslint": "^9.39.2",
|
|
78
80
|
"express": "^4.22.1",
|
|
79
81
|
"express-accept-events": "^0.3.0",
|
|
80
82
|
"express-handlebars": "^5.3.5",
|
|
@@ -84,17 +86,17 @@
|
|
|
84
86
|
"extend": "^3.0.2",
|
|
85
87
|
"from2": "^2.3.0",
|
|
86
88
|
"fs-extra": "^11.3.3",
|
|
87
|
-
"get-folder-size": "^
|
|
89
|
+
"get-folder-size": "^2.0.1",
|
|
88
90
|
"glob": "^13.0.0",
|
|
89
91
|
"global-tunnel-ng": "^2.7.1",
|
|
90
92
|
"handlebars": "^4.7.8",
|
|
91
|
-
"http-proxy-middleware": "^
|
|
92
|
-
"inquirer": "^
|
|
93
|
+
"http-proxy-middleware": "^2.0.9",
|
|
94
|
+
"inquirer": "^8.2.7",
|
|
93
95
|
"into-stream": "^9.0.0",
|
|
94
96
|
"ip-range-check": "0.2.0",
|
|
95
97
|
"is-ip": "^5.0.1",
|
|
96
98
|
"li": "^1.3.0",
|
|
97
|
-
"mashlib": "^
|
|
99
|
+
"mashlib": "^2.0.0-de1f6b8e",
|
|
98
100
|
"mime-types": "^3.0.2",
|
|
99
101
|
"negotiator": "^1.0.0",
|
|
100
102
|
"node-forge": "^1.3.3",
|
|
@@ -102,9 +104,9 @@
|
|
|
102
104
|
"nodemailer": "^7.0.12",
|
|
103
105
|
"oidc-op-express": "^0.0.3",
|
|
104
106
|
"owasp-password-strength-test": "^1.3.0",
|
|
105
|
-
"rdflib": "^2.3.
|
|
107
|
+
"rdflib": "^2.3.3",
|
|
106
108
|
"recursive-readdir": "^2.2.3",
|
|
107
|
-
"rimraf": "^
|
|
109
|
+
"rimraf": "^3.0.2",
|
|
108
110
|
"solid-auth-client": "^2.5.6",
|
|
109
111
|
"solid-namespace": "^0.5.4",
|
|
110
112
|
"solid-ws": "^0.4.3",
|
|
@@ -120,14 +122,13 @@
|
|
|
120
122
|
"devDependencies": {
|
|
121
123
|
"@cxres/structured-headers": "^2.0.0-nesting.0",
|
|
122
124
|
"@eslint/js": "^9.39.2",
|
|
123
|
-
"@solid/solid-auth-oidc": "^0.6.
|
|
125
|
+
"@solid/solid-auth-oidc": "^0.6.1",
|
|
124
126
|
"c8": "^10.1.3",
|
|
125
127
|
"chai": "^4.5.0",
|
|
126
128
|
"chai-as-promised": "7.1.2",
|
|
127
129
|
"cross-env": "^10.1.0",
|
|
128
130
|
"dirty-chai": "2.0.1",
|
|
129
|
-
"
|
|
130
|
-
"globals": "^16.5.0",
|
|
131
|
+
"globals": "^17.0.0",
|
|
131
132
|
"localstorage-memory": "1.0.3",
|
|
132
133
|
"mocha": "^11.7.5",
|
|
133
134
|
"nock": "^13.5.6",
|
|
@@ -155,7 +156,7 @@
|
|
|
155
156
|
"build": "echo nothing to build",
|
|
156
157
|
"solid": "node ./bin/solid",
|
|
157
158
|
"lint": "eslint \"**/*.mjs\"",
|
|
158
|
-
"lint
|
|
159
|
+
"lint-fix": "eslint --fix \"**/*.mjs\"",
|
|
159
160
|
"validate": "node ./test/validate-turtle.mjs",
|
|
160
161
|
"c8": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 c8 --reporter=text-summary mocha --recursive test/unit/ test/integration/",
|
|
161
162
|
"mocha": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 mocha --recursive test/unit/ test/integration/",
|
|
@@ -192,6 +193,18 @@
|
|
|
192
193
|
"node_modules/**"
|
|
193
194
|
]
|
|
194
195
|
},
|
|
196
|
+
"standard": {
|
|
197
|
+
"globals": [
|
|
198
|
+
"after",
|
|
199
|
+
"afterEach",
|
|
200
|
+
"before",
|
|
201
|
+
"beforeEach",
|
|
202
|
+
"describe",
|
|
203
|
+
"it",
|
|
204
|
+
"fetch",
|
|
205
|
+
"AbortController"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
195
208
|
"bin": {
|
|
196
209
|
"solid": "bin/solid"
|
|
197
210
|
},
|
package/solid-server-5.8.8.tgz
CHANGED
|
Binary file
|
package/test/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from 'fs-extra'
|
|
2
|
-
import
|
|
2
|
+
import rimraf from 'rimraf'
|
|
3
3
|
import path from 'path'
|
|
4
4
|
import { fileURLToPath } from 'url'
|
|
5
5
|
import OIDCProvider from '@solid/oidc-op'
|
|
@@ -15,7 +15,7 @@ const __dirname = path.dirname(__filename)
|
|
|
15
15
|
const TEST_HOSTS = ['nic.localhost', 'tim.localhost', 'nicola.localhost']
|
|
16
16
|
|
|
17
17
|
export function rm (file) {
|
|
18
|
-
return
|
|
18
|
+
return rimraf.sync(path.normalize(path.join(__dirname, '../resources/' + file)))
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function cleanDir (dirPath) {
|
|
@@ -51,7 +51,7 @@ describe('AccountManager', () => {
|
|
|
51
51
|
// Note: test/resources/accounts/tim.localhost/ exists in this repo
|
|
52
52
|
return accountManager.accountExists('tim')
|
|
53
53
|
.then(exists => {
|
|
54
|
-
console.log('DEBUG tim exists:', exists, typeof exists)
|
|
54
|
+
// console.log('DEBUG tim exists:', exists, typeof exists)
|
|
55
55
|
expect(exists).to.not.be.false
|
|
56
56
|
})
|
|
57
57
|
})
|
|
@@ -60,7 +60,7 @@ describe('AccountManager', () => {
|
|
|
60
60
|
// Note: test/resources/accounts/alice.localhost/ does NOT exist
|
|
61
61
|
return accountManager.accountExists('alice')
|
|
62
62
|
.then(exists => {
|
|
63
|
-
console.log('DEBUG alice exists:', exists, typeof exists)
|
|
63
|
+
// console.log('DEBUG alice exists:', exists, typeof exists)
|
|
64
64
|
expect(exists).to.not.be.false
|
|
65
65
|
})
|
|
66
66
|
})
|
|
@@ -690,7 +690,6 @@ describe('Authentication API (OIDC)', () => {
|
|
|
690
690
|
// Native fetch: get first set-cookie header
|
|
691
691
|
const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
|
|
692
692
|
cookie = setCookieHeaders[0]
|
|
693
|
-
|
|
694
693
|
// Successful login gets redirected back to /authorize and then
|
|
695
694
|
// back to app
|
|
696
695
|
expect(postLoginUri.startsWith(aliceServerUri + '/sharing'))
|
|
@@ -716,6 +715,7 @@ describe('Authentication API (OIDC)', () => {
|
|
|
716
715
|
expect(res.status).to.equal(302)
|
|
717
716
|
const location = res.headers.get('location')
|
|
718
717
|
postSharingUri = new URL(location, aliceServerUri).toString()
|
|
718
|
+
|
|
719
719
|
// cookie = res.headers.get('set-cookie')
|
|
720
720
|
|
|
721
721
|
// Successful login gets redirected back to /authorize and then
|
|
@@ -729,6 +729,7 @@ describe('Authentication API (OIDC)', () => {
|
|
|
729
729
|
expect(res.status).to.equal(302)
|
|
730
730
|
const location = res.headers.get('location')
|
|
731
731
|
callbackUri = location.startsWith('http') ? location : new URL(location, aliceServerUri).toString()
|
|
732
|
+
|
|
732
733
|
expect(callbackUri.startsWith('https://app.example.com#'))
|
|
733
734
|
})
|
|
734
735
|
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fileURLToPath } from 'url'
|
|
2
2
|
import path from 'path'
|
|
3
|
+
import { URL } from 'url'
|
|
3
4
|
import chai from 'chai'
|
|
4
5
|
import fs from 'fs-extra'
|
|
5
6
|
import { fromServerConfig } from '../../lib/models/oidc-manager.mjs'
|
|
@@ -37,5 +38,98 @@ describe('OidcManager', () => {
|
|
|
37
38
|
expect(oidc.users.backend.path.endsWith('db/oidc/users'))
|
|
38
39
|
expect(oidc.users.saltRounds).to.equal(saltRounds)
|
|
39
40
|
})
|
|
41
|
+
|
|
42
|
+
it('should set the provider issuer which is used for iss claim in tokens', () => {
|
|
43
|
+
const providerUri = 'https://pivot-test.solidproject.org:8443'
|
|
44
|
+
const host = SolidHost.from({ serverUri: providerUri })
|
|
45
|
+
|
|
46
|
+
const saltRounds = 5
|
|
47
|
+
const argv = {
|
|
48
|
+
host,
|
|
49
|
+
dbPath,
|
|
50
|
+
saltRounds
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const oidc = fromServerConfig(argv)
|
|
54
|
+
|
|
55
|
+
// Verify the issuer is set correctly for RFC 9207 compliance
|
|
56
|
+
// The iss claim in tokens should match this issuer value
|
|
57
|
+
expect(oidc.provider.issuer).to.exist
|
|
58
|
+
expect(oidc.provider.issuer).to.not.be.null
|
|
59
|
+
expect(oidc.provider.issuer).to.equal(providerUri)
|
|
60
|
+
console.log('Provider issuer (used for iss claim):', oidc.provider.issuer)
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
describe('RFC 9207 - Authorization redirect with iss parameter', () => {
|
|
65
|
+
it('should include iss parameter when redirecting after authorization', async () => {
|
|
66
|
+
const providerUri = 'https://localhost:8443'
|
|
67
|
+
const host = SolidHost.from({ providerUri })
|
|
68
|
+
|
|
69
|
+
const argv = {
|
|
70
|
+
host,
|
|
71
|
+
dbPath,
|
|
72
|
+
saltRounds: 5
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const oidc = fromServerConfig(argv)
|
|
76
|
+
|
|
77
|
+
// Dynamically import BaseRequest from oidc-op
|
|
78
|
+
const { default: BaseRequest } = await import('@solid/oidc-op/src/handlers/BaseRequest.js')
|
|
79
|
+
|
|
80
|
+
// Create a mock request/response to test the redirect behavior
|
|
81
|
+
const mockReq = {
|
|
82
|
+
method: 'GET',
|
|
83
|
+
query: {
|
|
84
|
+
response_type: 'code',
|
|
85
|
+
redirect_uri: 'https://app.example.com/callback',
|
|
86
|
+
client_id: 'https://app.example.com',
|
|
87
|
+
state: 'test-state'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const mockRes = {
|
|
92
|
+
redirectCalled: false,
|
|
93
|
+
redirectUrl: '',
|
|
94
|
+
redirect (url) {
|
|
95
|
+
this.redirectCalled = true
|
|
96
|
+
this.redirectUrl = url
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const request = new BaseRequest(mockReq, mockRes, oidc.provider)
|
|
101
|
+
request.params = mockReq.query
|
|
102
|
+
|
|
103
|
+
// Simulate a successful authorization by calling redirect with auth data
|
|
104
|
+
try {
|
|
105
|
+
request.redirect({ code: 'test-auth-code' })
|
|
106
|
+
} catch (err) {
|
|
107
|
+
// The redirect throws a HandledError, which is expected behavior
|
|
108
|
+
// We just need to check that the redirect was called with the right URL
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
expect(mockRes.redirectCalled).to.be.true
|
|
112
|
+
expect(mockRes.redirectUrl).to.exist
|
|
113
|
+
|
|
114
|
+
// Parse the redirect URL to check for iss parameter
|
|
115
|
+
const redirectUrl = new URL(mockRes.redirectUrl)
|
|
116
|
+
|
|
117
|
+
// The iss parameter can be in either the query string or hash fragment
|
|
118
|
+
// depending on the response_mode (query or fragment)
|
|
119
|
+
let issParam = redirectUrl.searchParams.get('iss')
|
|
120
|
+
if (!issParam && redirectUrl.hash) {
|
|
121
|
+
// Check in the hash fragment
|
|
122
|
+
const hashParams = new URLSearchParams(redirectUrl.hash.substring(1))
|
|
123
|
+
issParam = hashParams.get('iss')
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
console.log('Redirect URL:', mockRes.redirectUrl)
|
|
127
|
+
console.log('RFC 9207 - iss parameter in redirect:', issParam)
|
|
128
|
+
|
|
129
|
+
// RFC 9207: The iss parameter MUST be present and match the provider issuer
|
|
130
|
+
expect(issParam, 'RFC 9207: iss parameter must be present in authorization response').to.exist
|
|
131
|
+
expect(issParam).to.not.be.null
|
|
132
|
+
expect(issParam).to.equal(providerUri)
|
|
133
|
+
})
|
|
40
134
|
})
|
|
41
|
-
})
|
|
135
|
+
})
|
|
@@ -11,7 +11,7 @@ import ldnode, { createServer } from '../../index.mjs'
|
|
|
11
11
|
|
|
12
12
|
const __filename = fileURLToPath(import.meta.url)
|
|
13
13
|
const __dirname = path.dirname(__filename)
|
|
14
|
-
console.log(getTestRoot())
|
|
14
|
+
// console.log(getTestRoot())
|
|
15
15
|
|
|
16
16
|
describe('LDNODE params', function () {
|
|
17
17
|
describe('suffixMeta', function () {
|
|
@@ -46,7 +46,7 @@ describe('LDNODE params', function () {
|
|
|
46
46
|
|
|
47
47
|
it('should fallback on current working directory', function () {
|
|
48
48
|
assert.equal(path.normalize(ldp.locals.ldp.resourceMapper._rootPath), path.normalize(process.cwd()))
|
|
49
|
-
console.log('Root path is', ldp.locals.ldp.resourceMapper._rootPath)
|
|
49
|
+
// console.log('Root path is', ldp.locals.ldp.resourceMapper._rootPath)
|
|
50
50
|
})
|
|
51
51
|
|
|
52
52
|
it('new : should find resource in correct path', function (done) {
|
|
@@ -57,7 +57,7 @@ describe('LDNODE params', function () {
|
|
|
57
57
|
const fileContent = '<#current> <#temp> 123 .'
|
|
58
58
|
fs.mkdirSync(dirPath, { recursive: true })
|
|
59
59
|
fs.writeFileSync(filePath, fileContent)
|
|
60
|
-
console.log('Wrote file to', filePath)
|
|
60
|
+
// console.log('Wrote file to', filePath)
|
|
61
61
|
server.get('/sampleContainer/example.ttl')
|
|
62
62
|
.expect('Link', /http:\/\/www.w3.org\/ns\/ldp#Resource/)
|
|
63
63
|
.expect(200)
|
|
@@ -71,7 +71,7 @@ describe('LDNODE params', function () {
|
|
|
71
71
|
it.skip('initial : should find resource in correct path', function (done) {
|
|
72
72
|
// Write to the default resources directory, matching the server's root
|
|
73
73
|
const resourcePath = path.join('sampleContainer', 'example.ttl')
|
|
74
|
-
console.log('initial : Writing test resource to', resourcePath)
|
|
74
|
+
// console.log('initial : Writing test resource to', resourcePath)
|
|
75
75
|
setTestRoot(path.join(__dirname, '../resources/'))
|
|
76
76
|
write('<#current> <#temp> 123 .', resourcePath)
|
|
77
77
|
|
|
@@ -102,7 +102,7 @@ describe('LDNODE params', function () {
|
|
|
102
102
|
const fileContent = '<#current> <#temp> 123 .'
|
|
103
103
|
fs.mkdirSync(dirPath, { recursive: true })
|
|
104
104
|
fs.writeFileSync(filePath, fileContent)
|
|
105
|
-
console.log('Wrote file to', filePath)
|
|
105
|
+
// console.log('Wrote file to', filePath)
|
|
106
106
|
|
|
107
107
|
server.get('/sampleContainer/example.ttl')
|
|
108
108
|
.expect('Link', /http:\/\/www.w3.org\/ns\/ldp#Resource/)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"
|
|
1
|
+
{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"69eaaa0e44e3f95d54a021c5b41e6d72","client_secret":"676dd69f6581893b7f99c474575e8e35","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"provider":{"url":"https://localhost:3457","configuration":{"issuer":"https://localhost:3457","jwks_uri":"https://localhost:3457/jwks","scopes_supported":["openid","offline_access"],"response_types_supported":["code","code token","code id_token","id_token","id_token token","code id_token token","none"],"token_types_supported":["legacyPop","dpop"],"response_modes_supported":["query","fragment"],"grant_types_supported":["authorization_code","implicit","refresh_token","client_credentials"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256","RS384","RS512","none"],"token_endpoint_auth_methods_supported":["client_secret_basic"],"token_endpoint_auth_signing_alg_values_supported":["RS256"],"display_values_supported":[],"claim_types_supported":["normal"],"claims_supported":[],"claims_parameter_supported":false,"request_parameter_supported":true,"request_uri_parameter_supported":false,"require_request_uri_registration":false,"check_session_iframe":"https://localhost:3457/session","end_session_endpoint":"https://localhost:3457/logout","authorization_endpoint":"https://localhost:3457/authorize","token_endpoint":"https://localhost:3457/token","userinfo_endpoint":"https://localhost:3457/userinfo","registration_endpoint":"https://localhost:3457/register"},"jwks":{"keys":[{"kid":"lNZOB-DPE1k","kty":"RSA","alg":"RS256","n":"uvih8HfZj7Wu5Y8knLHxRY6v7oHL2jXWD-B6hXCreYhwaG9EEUt6Rp94p8-JBug3ywo8C_9dNg0RtQLEttcIC_vhqqlJI3pZxpGKXuD9h7XK-PppFVvgnfIGADG0Z-WzbcGDxlefStohR31Hjw5U3ioG3VtXGAYbqlOHM1l2UgDMJwBD5qwFmPP8gp5E2WQKCsuLvxDuOrkAbSDjw2zaI3RRmbLzdj4QkGej8GXhBptgM9RwcKmnoXu0sUdlootmcdiEg74yQ9M6EshNMhiv4k_W0rl7RqVOEL2PsAdmdbF_iWL8a90rGYOEILBrlU6bBR2mTvjV_Hvq-ifFy1YAmQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"Y38YKDtydoE","kty":"RSA","alg":"RS384","n":"tfgZKLjc8UMIblfAlVibJI_2uAxDNprn2VVLebS0sp6d1mtCXQkMYLlJ6e-7kavl8we391Ovnq5bRgpsFRq_LtRX9MpVlfioAUHwWPEG-R6vrQjgo4uynVhI3UEPHyNmZA5J4u34HNVTfAgmquomwwOmOv29ZNRxuYP1kVtscz1JeFPwg6LA7BxWrLc9ev4FQR6tjJKdo2kdLjAXR92odbCzJZ_jdYT3vIVCexMHxhoKnqCImkhfgKbGXcPHXWcelmuA2tzBaLut-Jjo0nJVQjRNDqy0Gyac0TptwFIxaiyHeTqugolUmEaJSfBSLszIRdlOTIGPJ7zdg5dJFK_Lxw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"WyMVv6BJ5Dk","kty":"RSA","alg":"RS512","n":"5JDlpbm2TjSW1wpdUZc5NHOqVVrNH_GumoODK_mk-MqImaIRpdR9b1ZJrK6FrW7HIF2bXvebD7olmp9a1goqe-ILbL_ORmhzlhRtyhjWQ-UOZqK5yOXqXXGQXgmok6TN-s55A-h_g12A7Yk5Y5S8EVa9EA4Axwqvm-Q_AkH0yS1qJo6BXYXb1fx205ucx-Ccot2LEBfxv8M7NOFTa-_G-sNchiKQMRoLhbZtLbSK2R1jkqGciEiRSLeXNG4nDu7Wd91-vhBixA1McxnzW96mW8lQwNXXo4gNH7SjONtYLlPQhZVEbmsQmXrOQN8a5RDkybFOIsbucItizSE9V_D7WQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"UykSj_HLgFA","kty":"RSA","alg":"RS256","n":"u79eQlGJN2XFNR-uEmPVtrB_ENRqaS81o6m63tZ5-PwhGHCwJ7rfVnnnvf6Ij_p91Z9pNpWBIVyZcw6UmQIoIBH-3BfxdaqhBxX9bf_N78TKj8_HU5IYjGijale4gog3kj9W2tJJO7R9iA43msjwLRD7pbAHp1iKFJgVTSXJlyLRbC82Dj4ivsEgJjPGvZt16OsGP5myIQwXEGzSPcEI0R9daZE5iM6xFZosaJ8B77eU-Aj3ciwxUBPi5BSZi2P1ZsF4QgSj3N7ZLbVKNW4FFr84IamA2YI0D7PyyNAE2PUZT8n0jHWRJKunuZuy5mgBY8H41KdBI6gNJqY90nHeJw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"BJDNTt8RpPE","kty":"RSA","alg":"RS384","n":"nXTd5AoT220nBkW6Zeax8caUI7_Tt0y4v9TEW8TOrzCVvhLBiKpQPjILUTfkGHzxPtysEzDQFSYdHWvg_fvGYItjJBunBMsKCNcb2_CDr2HXD6C0s62bAgct8bBSoaT1MLQ_3MaFKXSF3ZuB87X2B8CVUJ386HP2GY1kl54BuMdFELNZYhy9S_D0KHnQls52Vvb99X9WaYOyxvfr03PG-9EycnkWas5tn1pPFzT0DtJtBJ4IBtXQxTr98jpn_MCz1gRnMgzzkfSOcrMkkMXxePqxNINVKFXtRy7DaJiFOcCMbuK2RJUkSfY2uKcx0aKbp5Xhvix1W8N7c0Y90i6_6w","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"z8iijSOOIs4","kty":"RSA","alg":"RS512","n":"rPCHP9XeTGOLf1Ezxeq_bdGdvYQZa993YcSVudT0EN6drTWqjykhUVEkT4MGAvLvax38kLARbPUTgMUV9UckDDWn6lRq4q6IZ5pytNOieQKZHzjEmQGzlbnEn1F2m1i5SAfBL-qsnt5q2RXMAiIUXk9q1ChJEHJxOZxnRIoQMc7yTsjjSdtIZKePFiYFn0nsl3A234ByyIBRjzZeoYEtTQKjDR7fP9LO78oZAgpwoGqmfI4IltqQYkFoqrN8I8l1yiJGyuvZRgDXUZ2fxGOQx2WD4xvlFL2TOCfN1UaPE9R4JdbRLLAOf5u1Sqnh4XTjDBhBbVodsmmbtvk4wFo-GQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"zD76wa11A2Y","kty":"RSA","alg":"RS256","n":"nMaSioq1An1J3tbkmc-zRrR8lkbP-WUVRuYhDxQvV-OcBw1R6cdyCcoeFJ1zuUT7ne6BlU6GMPRHuRKaH0KuOaiktUYtXm06T_HvtKFgCQSAKjMUj_ZHfTAJP8ahUsIc0D995XKp7nIGRF7Iy7I24QQFPRh7PmGlREZ52GJgYQgbm020-sWani0MqHoUFBlWxZW9NEqY1c3brN_qWnzjRKly6Kkk3sW1XHPcRLvoHnHQ6TKXJ8pfl-bNjTfK6zq9fDCZ_TY3qQZy66yT_2XPO6X0GHTdJsZlCj7Jg0qrilTHUkJra1bppTSAtVSQnSmYt_IV8zOYiVdJ3kw2khPcKw","e":"AQAB","key_ops":["verify"],"ext":true}]}},"defaults":{},"registration":{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"
|
|
1
|
+
{"provider":{"url":"https://localhost:3457","configuration":{"issuer":"https://localhost:3457","jwks_uri":"https://localhost:3457/jwks","scopes_supported":["openid","offline_access"],"response_types_supported":["code","code token","code id_token","id_token","id_token token","code id_token token","none"],"token_types_supported":["legacyPop","dpop"],"response_modes_supported":["query","fragment"],"grant_types_supported":["authorization_code","implicit","refresh_token","client_credentials"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256","RS384","RS512","none"],"token_endpoint_auth_methods_supported":["client_secret_basic"],"token_endpoint_auth_signing_alg_values_supported":["RS256"],"display_values_supported":[],"claim_types_supported":["normal"],"claims_supported":[],"claims_parameter_supported":false,"request_parameter_supported":true,"request_uri_parameter_supported":false,"require_request_uri_registration":false,"check_session_iframe":"https://localhost:3457/session","end_session_endpoint":"https://localhost:3457/logout","authorization_endpoint":"https://localhost:3457/authorize","token_endpoint":"https://localhost:3457/token","userinfo_endpoint":"https://localhost:3457/userinfo","registration_endpoint":"https://localhost:3457/register"},"jwks":{"keys":[{"kid":"lNZOB-DPE1k","kty":"RSA","alg":"RS256","n":"uvih8HfZj7Wu5Y8knLHxRY6v7oHL2jXWD-B6hXCreYhwaG9EEUt6Rp94p8-JBug3ywo8C_9dNg0RtQLEttcIC_vhqqlJI3pZxpGKXuD9h7XK-PppFVvgnfIGADG0Z-WzbcGDxlefStohR31Hjw5U3ioG3VtXGAYbqlOHM1l2UgDMJwBD5qwFmPP8gp5E2WQKCsuLvxDuOrkAbSDjw2zaI3RRmbLzdj4QkGej8GXhBptgM9RwcKmnoXu0sUdlootmcdiEg74yQ9M6EshNMhiv4k_W0rl7RqVOEL2PsAdmdbF_iWL8a90rGYOEILBrlU6bBR2mTvjV_Hvq-ifFy1YAmQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"Y38YKDtydoE","kty":"RSA","alg":"RS384","n":"tfgZKLjc8UMIblfAlVibJI_2uAxDNprn2VVLebS0sp6d1mtCXQkMYLlJ6e-7kavl8we391Ovnq5bRgpsFRq_LtRX9MpVlfioAUHwWPEG-R6vrQjgo4uynVhI3UEPHyNmZA5J4u34HNVTfAgmquomwwOmOv29ZNRxuYP1kVtscz1JeFPwg6LA7BxWrLc9ev4FQR6tjJKdo2kdLjAXR92odbCzJZ_jdYT3vIVCexMHxhoKnqCImkhfgKbGXcPHXWcelmuA2tzBaLut-Jjo0nJVQjRNDqy0Gyac0TptwFIxaiyHeTqugolUmEaJSfBSLszIRdlOTIGPJ7zdg5dJFK_Lxw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"WyMVv6BJ5Dk","kty":"RSA","alg":"RS512","n":"5JDlpbm2TjSW1wpdUZc5NHOqVVrNH_GumoODK_mk-MqImaIRpdR9b1ZJrK6FrW7HIF2bXvebD7olmp9a1goqe-ILbL_ORmhzlhRtyhjWQ-UOZqK5yOXqXXGQXgmok6TN-s55A-h_g12A7Yk5Y5S8EVa9EA4Axwqvm-Q_AkH0yS1qJo6BXYXb1fx205ucx-Ccot2LEBfxv8M7NOFTa-_G-sNchiKQMRoLhbZtLbSK2R1jkqGciEiRSLeXNG4nDu7Wd91-vhBixA1McxnzW96mW8lQwNXXo4gNH7SjONtYLlPQhZVEbmsQmXrOQN8a5RDkybFOIsbucItizSE9V_D7WQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"UykSj_HLgFA","kty":"RSA","alg":"RS256","n":"u79eQlGJN2XFNR-uEmPVtrB_ENRqaS81o6m63tZ5-PwhGHCwJ7rfVnnnvf6Ij_p91Z9pNpWBIVyZcw6UmQIoIBH-3BfxdaqhBxX9bf_N78TKj8_HU5IYjGijale4gog3kj9W2tJJO7R9iA43msjwLRD7pbAHp1iKFJgVTSXJlyLRbC82Dj4ivsEgJjPGvZt16OsGP5myIQwXEGzSPcEI0R9daZE5iM6xFZosaJ8B77eU-Aj3ciwxUBPi5BSZi2P1ZsF4QgSj3N7ZLbVKNW4FFr84IamA2YI0D7PyyNAE2PUZT8n0jHWRJKunuZuy5mgBY8H41KdBI6gNJqY90nHeJw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"BJDNTt8RpPE","kty":"RSA","alg":"RS384","n":"nXTd5AoT220nBkW6Zeax8caUI7_Tt0y4v9TEW8TOrzCVvhLBiKpQPjILUTfkGHzxPtysEzDQFSYdHWvg_fvGYItjJBunBMsKCNcb2_CDr2HXD6C0s62bAgct8bBSoaT1MLQ_3MaFKXSF3ZuB87X2B8CVUJ386HP2GY1kl54BuMdFELNZYhy9S_D0KHnQls52Vvb99X9WaYOyxvfr03PG-9EycnkWas5tn1pPFzT0DtJtBJ4IBtXQxTr98jpn_MCz1gRnMgzzkfSOcrMkkMXxePqxNINVKFXtRy7DaJiFOcCMbuK2RJUkSfY2uKcx0aKbp5Xhvix1W8N7c0Y90i6_6w","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"z8iijSOOIs4","kty":"RSA","alg":"RS512","n":"rPCHP9XeTGOLf1Ezxeq_bdGdvYQZa993YcSVudT0EN6drTWqjykhUVEkT4MGAvLvax38kLARbPUTgMUV9UckDDWn6lRq4q6IZ5pytNOieQKZHzjEmQGzlbnEn1F2m1i5SAfBL-qsnt5q2RXMAiIUXk9q1ChJEHJxOZxnRIoQMc7yTsjjSdtIZKePFiYFn0nsl3A234ByyIBRjzZeoYEtTQKjDR7fP9LO78oZAgpwoGqmfI4IltqQYkFoqrN8I8l1yiJGyuvZRgDXUZ2fxGOQx2WD4xvlFL2TOCfN1UaPE9R4JdbRLLAOf5u1Sqnh4XTjDBhBbVodsmmbtvk4wFo-GQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"zD76wa11A2Y","kty":"RSA","alg":"RS256","n":"nMaSioq1An1J3tbkmc-zRrR8lkbP-WUVRuYhDxQvV-OcBw1R6cdyCcoeFJ1zuUT7ne6BlU6GMPRHuRKaH0KuOaiktUYtXm06T_HvtKFgCQSAKjMUj_ZHfTAJP8ahUsIc0D995XKp7nIGRF7Iy7I24QQFPRh7PmGlREZ52GJgYQgbm020-sWani0MqHoUFBlWxZW9NEqY1c3brN_qWnzjRKly6Kkk3sW1XHPcRLvoHnHQ6TKXJ8pfl-bNjTfK6zq9fDCZ_TY3qQZy66yT_2XPO6X0GHTdJsZlCj7Jg0qrilTHUkJra1bppTSAtVSQnSmYt_IV8zOYiVdJ3kw2khPcKw","e":"AQAB","key_ops":["verify"],"ext":true}]}},"defaults":{},"registration":{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"69eaaa0e44e3f95d54a021c5b41e6d72","client_secret":"676dd69f6581893b7f99c474575e8e35","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"],"registration_access_token":"eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDozNDU3IiwiYXVkIjoiNjllYWFhMGU0NGUzZjk1ZDU0YTAyMWM1YjQxZTZkNzIiLCJzdWIiOiI2OWVhYWEwZTQ0ZTNmOTVkNTRhMDIxYzViNDFlNmQ3MiJ9.RYkuJ1wcFa-9J-wDyxnPkGjzQYV-DhkB-13VOzceJrT9zAL93P_ubUG0UEB7VPkzOYUg9j_TrX7Rc2Y0uYYZoOH0Vq43xrn0mEVY9wyBafKIexKJWb67rRi-3n3oRlHjC65AP_PLpuusCxQBdqq2Hv6YyR4cDfJs_C2ch3AEUfbKXWIndAmDjeLABum1RoD8LAOfda_bvLdVJEd5KnkTX3_ivKHH1IAcwZROuZdh5exwExrA2VOGDGTM_S34Vm-1tgFLusr_y7-7CYpsA9LBg7LL9KB4_kh6b50d640eV0KpeQUOCC4eQs7VCtvkh2Y0Tjz5HRQqEoFks0MJmbLcEw","registration_client_uri":"https://localhost:3457/register/69eaaa0e44e3f95d54a021c5b41e6d72","client_id_issued_at":1767721054,"client_secret_expires_at":0},"store":{}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"redirect_uris":["https://localhost:7000/api/oidc/rp/https%3A%2F%2Flocalhost%3A7000"],"client_id":"
|
|
1
|
+
{"redirect_uris":["https://localhost:7000/api/oidc/rp/https%3A%2F%2Flocalhost%3A7000"],"client_id":"c07d7590e034645477f72d1d3000b04e","client_secret":"1ba8ff54cc77601349cf9312d77c3336","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:7000","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:7000/goodbye"]}
|