diff --git a/server/api/middlewares/pagination.js b/server/api/middlewares/pagination.js index 8c693ebc..456d7930 100644 --- a/server/api/middlewares/pagination.js +++ b/server/api/middlewares/pagination.js @@ -1,6 +1,6 @@ // @flow -import httpErrors from 'http-errors'; import querystring from 'querystring'; +import { InvalidRequestError } from '../../errors'; import { type Context } from 'koa'; export default function pagination(options?: Object) { @@ -24,7 +24,7 @@ export default function pagination(options?: Object) { offset = isNaN(offset) ? 0 : offset; if (limit > opts.maxLimit) { - throw httpErrors.BadRequest( + throw new InvalidRequestError( `Pagination limit is too large (max ${opts.maxLimit})` ); } diff --git a/server/emails/index.js b/server/emails/index.js index 298941d5..175fc9fb 100644 --- a/server/emails/index.js +++ b/server/emails/index.js @@ -1,7 +1,7 @@ // @flow import Koa from 'koa'; import Router from 'koa-router'; -import httpErrors from 'http-errors'; +import { NotFoundError } from '../errors'; import { Mailer } from '../mailer'; const emailPreviews = new Koa(); @@ -22,7 +22,7 @@ router.get('/:type/:format', async ctx => { if (Object.getOwnPropertyNames(previewMailer).includes(ctx.params.type)) { // $FlowIssue flow doesn't like this but we're ok with it previewMailer[ctx.params.type]('user@example.com'); - } else throw httpErrors.NotFound(); + } else throw new NotFoundError('Email template could not be found'); } if (!mailerOutput) return; diff --git a/server/routes.js b/server/routes.js index 4e578a01..c49c282d 100644 --- a/server/routes.js +++ b/server/routes.js @@ -2,7 +2,6 @@ import React from 'react'; import path from 'path'; import fs from 'fs-extra'; -import httpErrors from 'http-errors'; import Koa from 'koa'; import Router from 'koa-router'; import sendfile from 'koa-sendfile'; @@ -11,6 +10,7 @@ import subdomainRedirect from './middlewares/subdomainRedirect'; import renderpage from './utils/renderpage'; import { slackAuth } from '../shared/utils/routeHelpers'; import { robotsResponse } from './utils/robots'; +import { NotFoundError } from './errors'; import Home from './pages/Home'; import About from './pages/About'; @@ -88,7 +88,7 @@ router.get('/robots.txt', ctx => (ctx.body = robotsResponse(ctx))); // catch all for react app router.get('*', async ctx => { await renderapp(ctx); - if (!ctx.status) ctx.throw(httpErrors.NotFound()); + if (!ctx.status) ctx.throw(new NotFoundError()); }); // middleware diff --git a/server/slack.js b/server/slack.js index 098b6f5a..2d06d26a 100644 --- a/server/slack.js +++ b/server/slack.js @@ -1,14 +1,15 @@ // @flow import fetch from 'isomorphic-fetch'; import querystring from 'querystring'; -import httpErrors from 'http-errors'; +import { InvalidRequestError } from './errors'; const SLACK_API_URL = 'https://slack.com/api'; export async function post(endpoint: string, body: Object) { let data; + + const token = body.token; try { - const token = body.token; const response = await fetch(`${SLACK_API_URL}/${endpoint}`, { method: 'POST', headers: { @@ -18,10 +19,10 @@ export async function post(endpoint: string, body: Object) { body: JSON.stringify(body), }); data = await response.json(); - } catch (e) { - throw httpErrors.BadRequest(); + } catch (err) { + throw new InvalidRequestError(err.message); } - if (!data.ok) throw httpErrors.BadRequest(data.error); + if (!data.ok) throw new InvalidRequestError(data.error); return data; } @@ -33,10 +34,10 @@ export async function request(endpoint: string, body: Object) { `${SLACK_API_URL}/${endpoint}?${querystring.stringify(body)}` ); data = await response.json(); - } catch (e) { - throw httpErrors.BadRequest(); + } catch (err) { + throw new InvalidRequestError(err.message); } - if (!data.ok) throw httpErrors.BadRequest(data.error); + if (!data.ok) throw new InvalidRequestError(data.error); return data; }