wip
This commit is contained in:
		
							parent
							
								
									22d2f2051c
								
							
						
					
					
						commit
						e2e7babee0
					
				
					 5 changed files with 14 additions and 10 deletions
				
			
		| 
						 | 
					@ -7,6 +7,8 @@ import { IUser } from '../../models/user';
 | 
				
			||||||
import { IApp } from '../../models/app';
 | 
					import { IApp } from '../../models/app';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async (endpoint: Endpoint, ctx: Koa.Context) => {
 | 
					export default async (endpoint: Endpoint, ctx: Koa.Context) => {
 | 
				
			||||||
 | 
						const body = ctx.is('multipart/form-data') ? (ctx.req as any).body : ctx.request.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const reply = (x?: any, y?: any) => {
 | 
						const reply = (x?: any, y?: any) => {
 | 
				
			||||||
		if (x === undefined) {
 | 
							if (x === undefined) {
 | 
				
			||||||
			ctx.status = 204;
 | 
								ctx.status = 204;
 | 
				
			||||||
| 
						 | 
					@ -25,7 +27,7 @@ export default async (endpoint: Endpoint, ctx: Koa.Context) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Authentication
 | 
						// Authentication
 | 
				
			||||||
	try {
 | 
						try {
 | 
				
			||||||
		[user, app] = await authenticate(ctx.request.body['i']);
 | 
							[user, app] = await authenticate(body['i']);
 | 
				
			||||||
	} catch (e) {
 | 
						} catch (e) {
 | 
				
			||||||
		reply(403, 'AUTHENTICATION_FAILED');
 | 
							reply(403, 'AUTHENTICATION_FAILED');
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -35,7 +37,7 @@ export default async (endpoint: Endpoint, ctx: Koa.Context) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// API invoking
 | 
						// API invoking
 | 
				
			||||||
	try {
 | 
						try {
 | 
				
			||||||
		res = await call(endpoint, user, app, ctx.request.body, ctx.req);
 | 
							res = await call(endpoint, user, app, body, (ctx.req as any).file);
 | 
				
			||||||
	} catch (e) {
 | 
						} catch (e) {
 | 
				
			||||||
		reply(400, e);
 | 
							reply(400, e);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,3 @@
 | 
				
			||||||
import * as http from 'http';
 | 
					 | 
				
			||||||
import * as multer from 'koa-multer';
 | 
					import * as multer from 'koa-multer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import endpoints, { Endpoint } from './endpoints';
 | 
					import endpoints, { Endpoint } from './endpoints';
 | 
				
			||||||
| 
						 | 
					@ -6,7 +5,7 @@ import limitter from './limitter';
 | 
				
			||||||
import { IUser } from '../../models/user';
 | 
					import { IUser } from '../../models/user';
 | 
				
			||||||
import { IApp } from '../../models/app';
 | 
					import { IApp } from '../../models/app';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default (endpoint: string | Endpoint, user: IUser, app: IApp, data: any, req?: http.IncomingMessage) => new Promise<any>(async (ok, rej) => {
 | 
					export default (endpoint: string | Endpoint, user: IUser, app: IApp, data: any, file?: any) => new Promise<any>(async (ok, rej) => {
 | 
				
			||||||
	const isSecure = user != null && app == null;
 | 
						const isSecure = user != null && app == null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const ep = typeof endpoint == 'string' ? endpoints.find(e => e.name == endpoint) : endpoint;
 | 
						const ep = typeof endpoint == 'string' ? endpoints.find(e => e.name == endpoint) : endpoint;
 | 
				
			||||||
| 
						 | 
					@ -36,8 +35,8 @@ export default (endpoint: string | Endpoint, user: IUser, app: IApp, data: any,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let exec = require(`${__dirname}/endpoints/${ep.name}`);
 | 
						let exec = require(`${__dirname}/endpoints/${ep.name}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ep.withFile && req) {
 | 
						if (ep.withFile && file) {
 | 
				
			||||||
		exec = exec.bind(null, (req as multer.MulterIncomingMessage).file);
 | 
							exec = exec.bind(null, file);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let res;
 | 
						let res;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ import * as Koa from 'koa';
 | 
				
			||||||
import config from '../../../config';
 | 
					import config from '../../../config';
 | 
				
			||||||
import { ILocalUser } from '../../../models/user';
 | 
					import { ILocalUser } from '../../../models/user';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function(ctx: Koa.Context, user: ILocalUser, redirect: boolean) {
 | 
					export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
 | 
				
			||||||
	const expires = 1000 * 60 * 60 * 24 * 365; // One Year
 | 
						const expires = 1000 * 60 * 60 * 24 * 365; // One Year
 | 
				
			||||||
	ctx.cookies.set('i', user.token, {
 | 
						ctx.cookies.set('i', user.token, {
 | 
				
			||||||
		path: '/',
 | 
							path: '/',
 | 
				
			||||||
| 
						 | 
					@ -16,5 +16,7 @@ export default function(ctx: Koa.Context, user: ILocalUser, redirect: boolean) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (redirect) {
 | 
						if (redirect) {
 | 
				
			||||||
		ctx.redirect(config.url);
 | 
							ctx.redirect(config.url);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ctx.status = 204;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,8 @@ const handler = require('./api-handler').default;
 | 
				
			||||||
// Init app
 | 
					// Init app
 | 
				
			||||||
const app = new Koa();
 | 
					const app = new Koa();
 | 
				
			||||||
app.use(bodyParser({
 | 
					app.use(bodyParser({
 | 
				
			||||||
	detectJSON: () => true
 | 
						// リクエストが multipart/form-data でない限りはJSONだと見なす
 | 
				
			||||||
 | 
						detectJSON: ctx => !ctx.is('multipart/form-data')
 | 
				
			||||||
}));
 | 
					}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Init multer instance
 | 
					// Init multer instance
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,14 +60,14 @@ export default async (ctx: Koa.Context) => {
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (verified) {
 | 
								if (verified) {
 | 
				
			||||||
				signin(ctx, user, false);
 | 
									signin(ctx, user);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				ctx.throw(400, {
 | 
									ctx.throw(400, {
 | 
				
			||||||
					error: 'invalid token'
 | 
										error: 'invalid token'
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			signin(ctx, user, false);
 | 
								signin(ctx, user);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		ctx.throw(400, {
 | 
							ctx.throw(400, {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue