Add koa-helmet type definitions (#16180)

This commit is contained in:
Nicholas Simmons 2017-05-03 15:11:34 -04:00 committed by Mohamed Hegazy
parent 297a4960e5
commit e93d87a899
4 changed files with 284 additions and 0 deletions

64
types/koa-helmet/index.d.ts vendored Normal file
View File

@ -0,0 +1,64 @@
// Type definitions for koa-helmet 3.1
// Project: https://github.com/venables/koa-helmet#readme
// Definitions by: Nick Simmons <https://github.com/me>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
import {
IHelmetConfiguration,
IHelmetFrameguardConfiguration,
IHelmetHstsConfiguration,
IHelmetXssFilterConfiguration,
IHelmetDnsPrefetchControlConfiguration,
IHelmetHpkpConfiguration,
IHelmetReferrerPolicyConfiguration } from 'helmet';
import {Middleware, Context} from 'koa';
declare namespace koaHelmet {
type KoaHelmetContentSecurityPolicyDirectiveFunction = (ctx: Context) => string;
type KoaHelmetCspDirectiveValue = string | KoaHelmetContentSecurityPolicyDirectiveFunction;
interface KoaHelmetContentSecurityPolicyDirectives {
baseUri?: KoaHelmetCspDirectiveValue[];
childSrc?: KoaHelmetCspDirectiveValue[];
connectSrc?: KoaHelmetCspDirectiveValue[];
defaultSrc?: KoaHelmetCspDirectiveValue[];
fontSrc?: KoaHelmetCspDirectiveValue[];
formAction?: KoaHelmetCspDirectiveValue[];
frameAncestors?: KoaHelmetCspDirectiveValue[];
frameSrc?: KoaHelmetCspDirectiveValue[];
imgSrc?: KoaHelmetCspDirectiveValue[];
mediaSrc?: KoaHelmetCspDirectiveValue[];
objectSrc?: KoaHelmetCspDirectiveValue[];
pluginTypes?: KoaHelmetCspDirectiveValue[];
reportUri?: string;
sandbox?: KoaHelmetCspDirectiveValue[];
scriptSrc?: KoaHelmetCspDirectiveValue[];
styleSrc?: KoaHelmetCspDirectiveValue[];
}
interface KoaHelmetContentSecurityPolicyConfiguration {
reportOnly?: boolean;
setAllHeaders?: boolean;
disableAndroid?: boolean;
browserSniff?: boolean;
directives?: KoaHelmetContentSecurityPolicyDirectives;
}
interface KoaHelmet {
(options?: IHelmetConfiguration): Middleware;
contentSecurityPolicy(options?: KoaHelmetContentSecurityPolicyConfiguration): Middleware;
dnsPrefetchControl(options?: IHelmetDnsPrefetchControlConfiguration): Middleware;
frameguard(options?: IHelmetFrameguardConfiguration): Middleware;
hpkp(options?: IHelmetHpkpConfiguration): Middleware;
hsts(options?: IHelmetHstsConfiguration): Middleware;
ieNoOpen(): Middleware;
noCache(options?: any): Middleware;
noSniff(): Middleware;
referrerPolicy(options?: IHelmetReferrerPolicyConfiguration): Middleware;
xssFilter(options?: IHelmetXssFilterConfiguration): Middleware;
}
}
declare const koaHelmet: koaHelmet.KoaHelmet;
export = koaHelmet;

View File

@ -0,0 +1,197 @@
import * as Koa from 'koa';
import helmet = require('koa-helmet');
const app = new Koa();
/**
* @summary Test for {@see helmet}.
*/
function helmetTest() {
app.use(helmet());
app.use(helmet({}));
app.use(helmet({ frameguard: false }));
app.use(helmet({ frameguard: true }));
app.use(helmet({
frameguard: {
action: 'deny'
}
}));
}
/**
* @summary Test for {@see helmet#contentSecurityPolicy} function.
*/
function contentSecurityPolicyTest() {
const emptyArray: string[] = [];
const config = {
directives: {
baseUri: ['base.example.com'],
childSrc: ['child.example.com'],
connectSrc: ['connect.example.com'],
defaultSrc: ['*'],
fontSrc: ['font.example.com'],
formAction: ['formaction.example.com'],
frameAncestors: ["'none'"],
frameSrc: emptyArray,
imgSrc: ['images.example.com'],
mediaSrc: ['media.example.com'],
objectSrc: ['objects.example.com'],
pluginTypes: emptyArray,
reportUri: '/some-url',
sandbox: emptyArray,
scriptSrc: ['scripts.example.com', (ctx: Koa.Context) => {
return "'nonce-abc123'";
}],
styleSrc: ['css.example.com']
},
reportOnly: false,
setAllHeaders: false,
disableAndroid: false
};
app.use(helmet.contentSecurityPolicy());
app.use(helmet.contentSecurityPolicy({}));
app.use(helmet.contentSecurityPolicy(config));
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"]
},
setAllHeaders: true
}));
}
/**
* @summary Test for {@see helmet#dnsPrefetchControl} function.
*/
function dnsPrefetchControlTest() {
app.use(helmet.dnsPrefetchControl());
app.use(helmet.dnsPrefetchControl({ allow: false }));
app.use(helmet.dnsPrefetchControl({ allow: true }));
}
/**
* @summary Test for {@see helmet#frameguard} function.
*/
function frameguardTest() {
app.use(helmet.frameguard());
app.use(helmet.frameguard({}));
app.use(helmet.frameguard({ action: 'deny' }));
app.use(helmet.frameguard({ action: 'sameorigin' }));
app.use(helmet.frameguard({
action: 'allow-from',
domain: 'http://example.com'
}));
}
/**
* @summary Test for {@see helmet#hpkp} function.
*/
function hpkpTest() {
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
}));
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
includeSubdomains: false
}));
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
includeSubdomains: true
}));
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
reportUri: 'http://example.com'
}));
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
reportOnly: true
}));
app.use(helmet.hpkp({
maxAge: 7776000000,
sha256s: ['AbCdEf123=', 'ZyXwVu456='],
setIf: (req, res) => true
}));
}
/**
* @summary Test for {@see helmet#hsts} function.
*/
function hstsTest() {
app.use(helmet.hsts());
app.use(helmet.hsts({ maxAge: 7776000000 }));
app.use(helmet.hsts({
maxAge: 7776000000,
}));
app.use(helmet.hsts({
maxAge: 7776000000,
includeSubdomains: true
}));
app.use(helmet.hsts({
maxAge: 7776000000,
preload: true
}));
app.use(helmet.hsts({
maxAge: 7776000000,
force: true
}));
app.use(helmet.hsts({
maxAge: 7776000000,
setIf: (req, res) => true
}));
}
/**
* @summary Test for {@see helmet#ieNoOpen} function.
*/
function ieNoOpenTest() {
app.use(helmet.ieNoOpen());
}
/**
* @summary Test for {@see helmet#noCache} function.
*/
function noCacheTest() {
app.use(helmet.noCache());
app.use(helmet.noCache({}));
app.use(helmet.noCache({ noEtag: true }));
}
/**
* @summary Test for {@see helmet#noSniff} function.
*/
function noSniffTest() {
app.use(helmet.noSniff());
}
/**
* @summary Test for {@see helmet#referrerPolicy} function.
*/
function referrerPolicyTest() {
app.use(helmet.referrerPolicy({ policy: 'same-origin' }));
}
/**
* @summary Test for {@see helmet#xssFilter} function.
*/
function xssFilterTest() {
app.use(helmet.xssFilter());
app.use(helmet.xssFilter({}));
app.use(helmet.xssFilter({ setOnOldIE: false }));
app.use(helmet.xssFilter({ setOnOldIE: true }));
}

View File

@ -0,0 +1,22 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"koa-helmet-tests.ts"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }