fix: handle (created) and (expires) in http signatures

This commit is contained in:
Julian Lam
2024-04-11 15:20:59 -04:00
parent f783338621
commit 4d23a837fa

View File

@@ -155,7 +155,7 @@ ActivityPub.verify = async (req) => {
} }
// Break the signature apart // Break the signature apart
let { keyId, headers, signature, algorithm } = req.headers.signature.split(',').reduce((memo, cur) => { let { keyId, headers, signature, algorithm, created, expires } = req.headers.signature.split(',').reduce((memo, cur) => {
const split = cur.split('="'); const split = cur.split('="');
const key = split.shift(); const key = split.shift();
const value = split.join('="'); const value = split.join('="');
@@ -170,10 +170,26 @@ ActivityPub.verify = async (req) => {
// Re-construct signature string // Re-construct signature string
const signed_string = headers.split(' ').reduce((memo, cur) => { const signed_string = headers.split(' ').reduce((memo, cur) => {
if (cur === '(request-target)') { switch (cur) {
memo.push(`${cur}: ${String(req.method).toLowerCase()} ${req.baseUrl}${req.path}`); case '(request-target)': {
} else if (req.headers.hasOwnProperty(cur)) { memo.push(`${cur}: ${String(req.method).toLowerCase()} ${req.baseUrl}${req.path}`);
memo.push(`${cur}: ${req.headers[cur]}`); break;
}
case '(created)': {
memo.push(`(created): ${created}`);
break;
}
case '(expires)': {
memo.push(`(expires): ${expires}`);
break;
}
default: {
memo.push(`${cur}: ${req.headers[cur]}`);
break;
}
} }
return memo; return memo;