chore(deps): Update ts-dpop to v0.2.7.

This commit is contained in:
Matthieu Bosquet 2020-12-19 17:26:24 +00:00 committed by GitHub
parent 731b44d5b9
commit 6077cc1f4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 105 additions and 85 deletions

143
package-lock.json generated
View File

@ -483,9 +483,9 @@
}
},
"@comunica/actor-rdf-parse-html-microdata": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.18.0.tgz",
"integrity": "sha512-2IjfPDXqS6IW+9k6RM2mcd8dx9gW4NeBL1teNfSpAIH3mBdRdum+FAfbeWirOOIX+lpKJ3pKo57mXf5eUFNkXw==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.18.1.tgz",
"integrity": "sha512-ErW0ngwOnEXbGr2fskQYBvau1ZsvB3IbQimAcNAx9m+pIeoDF51+qjpTTZpcckgbTN9wUsNfGCwxk9jbKH2nTQ==",
"requires": {
"microdata-rdf-streaming-parser": "^1.1.0"
}
@ -6082,9 +6082,9 @@
"dev": true
},
"jose": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/jose/-/jose-3.1.3.tgz",
"integrity": "sha512-ppasqfGfKZ8hmpJVAuXfQR8S+AiDCcUa2Cj1WDw+I4Ui7J9iIfsg1CIjMSlwxN1PtK6yiSKqIXfi9mTDrXQm/w=="
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/jose/-/jose-3.5.0.tgz",
"integrity": "sha512-pW9z+ny33gxX2wXLQl3SkPQWGaUvOMYLijuiMHIHUYIDsrZjdMqYYS5UTkusuMzZkqe5T8YImA4FOqqB1IWmRg=="
},
"js-tokens": {
"version": "4.0.0",
@ -6484,7 +6484,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
@ -6810,6 +6809,11 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"nmspc": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/nmspc/-/nmspc-0.2.4.tgz",
"integrity": "sha512-8/QG1B93zCXqkCQfOnQ1Ihh54+jWgVddqS3i3/OPUyVc4ChNtcU5H7I65jQ9z1WqM3ywV/bacmy+c14IvzccGg=="
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
@ -9335,29 +9339,31 @@
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
},
"ts-dpop": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ts-dpop/-/ts-dpop-0.1.1.tgz",
"integrity": "sha512-KrIafLRqG9XLiRghAe7TKy9H0fQ1VNxdG+rOc5k/DoN9dJCQKFWKSyggwPoi5y5sQX2OZKaJCgbQO5c3aH1e5g==",
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/ts-dpop/-/ts-dpop-0.2.7.tgz",
"integrity": "sha512-vu7xLgEVHzmUYonI6hfHeGXeGZiLSlDInI26AZ0UrFNBVqGR6OG+gIOF8t/Wtr+xPgFb0jJmMRMM5XPEij2Q7A==",
"requires": {
"cross-fetch": "^3.0.6",
"jose": "^3.1.0",
"jose": "^3.3.2",
"lru-cache": "^6.0.0",
"n3": "^1.6.4",
"nmspc": "^0.2.2",
"rdf-data-factory": "^1.0.4",
"rdf-dereference": "^1.6.0",
"rdf-parse": "^1.6.1",
"rdf-store-stream": "^1.1.0",
"ts-guards": "^0.5.1",
"uuid": "^8.3.1"
"ts-guards": "^0.5.1"
},
"dependencies": {
"@comunica/actor-abstract-mediatyped": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.18.0.tgz",
"integrity": "sha512-bu6QorV2OPdHHWuw6lbI87mTTAZKS6TbQA6fNBFBw7LfwMfLugMrjUTxJcJ/UKXV4uPkpJRhhKEG6hns+k0S/g=="
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.18.1.tgz",
"integrity": "sha512-pjAf0agOpADEVBKp11XhFGH33FML4LTxO08JJmr6Qf6FlbMAhU3KFBrK34nYZ/5QNdhZwE2i8eFmjNC/2CbOKA=="
},
"@comunica/actor-http-native": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-http-native/-/actor-http-native-1.18.0.tgz",
"integrity": "sha512-wooUx1R0VKfDxtiui5dS5JSstQmRxl1fQY9q6iwYlEMcMXST6RsIhcRi5MWqEaJE5cVsTEBMXO4Fqdl51kvgeg==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-http-native/-/actor-http-native-1.18.1.tgz",
"integrity": "sha512-nQ7dlB3GkP46h28XVyOi43Q4fuc1pUaYWFz6YQeTOgyJMnm/fgNvu9ECsFdG4rYVo3377VVxpvCylGx936S+wQ==",
"requires": {
"@types/parse-link-header": "^1.0.0",
"cross-fetch": "^3.0.5",
@ -9366,37 +9372,37 @@
}
},
"@comunica/actor-rdf-parse-html": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.18.0.tgz",
"integrity": "sha512-0mdU7msQJwdSVtSSAOGE3xykaW22Zg/bytjBe0sG+/S82wGnZdTYEmchzR4prH/R+IyRhZHVgNzGzmcaasX66A==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.18.1.tgz",
"integrity": "sha512-Wx5c/4bN7ohJjsp397JeX8YTDZXMp3VWEFilIjl4/CtAoGV4BzYlHPFo3ZCuRjRpn2EPyJF0Itxedio0b30u3A==",
"requires": {
"@comunica/bus-rdf-parse-html": "^1.18.0",
"@comunica/bus-rdf-parse-html": "^1.18.1",
"@types/rdf-js": "*",
"htmlparser2": "^5.0.0"
}
},
"@comunica/actor-rdf-parse-html-rdfa": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.18.0.tgz",
"integrity": "sha512-tvfQP01uxcgZIDF6aXO83ckzNf/lrkLavLI2QQciuLXToCDFgTwXqyEPeZs4/nf1L3uuXJOIzP0Bq0ZnVAgLBw==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.18.1.tgz",
"integrity": "sha512-c1ae+6F+ohTIAscItsVI/+dKY5tKx7sJwKrrznwgXoPlkFxk7aI9W03Du8X1FsT+spNlk3+CIA/lUPrZ53Lhhw==",
"requires": {
"rdfa-streaming-parser": "^1.4.0"
}
},
"@comunica/actor-rdf-parse-html-script": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.18.0.tgz",
"integrity": "sha512-j/Pcj3oXPDXjnhshKdtk355HhZDNIUItzkDxH1EBdL9S0Ll6HbEt0DJwXy51JRFxiK/ZpfXWGCHuOC1rOtP1oQ==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.18.1.tgz",
"integrity": "sha512-KI3h3Qb+/IibzFJjLWYVFn43pM0oyRaDovm9VzyGass4wbxmMUVm69lgOLTEcsmOVmTPNcvNI4dYa03g/zjwjA==",
"requires": {
"@comunica/bus-rdf-parse-html": "^1.18.0",
"@comunica/bus-rdf-parse-html": "^1.18.1",
"@types/rdf-js": "*",
"relative-to-absolute-iri": "^1.0.5"
}
},
"@comunica/actor-rdf-parse-jsonld": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.18.0.tgz",
"integrity": "sha512-SbILO+HnBi88+M3XQQ7ZV3OKy3eqH0VHn6QuKYTcucOzcYtz60CeRRC0IVhEIKIbEHOpupZ3ZWOQzGudKZ71Rw==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.18.1.tgz",
"integrity": "sha512-3X3REVIqRTgjzWUsfVgJQsyZ75J/SSl7mHfFchNncxRdm14hq67RApO0gztdSLj4t4Kv1HtciEm/zs+nEuKmNw==",
"requires": {
"@types/rdf-js": "*",
"jsonld-context-parser": "^2.1.1",
@ -9405,83 +9411,83 @@
}
},
"@comunica/actor-rdf-parse-n3": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.18.0.tgz",
"integrity": "sha512-4aud6izDZCzgNuo0ggCCQf4TdW9vyN0BU29kEXvWfX0kX6xIeTENOVuCddRSXEl9ndaD6WrJtnpG2GDu/tlqUA==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.18.1.tgz",
"integrity": "sha512-5GQ+PaabjXSgu3mR8tN2ZWyy+pSaq6rIyHDNKAbh3AkG70j6tQWxfa4OZIk2+ImDEjtPVofYsJZnY5VSZhZEwg==",
"requires": {
"@types/n3": "^1.4.4",
"n3": "^1.6.3"
}
},
"@comunica/actor-rdf-parse-rdfxml": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.18.0.tgz",
"integrity": "sha512-2bqH5JmCISZbE+9kdE6H42TVYEGArIzosWJrtPrAzhWhAi2hN7c+wpo8arqRe8UB8MxO58JbnuxxGaNJcSYonw==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.18.1.tgz",
"integrity": "sha512-qCn8UovKW6xNCoYgR13MBPi8mOOSorRxPLpSOt7eVFEADFMkjzVJAbyExN+8EzHgrJj2DIwQixD2kYnGaEkz+Q==",
"requires": {
"rdfxml-streaming-parser": "^1.4.0"
}
},
"@comunica/actor-rdf-parse-xml-rdfa": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.18.0.tgz",
"integrity": "sha512-Sp9VRNL4dVv6IQTSwjAY+4o46WV/SZq4PRebU/enWF82w5Pbj1Q4s1iRNXb+BZFUO7s3mihBcQ62+sJ4Ds7Big==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.18.1.tgz",
"integrity": "sha512-99g5zw57ZbxSKiv0daZiEWhu70Efs0dqKQsf4hIHl+1mZJ7gjYdXrA1gSb2h/bnvezZKyiqjkc9VxzD+J7dv0A==",
"requires": {
"rdfa-streaming-parser": "^1.3.0"
}
},
"@comunica/bus-http": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-1.18.0.tgz",
"integrity": "sha512-SAfI+1Rk6caHlpRBpxiLpxmBWOA+dho4IurU+++LsmwC25353W8hjOSSg0GPnuLBebFO7YVcB1rTOyJfp53kcg==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-1.18.1.tgz",
"integrity": "sha512-ovEy1HEagq2cla3WSCLyrA6LGMsfNyc7sm9UBJUnaX4KnYlOoombibsCwqiJhGfvHHV019yFj1l7NDICF3ZD3Q==",
"requires": {
"is-stream": "^2.0.0",
"web-streams-node": "^0.4.0"
}
},
"@comunica/bus-init": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-1.18.0.tgz",
"integrity": "sha512-BjDX31UWf2iTCVhhe3NllfizYGoE4Vh0YaY4s3RLOKpMCN6UlplmIprUELRSju0E8CRR2KHddNC1j5wt3a4cTw=="
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-1.18.1.tgz",
"integrity": "sha512-eXIfQM4cl3dKwSd5GVt2lxcTxiSqxZZ/u8rjQeS/vncdRDfIAY7WS1qBHARUXEgeLRu5LX5W4Bq13TGwn+dkNQ=="
},
"@comunica/bus-rdf-parse": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.18.0.tgz",
"integrity": "sha512-zXH7AwnkF10agvNEXY08h8HAevjmcILl/S3CovMTtQLMaU1bGSQCjcYJl6QOIqYehYMntsvjeSKTSZ+VhESgOg==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.18.1.tgz",
"integrity": "sha512-GNNCd1cEp+mjVeUG8eHI3u1x8+ic6MatHRET/ujMeouC0kI1jX31R57PoX9QWzopOx73tueI2i9E+5xLQDa29A==",
"requires": {
"@comunica/actor-abstract-mediatyped": "^1.18.0",
"@comunica/actor-abstract-mediatyped": "^1.18.1",
"@types/rdf-js": "*"
}
},
"@comunica/bus-rdf-parse-html": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.18.0.tgz",
"integrity": "sha512-QGjV3p7O2c1mJOURrXHe+9uifLMPLwfW/jAhBpVt4UVzIoZl5onK9e8ukJBjxsCl1pnH07KOPO1i91VyBOWjWA==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.18.1.tgz",
"integrity": "sha512-bV4N7ABCshWi0S4VliibGLtazYGiToVyeMqhFBMyl/v8IaPOW+2QbE4JfXcen8+ieHqonFt28W/x9gbh7VEZeA==",
"requires": {
"@types/rdf-js": "*"
}
},
"@comunica/core": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/core/-/core-1.18.0.tgz",
"integrity": "sha512-7JCzSJkilbemhIiSSpFuylbEqMntWp+JSs3gNgvb+r7NzxDXlB9l1Ng3UVJg6QvoO8EuoprwRGyeiG2824TarQ==",
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/core/-/core-1.18.1.tgz",
"integrity": "sha512-wXLOu/Wkt0zUy6XwI4W7IaXkcLmEkxs0P/xWY3huMdG5ixvFxVlOz+EuKz5sNCpeGiqZsMON4I9YvgiUlnZv0Q==",
"requires": {
"immutable": "^3.8.2"
}
},
"@comunica/mediator-combine-union": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-1.18.0.tgz",
"integrity": "sha512-AO6DxwSQubD4p6dWllom3jXLP7zEYWVsI3pmXsnJYP8TqUtcJ0Mah5JaCnzbHIcRToZIy/WUDUN9Kcxp0ZwCXA=="
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-1.18.1.tgz",
"integrity": "sha512-w4S4WNwjh+8zjz154YaEL1p4VWYYD5yNhPTH/mIvk5IS2R6TLqTQ0qlk5JvOvDA5aL8IiOndG0rTPXxFS8dhxw=="
},
"@comunica/mediator-number": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-1.18.0.tgz",
"integrity": "sha512-JGoUQRJQSLiAkBPAE2591DhMyv0mT24l91vyfo5TPKNtHXa0ull12fYRpPaXbRTGGAENKvxoEFR491vi1XIb8A=="
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-1.18.1.tgz",
"integrity": "sha512-nJNrMi01l9eLEttWlcIvabLoOEr31Dw19VoOClYvPC315e60DYuX4b5PTZNIuTTjv5x39DVRQ2qjFVMdFjn3sQ=="
},
"@comunica/mediator-race": {
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-1.18.0.tgz",
"integrity": "sha512-8iEFxjQdi4wCSz+4yVywhF/DpcWWDxZ0GZZwc2Qp6ShyX79Zn/I2LEDuj50Uuh+0fHDt91H5Em9UhRMI7IRtLQ=="
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-1.18.1.tgz",
"integrity": "sha512-UN9yT62mHTbIvCxyMyMx63wbYVB2Z7tq0pzHrVOUTlx09QMHkyIr8wVkaAiTzXfm/PKTX9awNNpmXrAz9Sw8kA=="
},
"htmlparser2": {
"version": "5.0.1",
@ -10116,8 +10122,7 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yaml": {
"version": "1.10.0",

View File

@ -99,7 +99,7 @@
"sparqlalgebrajs": "^2.3.1",
"sparqljs": "^3.1.2",
"streamify-array": "^1.0.1",
"ts-dpop": "^0.1.1",
"ts-dpop": "^0.2.7",
"uuid": "^8.3.0",
"winston": "^3.3.3",
"winston-transport": "^4.4.0",

View File

@ -1,4 +1,5 @@
import { verify } from 'ts-dpop';
import type { RequestMethod, VerifySolidIdentityFunction } from 'ts-dpop';
import { createSolidIdentityVerifier } from 'ts-dpop';
import type { TargetExtractor } from '../ldp/http/TargetExtractor';
import { getLoggerFor } from '../logging/LogUtil';
import type { HttpRequest } from '../server/HttpRequest';
@ -13,31 +14,40 @@ import { CredentialsExtractor } from './CredentialsExtractor';
export class DPoPWebIdExtractor extends CredentialsExtractor {
protected readonly logger = getLoggerFor(this);
private readonly targetExtractor: TargetExtractor;
private readonly verify: VerifySolidIdentityFunction;
public constructor(targetExtractor: TargetExtractor) {
super();
this.targetExtractor = targetExtractor;
this.verify = createSolidIdentityVerifier();
}
public async canHandle({ headers }: HttpRequest): Promise<void> {
const { authorization } = headers;
if (!authorization || !authorization.startsWith('DPoP ')) {
throw new NotImplementedHttpError('No DPoP Authorization header specified.');
throw new NotImplementedHttpError('No DPoP-bound Authorization header specified.');
}
}
public async handle(request: HttpRequest): Promise<Credentials> {
const { headers: { authorization, dpop }, method } = request;
if (!dpop) {
throw new BadRequestHttpError('No DPoP token specified.');
throw new BadRequestHttpError('No DPoP header specified.');
}
const resource = await this.targetExtractor.handleSafe(request);
try {
const webId = await verify(authorization as string, dpop as string, method as any, resource.path);
this.logger.info(`Verified WebID via DPoP token: ${webId}`);
const { webid: webId } = await this.verify(
authorization as string,
dpop as string,
method as RequestMethod,
resource.path,
);
this.logger.info(`Verified WebID via DPoP-bound access token: ${webId}`);
return { webId };
} catch (error: unknown) {
const message = `Error verifying WebID via DPoP token: ${(error as Error).message}`;
const message = `Error verifying WebID via DPoP-bound access token: ${(error as Error).message}`;
this.logger.warn(message);
throw new BadRequestHttpError(message);
}

View File

@ -1 +1,4 @@
export const verify = jest.fn((): string => 'http://alice.example/card#me');
import type { VerifySolidIdentityFunction } from 'ts-dpop';
const solidIdentityVerifier = jest.fn().mockResolvedValue({ aud: 'solid', exp: 1234, iat: 1234, iss: 'example.com/idp', webid: 'http://alice.example/card#me' });
export const createSolidIdentityVerifier = jest.fn((): VerifySolidIdentityFunction => solidIdentityVerifier);

View File

@ -1,10 +1,12 @@
import { verify } from 'ts-dpop';
import { createSolidIdentityVerifier } from 'ts-dpop';
import { DPoPWebIdExtractor } from '../../../src/authentication/DPoPWebIdExtractor';
import type { HttpRequest } from '../../../src/server/HttpRequest';
import { BadRequestHttpError } from '../../../src/util/errors/BadRequestHttpError';
import { NotImplementedHttpError } from '../../../src/util/errors/NotImplementedHttpError';
import { StaticAsyncHandler } from '../../util/StaticAsyncHandler';
const solidIdentityVerifier = createSolidIdentityVerifier() as jest.MockedFunction<any>;
describe('A DPoPWebIdExtractor', (): void => {
const targetExtractor = new StaticAsyncHandler(true, { path: 'http://example.org/foo/bar' });
const webIdExtractor = new DPoPWebIdExtractor(targetExtractor);
@ -25,7 +27,7 @@ describe('A DPoPWebIdExtractor', (): void => {
it('throws an error.', async(): Promise<void> => {
const result = webIdExtractor.handleSafe(request);
await expect(result).rejects.toThrow(NotImplementedHttpError);
await expect(result).rejects.toThrow('No DPoP Authorization header specified.');
await expect(result).rejects.toThrow('No DPoP-bound Authorization header specified.');
});
});
@ -41,7 +43,7 @@ describe('A DPoPWebIdExtractor', (): void => {
it('throws an error.', async(): Promise<void> => {
const result = webIdExtractor.handleSafe(request);
await expect(result).rejects.toThrow(NotImplementedHttpError);
await expect(result).rejects.toThrow('No DPoP Authorization header specified.');
await expect(result).rejects.toThrow('No DPoP-bound Authorization header specified.');
});
});
@ -56,7 +58,7 @@ describe('A DPoPWebIdExtractor', (): void => {
it('throws an error.', async(): Promise<void> => {
const result = webIdExtractor.handleSafe(request);
await expect(result).rejects.toThrow(BadRequestHttpError);
await expect(result).rejects.toThrow('No DPoP token specified.');
await expect(result).rejects.toThrow('No DPoP header specified.');
});
});
@ -77,8 +79,8 @@ describe('A DPoPWebIdExtractor', (): void => {
it('calls the DPoP verifier with the correct parameters.', async(): Promise<void> => {
await webIdExtractor.handleSafe(request);
expect(verify).toHaveBeenCalledTimes(1);
expect(verify).toHaveBeenCalledWith('DPoP token-1234', 'token-5678', 'GET', 'http://example.org/foo/bar');
expect(solidIdentityVerifier).toHaveBeenCalledTimes(1);
expect(solidIdentityVerifier).toHaveBeenCalledWith('DPoP token-1234', 'token-5678', 'GET', 'http://example.org/foo/bar');
});
it('returns the extracted WebID.', async(): Promise<void> => {
@ -97,7 +99,7 @@ describe('A DPoPWebIdExtractor', (): void => {
} as any as HttpRequest;
beforeEach((): void => {
(verify as jest.MockedFunction<any>).mockImplementationOnce((): void => {
solidIdentityVerifier.mockImplementationOnce((): void => {
throw new Error('invalid');
});
});
@ -105,7 +107,7 @@ describe('A DPoPWebIdExtractor', (): void => {
it('throws an error.', async(): Promise<void> => {
const result = webIdExtractor.handleSafe(request);
await expect(result).rejects.toThrow(BadRequestHttpError);
await expect(result).rejects.toThrow('Error verifying WebID via DPoP token: invalid');
await expect(result).rejects.toThrow('Error verifying WebID via DPoP-bound access token: invalid');
});
});
});