summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-02-02 00:40:00 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-02-02 00:40:00 +0900
commit9c2f5ee0413ccab907f11e7e94c158eaf77ca020 (patch)
tree66ad5e26293fc886406b2ff1e6c8a2ca3fa5ac04 /packages/backend/src/server
parentMerge branch 'develop' (diff)
parent12.103.0 (diff)
downloadmisskey-9c2f5ee0413ccab907f11e7e94c158eaf77ca020.tar.gz
misskey-9c2f5ee0413ccab907f11e7e94c158eaf77ca020.tar.bz2
misskey-9c2f5ee0413ccab907f11e7e94c158eaf77ca020.zip
Merge branch 'develop'
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/api/api-handler.ts2
-rw-r--r--packages/backend/src/server/api/call.ts16
-rw-r--r--packages/backend/src/server/api/endpoints/drive/files/create.ts6
-rw-r--r--packages/backend/src/server/file/index.ts2
-rw-r--r--packages/backend/src/server/proxy/index.ts2
5 files changed, 19 insertions, 9 deletions
diff --git a/packages/backend/src/server/api/api-handler.ts b/packages/backend/src/server/api/api-handler.ts
index faa35d12d4..362bbb0f57 100644
--- a/packages/backend/src/server/api/api-handler.ts
+++ b/packages/backend/src/server/api/api-handler.ts
@@ -32,7 +32,7 @@ export default (endpoint: IEndpoint, ctx: Koa.Context) => new Promise((res) => {
// Authentication
authenticate(body['i']).then(([user, app]) => {
// API invoking
- call(endpoint.name, user, app, body, (ctx as any).file).then((res: any) => {
+ call(endpoint.name, user, app, body, ctx).then((res: any) => {
reply(res);
}).catch((e: ApiError) => {
reply(e.httpStatusCode ? e.httpStatusCode : e.kind === 'client' ? 400 : 500, e);
diff --git a/packages/backend/src/server/api/call.ts b/packages/backend/src/server/api/call.ts
index 399ee65bde..5bc7d2f25e 100644
--- a/packages/backend/src/server/api/call.ts
+++ b/packages/backend/src/server/api/call.ts
@@ -1,3 +1,4 @@
+import * as Koa from 'koa';
import { performance } from 'perf_hooks';
import { limiter } from './limiter';
import { User } from '@/models/entities/user';
@@ -12,7 +13,7 @@ const accessDenied = {
id: '56f35758-7dd5-468b-8439-5d6fb8ec9b8e',
};
-export default async (endpoint: string, user: User | null | undefined, token: AccessToken | null | undefined, data: any, file?: any) => {
+export default async (endpoint: string, user: User | null | undefined, token: AccessToken | null | undefined, data: any, ctx?: Koa.Context) => {
const isSecure = user != null && token == null;
const ep = endpoints.find(e => e.name === endpoint);
@@ -76,9 +77,20 @@ export default async (endpoint: string, user: User | null | undefined, token: Ac
});
}
+ // Cast non JSON input
+ if (ep.meta.requireFile && ep.meta.params) {
+ const body = (ctx!.request as any).body;
+ for (const k of Object.keys(ep.meta.params)) {
+ const param = ep.meta.params[k];
+ if (['Boolean', 'Number'].includes(param.validator.name) && typeof body[k] === 'string') {
+ body[k] = JSON.parse(body[k]);
+ }
+ }
+ }
+
// API invoking
const before = performance.now();
- return await ep.exec(data, user, token, file).catch((e: Error) => {
+ return await ep.exec(data, user, token, ctx!.file).catch((e: Error) => {
if (e instanceof ApiError) {
throw e;
} else {
diff --git a/packages/backend/src/server/api/endpoints/drive/files/create.ts b/packages/backend/src/server/api/endpoints/drive/files/create.ts
index dd65ab0611..877e76677e 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/create.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/create.ts
@@ -39,15 +39,13 @@ export const meta = {
},
isSensitive: {
- validator: $.optional.either($.bool, $.str),
+ validator: $.optional.bool,
default: false,
- transform: (v: any): boolean => v === true || v === 'true',
},
force: {
- validator: $.optional.either($.bool, $.str),
+ validator: $.optional.bool,
default: false,
- transform: (v: any): boolean => v === true || v === 'true',
},
},
diff --git a/packages/backend/src/server/file/index.ts b/packages/backend/src/server/file/index.ts
index a455acd1cf..6fe6110dc9 100644
--- a/packages/backend/src/server/file/index.ts
+++ b/packages/backend/src/server/file/index.ts
@@ -18,7 +18,7 @@ const _dirname = dirname(_filename);
const app = new Koa();
app.use(cors());
app.use(async (ctx, next) => {
- ctx.set('Content-Security-Policy', `default-src 'none'; style-src 'unsafe-inline'`);
+ ctx.set('Content-Security-Policy', `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`);
await next();
});
diff --git a/packages/backend/src/server/proxy/index.ts b/packages/backend/src/server/proxy/index.ts
index b8993f19f8..7a3094311c 100644
--- a/packages/backend/src/server/proxy/index.ts
+++ b/packages/backend/src/server/proxy/index.ts
@@ -11,7 +11,7 @@ import { proxyMedia } from './proxy-media';
const app = new Koa();
app.use(cors());
app.use(async (ctx, next) => {
- ctx.set('Content-Security-Policy', `default-src 'none'; style-src 'unsafe-inline'`);
+ ctx.set('Content-Security-Policy', `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`);
await next();
});