mirror of
https://github.com/misskey-dev/media-proxy.git
synced 2025-04-29 02:47:26 +09:00
parent
5728bdd7aa
commit
495f655973
@ -61,6 +61,10 @@ export default {
|
|||||||
maxSize: 262144000,
|
maxSize: 262144000,
|
||||||
|
|
||||||
// CORS
|
// CORS
|
||||||
|
// WARN:
|
||||||
|
// 'Access-Control-Allow-Origin'を'*'に設定した場合、要求のOriginヘッダーを応答します。
|
||||||
|
// (Misskeyのアバタークロップに必要なため)
|
||||||
|
// Varyヘッダーが付加されるため、同じURLでもOriginごとに画像が生成されてしまうはずです。
|
||||||
['Access-Control-Allow-Origin']: '*',
|
['Access-Control-Allow-Origin']: '*',
|
||||||
['Access-Control-Allow-Headers']: '*',
|
['Access-Control-Allow-Headers']: '*',
|
||||||
|
|
||||||
|
@ -41,11 +41,20 @@ export function setMediaProxyConfig(setting) {
|
|||||||
}
|
}
|
||||||
export default function (fastify, options, done) {
|
export default function (fastify, options, done) {
|
||||||
setMediaProxyConfig(options);
|
setMediaProxyConfig(options);
|
||||||
|
const corsOrigin = options['Access-Control-Allow-Origin'] ?? '*';
|
||||||
|
const corsHeader = options['Access-Control-Allow-Headers'] ?? '*';
|
||||||
|
const csp = options['Content-Security-Policy'] ?? `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`;
|
||||||
fastify.addHook('onRequest', (request, reply, done) => {
|
fastify.addHook('onRequest', (request, reply, done) => {
|
||||||
reply.header('Access-Control-Allow-Origin', options['Access-Control-Allow-Origin'] ?? '*');
|
if (corsOrigin === '*') {
|
||||||
reply.header('Access-Control-Allow-Headers', options['Access-Control-Allow-Headers'] ?? '*');
|
reply.header('Access-Control-Allow-Origin', request.headers.origin ?? '*');
|
||||||
|
reply.header('Vary', 'Origin');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reply.header('Access-Control-Allow-Origin', corsOrigin);
|
||||||
|
}
|
||||||
|
reply.header('Access-Control-Allow-Headers', corsHeader);
|
||||||
reply.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
reply.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
||||||
reply.header('Content-Security-Policy', options['Content-Security-Policy'] ?? `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`);
|
reply.header('Content-Security-Policy', csp);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
fastify.register(fastifyStatic, {
|
fastify.register(fastifyStatic, {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey-media-proxy",
|
"name": "misskey-media-proxy",
|
||||||
"version": "0.0.11",
|
"version": "0.0.12",
|
||||||
"description": "The Media Proxy for Misskey",
|
"description": "The Media Proxy for Misskey",
|
||||||
"main": "built/index.js",
|
"main": "built/index.js",
|
||||||
"packageManager": "pnpm@7.26.0",
|
"packageManager": "pnpm@7.26.0",
|
||||||
|
15
src/index.ts
15
src/index.ts
@ -68,11 +68,20 @@ export function setMediaProxyConfig(setting?: MediaProxyOptions | null) {
|
|||||||
export default function (fastify: FastifyInstance, options: MediaProxyOptions | null | undefined, done: (err?: Error) => void) {
|
export default function (fastify: FastifyInstance, options: MediaProxyOptions | null | undefined, done: (err?: Error) => void) {
|
||||||
setMediaProxyConfig(options);
|
setMediaProxyConfig(options);
|
||||||
|
|
||||||
|
const corsOrigin = options!['Access-Control-Allow-Origin'] ?? '*';
|
||||||
|
const corsHeader = options!['Access-Control-Allow-Headers'] ?? '*';
|
||||||
|
const csp = options!['Content-Security-Policy'] ?? `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`;
|
||||||
|
|
||||||
fastify.addHook('onRequest', (request, reply, done) => {
|
fastify.addHook('onRequest', (request, reply, done) => {
|
||||||
reply.header('Access-Control-Allow-Origin', options!['Access-Control-Allow-Origin'] ?? '*');
|
if (corsOrigin === '*') {
|
||||||
reply.header('Access-Control-Allow-Headers', options!['Access-Control-Allow-Headers'] ?? '*');
|
reply.header('Access-Control-Allow-Origin', request.headers.origin ?? '*');
|
||||||
|
reply.header('Vary', 'Origin');
|
||||||
|
} else {
|
||||||
|
reply.header('Access-Control-Allow-Origin', corsOrigin);
|
||||||
|
}
|
||||||
|
reply.header('Access-Control-Allow-Headers', corsHeader);
|
||||||
reply.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
reply.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
||||||
reply.header('Content-Security-Policy', options!['Content-Security-Policy'] ?? `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`);
|
reply.header('Content-Security-Policy', csp);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user