diff --git a/src/cli.ts b/src/cli.ts new file mode 100644 index 0000000..23b51e0 --- /dev/null +++ b/src/cli.ts @@ -0,0 +1,36 @@ +import { docopt } from 'docopt'; +import { Options } from './types'; + +const PKG = require('../package.json'); + +const ARG_DATA = ` +${PKG.name}. +${PKG.description} + +Usage: + tstatic [options] + tstatic -h | --help + tstatic --version + +Options: + -h --help Show this screen. + --version Show version. + -b --basic-auth= Enable basic-auth. + -i --ips= Allowed IP addresses. + -l --list-dir List Directory. + -o --opbeat Enable Opbeat. +`; + +export default function getArgs() : Options { + const rawArgs = docopt(ARG_DATA, { + version: PKG.version, + help: true + }); + return { + allowed_ips: rawArgs['--ips'] ? rawArgs['--ips'].split(',') : [], + basicAuth: rawArgs['--basic-auth'] ? rawArgs['--basic-auth'].split(':') : [], + dirList: rawArgs['--list-dir'], + serveDir: rawArgs[''], + opbeat: rawArgs['--opbeat'] + }; +} diff --git a/src/cli.txt b/src/cli.txt deleted file mode 100644 index aa03abd..0000000 --- a/src/cli.txt +++ /dev/null @@ -1,15 +0,0 @@ -tstatic. - -Usage: - tstatic [options] - tstatic -h | --help - tstatic --version - -Options: - -h --help Show this screen. - --version Show version. - -b --basic-auth= Enable basic-auth. - -i --ips= Allowed IP addresses. - -l --list-dir List Directory. - -o --opbeat Enable Opbeat. - diff --git a/src/index.ts b/src/index.ts index 60abd5c..6d40342 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,26 +1,8 @@ import { docopt } from 'docopt'; -import { readFileSync } from 'fs'; -import { join } from 'path'; -import { Options } from './types'; import createServer from './server'; +import getArgs from './cli'; -const ARG_DATA = readFileSync(join(__dirname, '..', 'src', 'cli.txt')).toString(); - -function getArgs() : Options { - const rawArgs = docopt(ARG_DATA, { - version: require('../package.json').version, - help: true - }); - return { - allowed_ips: rawArgs['--ips'] ? rawArgs['--ips'].split(',') : [], - basicAuth: rawArgs['--basic-auth'] ? rawArgs['--basic-auth'].split(':') : [], - dirList: rawArgs['--list-dir'], - serveDir: rawArgs[''], - opbeat: rawArgs['--opbeat'] - } -} - - +console.log("Starting Server...") const app = createServer(getArgs()); const server = app.listen(5000, function () { diff --git a/src/middleware/basic-auth.ts b/src/middleware/basic-auth.ts index 12dc09b..e31f729 100644 --- a/src/middleware/basic-auth.ts +++ b/src/middleware/basic-auth.ts @@ -1,4 +1,4 @@ -import basicAuth from 'express-basic-auth'; +import * as basicAuth from 'express-basic-auth'; export default function basicAuthHandler(username : string, password : string) { return basicAuth({ diff --git a/src/middleware/logging.ts b/src/middleware/logging.ts index c30a728..49e3809 100644 --- a/src/middleware/logging.ts +++ b/src/middleware/logging.ts @@ -1,5 +1,5 @@ -import winston from 'winston'; -import expressWinston from 'express-winston'; +import * as winston from 'winston'; +import * as expressWinston from 'express-winston'; export default expressWinston.logger({ transports: [ diff --git a/src/middleware/static-files.ts b/src/middleware/static-files.ts index ea65d58..4430ff5 100644 --- a/src/middleware/static-files.ts +++ b/src/middleware/static-files.ts @@ -1,12 +1,12 @@ -import express, { Request, Response } from 'express'; -import serveIndex from 'serve-index'; +import * as express from 'express'; +import * as serveIndex from 'serve-index'; import path from 'path'; function isDirectory(url : string) : boolean { return /\/$/.test(url); } -export function indexHandle(request : Request, response : Response, next : Function) { +export function indexHandle(request : express.Request, response : express.Response, next : Function) { if (isDirectory(request.url)) { request.url = path.join(request.url, 'index.html'); } diff --git a/src/server.ts b/src/server.ts index 81de56d..624d84c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,9 +1,9 @@ -import express, { Application } from 'express'; +import * as express from 'express'; -import AccessControl from 'express-ip-access-control'; -import compression from 'compression'; -import helmet from 'helmet'; -import opbeat from 'opbeat'; +import * as AccessControl from 'express-ip-access-control'; +import * as compression from 'compression'; +import * as helmet from 'helmet'; +import * as opbeat from 'opbeat'; import logging from './middleware/logging'; import basicAuthHandler from './middleware/basic-auth'; @@ -12,15 +12,12 @@ import handle404 from './middleware/404'; import { Options } from './types'; -export default function createServer(opts : Options) : Application { +export default function createServer(opts : Options) : express.Application { const app = express(); - const opbeatHandle = opbeat.start({ - active: opts.opbeat - }); app.use(logging); - if (opts.allowed_ips) { + if (opts.allowed_ips.length) { app.set('trust proxy', true); app.use(AccessControl({ mode: 'allow', @@ -29,7 +26,7 @@ export default function createServer(opts : Options) : Application { })); } - if (opts.basicAuth) { + if (opts.basicAuth.length) { app.use(basicAuthHandler(opts.basicAuth[0], opts.basicAuth[1])); } @@ -44,7 +41,11 @@ export default function createServer(opts : Options) : Application { app.use(compression({ level: 9 })); app.use(helmet()); - app.use(opbeatHandle.middleware.express()); + if (opts.opbeat) { + app.use(opbeat.start({ + active: opts.opbeat + }).middleware.express()); + } return app; } diff --git a/tsconfig.json b/tsconfig.json index 5d404e6..13a0150 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ "experimentalDecorators": true, "preserveConstEnums": true, "allowJs": true, - "sourceMap": true + "sourceMap": true, + "pretty": true }, "filesGlob": [ "typings/index.d.ts",