Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import config from "../../config/index.js";
|
||||
import { getUserKeypair } from "../../misc/keypair-store.js";
|
||||
import { getResponse } from "../../misc/fetch.js";
|
||||
import { createSignedPost, createSignedGet } from "./ap-request.js";
|
||||
import { apLogger } from "./logger.js";
|
||||
export default (async (user, url, object)=>{
|
||||
const body = JSON.stringify(object);
|
||||
const keypair = await getUserKeypair(user.id);
|
||||
const req = createSignedPost({
|
||||
key: {
|
||||
privateKeyPem: keypair.privateKey,
|
||||
keyId: `${config.url}/users/${user.id}#main-key`
|
||||
},
|
||||
url,
|
||||
body,
|
||||
additionalHeaders: {
|
||||
"User-Agent": config.userAgent
|
||||
}
|
||||
});
|
||||
await getResponse({
|
||||
url,
|
||||
method: req.request.method,
|
||||
headers: req.request.headers,
|
||||
body
|
||||
});
|
||||
});
|
||||
/**
|
||||
* Get AP object with http-signature
|
||||
* @param user http-signature user
|
||||
* @param url URL to fetch
|
||||
* @param redirects whether or not to accept redirects
|
||||
*/ export async function signedGet(url, user, redirects = true) {
|
||||
apLogger.debug(`Running signedGet on url: ${url}`);
|
||||
const keypair = await getUserKeypair(user.id);
|
||||
const req = createSignedGet({
|
||||
key: {
|
||||
privateKeyPem: keypair.privateKey,
|
||||
keyId: `${config.url}/users/${user.id}#main-key`
|
||||
},
|
||||
url,
|
||||
additionalHeaders: {
|
||||
"User-Agent": config.userAgent
|
||||
}
|
||||
});
|
||||
const res = await getResponse({
|
||||
url,
|
||||
method: req.request.method,
|
||||
headers: req.request.headers,
|
||||
redirect: redirects ? "manual" : "error"
|
||||
});
|
||||
if (redirects && [
|
||||
301,
|
||||
302,
|
||||
307,
|
||||
308
|
||||
].includes(res.status)) {
|
||||
const newUrl = res.headers.get('location');
|
||||
if (!newUrl) throw new Error('signedGet got redirect but no target location');
|
||||
apLogger.debug(`signedGet is redirecting to ${newUrl}`);
|
||||
return signedGet(newUrl, user, false);
|
||||
}
|
||||
const contentType = res.headers.get('content-type');
|
||||
if (contentType == null || contentType !== 'application/activity+json' && !contentType.startsWith('application/activity+json;') && (!contentType.startsWith('application/ld+json;') || !contentType.includes('profile="https://www.w3.org/ns/activitystreams"'))) {
|
||||
throw new Error(`signedGet response had unexpected content-type: ${contentType}`);
|
||||
}
|
||||
return {
|
||||
finalUrl: res.url,
|
||||
content: await res.json()
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user