solid-server 5.8.8-a4d2fc6d → 5.8.8-aa5971f5
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 +3 -2
- package/config/templates/server/index.html +1 -1
- package/coverage/tmp/coverage-2253-1767788604477-0.json +1 -0
- package/coverage/tmp/{coverage-2271-1767346114541-0.json → coverage-2254-1767788582829-0.json} +1 -1
- package/default-templates/server/index.html +1 -1
- package/eslint.config.mjs +2 -2
- package/lib/acl-checker.mjs +1 -2
- package/lib/handlers/cors-proxy.mjs +2 -2
- package/lib/handlers/get.mjs +10 -6
- package/lib/ldp.mjs +0 -1
- package/lib/models/account-manager.mjs +2 -2
- package/lib/webid/lib/get.mjs +0 -1
- package/package.json +20 -21
- package/solid-server-5.8.8.tgz +0 -0
- package/test/index.mjs +0 -1
- package/test/integration/account-manager-test.mjs +2 -2
- package/test/integration/acl-oidc-test.mjs +0 -1
- package/test/integration/authentication-oidc-test.mjs +12 -7
- package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +14 -9
- package/test/integration/params-test.mjs +5 -5
- package/test/resources/accounts/db/oidc/op/clients/{_key_e989e9f58cf29869c56a68ceb4256b69.json → _key_d76c5ec075d1b3e130a93bf247b05f54.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_a31de046443144df66179553447ffed2.json → _key_3c318e68342b7462e295cee3a612cd2a.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_cf92a9f132c1973db4163b653050ac5f.json → _key_95382781901361455f193f2b09fb9f46.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_25fe3c0bf640a75aecd0ccb1c2951eb1.json → _key_10c632398f20554089610cc169f07ef0.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_1a5ed3aa47de01ee7438f2537e1b5331.json → _key_d3f579e3e56ee4b3cc35ec8c0022368d.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_30b67c31ec6753bde889bbb157e879c5.json → _key_801a614f474ed46925df9e107dc94862.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/email-welcome-test.mjs +1 -1
- package/test/unit/utils-test.mjs +1 -3
- package/test/utils/index.mjs +0 -1
- package/test/utils.mjs +3 -4
- package/common/js/auth-buttons.js +0 -67
- package/common/js/index-buttons.js +0 -44
- package/config/defaults.js +0 -25
- package/config/templates/emails/delete-account.js +0 -49
- package/config/templates/emails/invalid-username.js +0 -30
- package/config/templates/emails/reset-password.js +0 -49
- package/config/templates/emails/welcome.js +0 -39
- package/coverage/tmp/coverage-2270-1767346136095-0.json +0 -1
- package/default-templates/emails/delete-account.js +0 -49
- package/default-templates/emails/invalid-username.js +0 -30
- package/default-templates/emails/reset-password.js +0 -49
- package/default-templates/emails/welcome.js +0 -39
package/eslint.config.mjs
CHANGED
|
@@ -21,7 +21,7 @@ export default [
|
|
|
21
21
|
},
|
|
22
22
|
rules: {
|
|
23
23
|
// StandardJS-like rules
|
|
24
|
-
'no-unused-vars': ['
|
|
24
|
+
'no-unused-vars': ['warn', {
|
|
25
25
|
args: 'none',
|
|
26
26
|
caughtErrors: 'none',
|
|
27
27
|
ignoreRestSiblings: true,
|
|
@@ -99,4 +99,4 @@ export default [
|
|
|
99
99
|
'resources/**'
|
|
100
100
|
]
|
|
101
101
|
}
|
|
102
|
-
]
|
|
102
|
+
]
|
package/lib/acl-checker.mjs
CHANGED
|
@@ -9,7 +9,6 @@ import aclCheck from '@solid/acl-check'
|
|
|
9
9
|
import Url, { URL } from 'url'
|
|
10
10
|
import { promisify } from 'util'
|
|
11
11
|
import fs from 'fs'
|
|
12
|
-
import httpFetch from 'node-fetch'
|
|
13
12
|
|
|
14
13
|
export const DEFAULT_ACL_SUFFIX = '.acl'
|
|
15
14
|
const ACL = rdf.Namespace('http://www.w3.org/ns/auth/acl#')
|
|
@@ -308,7 +307,7 @@ function fetchLocalOrRemote (mapper, serverUri) {
|
|
|
308
307
|
body = await promisify(fs.readFile)(path, { encoding: 'utf8' })
|
|
309
308
|
} else {
|
|
310
309
|
// Fetch the acl from the internet
|
|
311
|
-
const response = await
|
|
310
|
+
const response = await fetch(url)
|
|
312
311
|
body = await response.text()
|
|
313
312
|
contentType = response.headers.get('content-type')
|
|
314
313
|
}
|
|
@@ -3,7 +3,7 @@ import cors from 'cors'
|
|
|
3
3
|
import debug from '../debug.mjs'
|
|
4
4
|
import url from 'url'
|
|
5
5
|
import dns from 'dns'
|
|
6
|
-
import
|
|
6
|
+
import { isIP } from 'is-ip'
|
|
7
7
|
import ipRange from 'ip-range-check'
|
|
8
8
|
import validUrl from 'valid-url'
|
|
9
9
|
|
|
@@ -73,7 +73,7 @@ function extractProxyConfig (req, res, next) {
|
|
|
73
73
|
|
|
74
74
|
// Parse the URL and retrieve its host's IP address
|
|
75
75
|
const { protocol, host, hostname, path } = url.parse(uri)
|
|
76
|
-
if (
|
|
76
|
+
if (isIP(hostname)) {
|
|
77
77
|
addProxyConfig(null, hostname)
|
|
78
78
|
} else {
|
|
79
79
|
dns.lookup(hostname, addProxyConfig)
|
package/lib/handlers/get.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { createRequire } from 'module'
|
|
4
4
|
import fs from 'fs'
|
|
5
|
-
import glob from 'glob'
|
|
5
|
+
import { glob, hasMagic } from 'glob'
|
|
6
6
|
import _path from 'path'
|
|
7
7
|
import $rdf from 'rdflib'
|
|
8
8
|
import Negotiator from 'negotiator'
|
|
@@ -37,7 +37,7 @@ export default async function handler (req, res, next) {
|
|
|
37
37
|
|
|
38
38
|
res.header('Accept-Patch', 'text/n3, application/sparql-update, application/sparql-update-single-match')
|
|
39
39
|
res.header('Accept-Post', '*/*')
|
|
40
|
-
if (!path.endsWith('/') && !
|
|
40
|
+
if (!path.endsWith('/') && !hasMagic(path)) res.header('Accept-Put', '*/*')
|
|
41
41
|
|
|
42
42
|
// Set live updates
|
|
43
43
|
if (ldp.live) {
|
|
@@ -62,7 +62,7 @@ export default async function handler (req, res, next) {
|
|
|
62
62
|
// set Accept-Put if container do not exist
|
|
63
63
|
if (err.status === 404 && path.endsWith('/')) res.header('Accept-Put', 'text/turtle')
|
|
64
64
|
// use globHandler if magic is detected
|
|
65
|
-
if (err.status === 404 &&
|
|
65
|
+
if (err.status === 404 && hasMagic(path)) {
|
|
66
66
|
debug('forwarding to glob request')
|
|
67
67
|
return globHandler(req, res, next)
|
|
68
68
|
} else {
|
|
@@ -188,8 +188,9 @@ async function globHandler (req, res, next) {
|
|
|
188
188
|
nodir: true
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
try {
|
|
192
|
+
const matches = await glob(`${folderPath}*`, globOptions)
|
|
193
|
+
if (matches.length === 0) {
|
|
193
194
|
debugGlob('No files matching the pattern')
|
|
194
195
|
return next(HTTPError(404, 'No files matching glob pattern'))
|
|
195
196
|
}
|
|
@@ -230,7 +231,10 @@ async function globHandler (req, res, next) {
|
|
|
230
231
|
|
|
231
232
|
res.send(data)
|
|
232
233
|
next()
|
|
233
|
-
})
|
|
234
|
+
} catch (err) {
|
|
235
|
+
debugGlob('Error during glob: ' + err)
|
|
236
|
+
return next(HTTPError(500, 'Error processing glob pattern'))
|
|
237
|
+
}
|
|
234
238
|
}
|
|
235
239
|
|
|
236
240
|
// TODO: get rid of this ugly hack that uses the Allow handler to check read permissions
|
package/lib/ldp.mjs
CHANGED
|
@@ -12,7 +12,6 @@ import extend from 'extend'
|
|
|
12
12
|
import rimraf from 'rimraf'
|
|
13
13
|
import { exec } from 'child_process'
|
|
14
14
|
import * as ldpContainer from './ldp-container.mjs'
|
|
15
|
-
import fetch from 'node-fetch'
|
|
16
15
|
import { promisify } from 'util'
|
|
17
16
|
import withLock from './lock.mjs'
|
|
18
17
|
import { clearAclCache } from './acl-checker.mjs'
|
|
@@ -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/webid/lib/get.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-aa5971f5",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Tim Berners-Lee",
|
|
7
7
|
"email": "timbl@w3.org"
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
"homepage": "https://github.com/solid/node-solid-server",
|
|
60
60
|
"bugs": "https://github.com/solid/node-solid-server/issues",
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@fastify/busboy": "^
|
|
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.
|
|
65
|
+
"@solid/oidc-auth-manager": "^0.25.2",
|
|
66
66
|
"@solid/oidc-op": "^0.12.1",
|
|
67
|
-
"@solid/oidc-rp": "^0.12.
|
|
68
|
-
"@solid/solid-multi-rp-client": "^0.7.
|
|
67
|
+
"@solid/oidc-rp": "^0.12.1",
|
|
68
|
+
"@solid/solid-multi-rp-client": "^0.7.2",
|
|
69
69
|
"async-lock": "^1.4.1",
|
|
70
70
|
"body-parser": "^1.20.4",
|
|
71
71
|
"bootstrap": "^3.4.1",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"camelize": "^1.0.1",
|
|
74
74
|
"cheerio": "^1.1.2",
|
|
75
75
|
"colorette": "^2.0.20",
|
|
76
|
-
"commander": "^
|
|
76
|
+
"commander": "^14.0.2",
|
|
77
77
|
"cors": "^2.8.5",
|
|
78
78
|
"debug": "^4.4.3",
|
|
79
79
|
"eslint": "^9.39.2",
|
|
@@ -85,27 +85,26 @@
|
|
|
85
85
|
"express-session": "^1.18.2",
|
|
86
86
|
"extend": "^3.0.2",
|
|
87
87
|
"from2": "^2.3.0",
|
|
88
|
-
"fs-extra": "^
|
|
88
|
+
"fs-extra": "^11.3.3",
|
|
89
89
|
"get-folder-size": "^2.0.1",
|
|
90
|
-
"glob": "^
|
|
90
|
+
"glob": "^13.0.0",
|
|
91
91
|
"global-tunnel-ng": "^2.7.1",
|
|
92
92
|
"handlebars": "^4.7.8",
|
|
93
93
|
"http-proxy-middleware": "^2.0.9",
|
|
94
94
|
"inquirer": "^8.2.7",
|
|
95
|
-
"into-stream": "^
|
|
95
|
+
"into-stream": "^9.0.0",
|
|
96
96
|
"ip-range-check": "0.2.0",
|
|
97
|
-
"is-ip": "^
|
|
97
|
+
"is-ip": "^5.0.1",
|
|
98
98
|
"li": "^1.3.0",
|
|
99
|
-
"mashlib": "^
|
|
100
|
-
"mime-types": "^
|
|
101
|
-
"negotiator": "^0.
|
|
102
|
-
"node-fetch": "^2.7.0",
|
|
99
|
+
"mashlib": "^2.0.0",
|
|
100
|
+
"mime-types": "^3.0.2",
|
|
101
|
+
"negotiator": "^1.0.0",
|
|
103
102
|
"node-forge": "^1.3.3",
|
|
104
103
|
"node-mailer": "^0.1.1",
|
|
105
104
|
"nodemailer": "^7.0.12",
|
|
106
105
|
"oidc-op-express": "^0.0.3",
|
|
107
106
|
"owasp-password-strength-test": "^1.3.0",
|
|
108
|
-
"rdflib": "^2.3.
|
|
107
|
+
"rdflib": "^2.3.5",
|
|
109
108
|
"recursive-readdir": "^2.2.3",
|
|
110
109
|
"rimraf": "^3.0.2",
|
|
111
110
|
"solid-auth-client": "^2.5.6",
|
|
@@ -113,7 +112,7 @@
|
|
|
113
112
|
"solid-ws": "^0.4.3",
|
|
114
113
|
"text-encoder-lite": "^2.0.0",
|
|
115
114
|
"the-big-username-blacklist": "^1.5.2",
|
|
116
|
-
"ulid": "^
|
|
115
|
+
"ulid": "^3.0.2",
|
|
117
116
|
"urijs": "^1.19.11",
|
|
118
117
|
"uuid": "^13.0.0",
|
|
119
118
|
"valid-url": "^1.0.9",
|
|
@@ -123,15 +122,15 @@
|
|
|
123
122
|
"devDependencies": {
|
|
124
123
|
"@cxres/structured-headers": "^2.0.0-nesting.0",
|
|
125
124
|
"@eslint/js": "^9.39.2",
|
|
126
|
-
"@solid/solid-auth-oidc": "^0.6.
|
|
125
|
+
"@solid/solid-auth-oidc": "^0.6.1",
|
|
127
126
|
"c8": "^10.1.3",
|
|
128
127
|
"chai": "^4.5.0",
|
|
129
128
|
"chai-as-promised": "7.1.2",
|
|
130
|
-
"cross-env": "
|
|
129
|
+
"cross-env": "^10.1.0",
|
|
131
130
|
"dirty-chai": "2.0.1",
|
|
132
131
|
"globals": "^17.0.0",
|
|
133
132
|
"localstorage-memory": "1.0.3",
|
|
134
|
-
"mocha": "^
|
|
133
|
+
"mocha": "^11.7.5",
|
|
135
134
|
"nock": "^13.5.6",
|
|
136
135
|
"node-mocks-http": "^1.17.2",
|
|
137
136
|
"prep-fetch": "^0.1.0",
|
|
@@ -139,9 +138,9 @@
|
|
|
139
138
|
"sinon": "12.0.1",
|
|
140
139
|
"sinon-chai": "3.7.0",
|
|
141
140
|
"snyk": "^1.1301.2",
|
|
142
|
-
"supertest": "^
|
|
141
|
+
"supertest": "^7.2.2",
|
|
143
142
|
"turtle-validator": "1.1.1",
|
|
144
|
-
"whatwg-url": "
|
|
143
|
+
"whatwg-url": "^15.1.0"
|
|
145
144
|
},
|
|
146
145
|
"pre-commit": [
|
|
147
146
|
"lint"
|
package/solid-server-5.8.8.tgz
CHANGED
|
Binary file
|
package/test/index.mjs
CHANGED
|
@@ -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
|
})
|
|
@@ -6,7 +6,6 @@ import { UserStore } from '@solid/oidc-auth-manager'
|
|
|
6
6
|
import UserAccount from '../../lib/models/user-account.mjs'
|
|
7
7
|
import SolidAuthOIDC from '@solid/solid-auth-oidc'
|
|
8
8
|
|
|
9
|
-
import fetch from 'node-fetch'
|
|
10
9
|
import localStorage from 'localstorage-memory'
|
|
11
10
|
import { URL, URLSearchParams } from 'whatwg-url'
|
|
12
11
|
import { cleanDir, cp } from '../utils.mjs'
|
|
@@ -642,7 +641,7 @@ describe('Authentication API (OIDC)', () => {
|
|
|
642
641
|
// Since user is not logged in, /authorize redirects to /login
|
|
643
642
|
expect(res.status).to.equal(302)
|
|
644
643
|
|
|
645
|
-
loginUri = new URL(res.headers.get('location'))
|
|
644
|
+
loginUri = new URL(res.headers.get('location'), aliceServerUri)
|
|
646
645
|
expect(loginUri.toString().startsWith(aliceServerUri + '/login'))
|
|
647
646
|
.to.be.true()
|
|
648
647
|
|
|
@@ -686,9 +685,11 @@ describe('Authentication API (OIDC)', () => {
|
|
|
686
685
|
})
|
|
687
686
|
.then(res => {
|
|
688
687
|
expect(res.status).to.equal(302)
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
688
|
+
const location = res.headers.get('location')
|
|
689
|
+
postLoginUri = new URL(location, aliceServerUri).toString()
|
|
690
|
+
// Native fetch: get first set-cookie header
|
|
691
|
+
const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
|
|
692
|
+
cookie = setCookieHeaders[0]
|
|
692
693
|
// Successful login gets redirected back to /authorize and then
|
|
693
694
|
// back to app
|
|
694
695
|
expect(postLoginUri.startsWith(aliceServerUri + '/sharing'))
|
|
@@ -712,7 +713,9 @@ describe('Authentication API (OIDC)', () => {
|
|
|
712
713
|
})
|
|
713
714
|
.then(res => {
|
|
714
715
|
expect(res.status).to.equal(302)
|
|
715
|
-
|
|
716
|
+
const location = res.headers.get('location')
|
|
717
|
+
postSharingUri = new URL(location, aliceServerUri).toString()
|
|
718
|
+
|
|
716
719
|
// cookie = res.headers.get('set-cookie')
|
|
717
720
|
|
|
718
721
|
// Successful login gets redirected back to /authorize and then
|
|
@@ -724,7 +727,9 @@ describe('Authentication API (OIDC)', () => {
|
|
|
724
727
|
.then(res => {
|
|
725
728
|
// User gets redirected back to original app
|
|
726
729
|
expect(res.status).to.equal(302)
|
|
727
|
-
|
|
730
|
+
const location = res.headers.get('location')
|
|
731
|
+
callbackUri = location.startsWith('http') ? location : new URL(location, aliceServerUri).toString()
|
|
732
|
+
|
|
728
733
|
expect(callbackUri.startsWith('https://app.example.com#'))
|
|
729
734
|
})
|
|
730
735
|
})
|
|
@@ -6,7 +6,6 @@ import { UserStore } from '@solid/oidc-auth-manager'
|
|
|
6
6
|
import UserAccount from '../../lib/models/user-account.mjs'
|
|
7
7
|
import SolidAuthOIDC from '@solid/solid-auth-oidc'
|
|
8
8
|
|
|
9
|
-
import fetch from 'node-fetch'
|
|
10
9
|
import localStorage from 'localstorage-memory'
|
|
11
10
|
import { URL, URLSearchParams } from 'whatwg-url'
|
|
12
11
|
import { cleanDir, cp } from '../utils.mjs'
|
|
@@ -463,7 +462,7 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
|
|
|
463
462
|
// Since user is not logged in, /authorize redirects to /login
|
|
464
463
|
expect(res.status).to.equal(302)
|
|
465
464
|
|
|
466
|
-
loginUri = new URL(res.headers.get('location'))
|
|
465
|
+
loginUri = new URL(res.headers.get('location'), aliceServerUri)
|
|
467
466
|
expect(loginUri.toString().startsWith(aliceServerUri + '/login'))
|
|
468
467
|
.to.be.true()
|
|
469
468
|
|
|
@@ -507,8 +506,11 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
|
|
|
507
506
|
})
|
|
508
507
|
.then(res => {
|
|
509
508
|
expect(res.status).to.equal(302)
|
|
510
|
-
|
|
511
|
-
|
|
509
|
+
const location = res.headers.get('location')
|
|
510
|
+
postLoginUri = new URL(location, aliceServerUri).toString()
|
|
511
|
+
// Native fetch: get first set-cookie header
|
|
512
|
+
const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
|
|
513
|
+
cookie = setCookieHeaders[0]
|
|
512
514
|
|
|
513
515
|
// Successful login gets redirected back to /authorize and then
|
|
514
516
|
// back to app
|
|
@@ -533,20 +535,23 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
|
|
|
533
535
|
})
|
|
534
536
|
.then(res => {
|
|
535
537
|
expect(res.status).to.equal(302)
|
|
536
|
-
const
|
|
537
|
-
const
|
|
538
|
+
const location = res.headers.get('location')
|
|
539
|
+
const postSharingUri = new URL(location, aliceServerUri).toString()
|
|
540
|
+
const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
|
|
541
|
+
const cookieFromSharing = setCookieHeaders[0] || cookie
|
|
538
542
|
|
|
539
543
|
// Successful login gets redirected back to /authorize and then
|
|
540
544
|
// back to app
|
|
541
|
-
expect(
|
|
545
|
+
expect(postSharingUri.startsWith(aliceServerUri + '/authorize'))
|
|
542
546
|
.to.be.true()
|
|
543
547
|
|
|
544
|
-
return fetch(
|
|
548
|
+
return fetch(postSharingUri, { redirect: 'manual', headers: { cookie: cookieFromSharing } })
|
|
545
549
|
})
|
|
546
550
|
.then(res => {
|
|
547
551
|
// User gets redirected back to original app
|
|
548
552
|
expect(res.status).to.equal(302)
|
|
549
|
-
|
|
553
|
+
const location = res.headers.get('location')
|
|
554
|
+
callbackUri = location.startsWith('http') ? location : new URL(location, aliceServerUri).toString()
|
|
550
555
|
expect(callbackUri.startsWith('https://app.example.com#'))
|
|
551
556
|
})
|
|
552
557
|
})
|
|
@@ -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":"d76c5ec075d1b3e130a93bf247b05f54","client_secret":"5fa106cf0bf13777763e37fc42194dd4","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":"d76c5ec075d1b3e130a93bf247b05f54","client_secret":"5fa106cf0bf13777763e37fc42194dd4","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.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDozNDU3IiwiYXVkIjoiZDc2YzVlYzA3NWQxYjNlMTMwYTkzYmYyNDdiMDVmNTQiLCJzdWIiOiJkNzZjNWVjMDc1ZDFiM2UxMzBhOTNiZjI0N2IwNWY1NCJ9.Gk-YXJTfwnp0YyIvtgvyyIowYSf0QLVfbb1ieWn1M3CM_967NVwhwhHxV7BDVkBMVODQ5-yqvU8_h16jYimfQOPQajQeJhKNR7k5w-F8oLDXYB5Nwqxr6riWdi9Zd-JIDE3TUtbJncSRFURAa85J7KtKxkS5I16BbLbGAHAR-XQCM03HITP6vd1fH2Rc1KYc2vC9B8gjbmD1NW_QwtGjx6IndNrxGas9tvDXVu9hxteu-IWRZd0NJtIxsBbDA9R7Q97Kxw1ie4tsQdRMvhEuU3WiqLVaaKsbuVW8ZnkiKXkavoQXB15Qx1stuSo7IMfWlxkPndgFKv3LNEQ4tX3n_A","registration_client_uri":"https://localhost:3457/register/d76c5ec075d1b3e130a93bf247b05f54","client_id_issued_at":1767788587,"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":"3c318e68342b7462e295cee3a612cd2a","client_secret":"1799a891bc2fedd28d9931bab421fa73","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"]}
|