From 40e177fa9639b1c62184a41cd9d64eecfa527f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Fri, 1 Feb 2019 19:59:12 +0900 Subject: [PATCH] Create type definition for 'http-signature' (#4049) * Create type definition for 'http-signature' * Follow lint --- src/@types/http-signature.d.ts | 75 ++++++++++++++++++++++ src/queue/processors/http/process-inbox.ts | 2 +- src/remote/activitypub/request.ts | 2 +- src/server/activitypub.ts | 2 +- 4 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/@types/http-signature.d.ts diff --git a/src/@types/http-signature.d.ts b/src/@types/http-signature.d.ts new file mode 100644 index 000000000..6366b2add --- /dev/null +++ b/src/@types/http-signature.d.ts @@ -0,0 +1,75 @@ +declare module 'http-signature' { + import { IncomingMessage, ClientRequest } from 'http'; + + interface ISignature { + keyId: string; + algorithm: string; + headers: string[]; + signature: string; + } + + interface IOptions { + headers?: string[]; + algorithm?: string; + strict?: boolean; + authorizationHeaderName?: string; + } + + interface IParseRequestOptions extends IOptions { + clockSkew?: number; + } + + interface IParsedSignature { + scheme: string; + params: ISignature; + signingString: string; + } + + type RequestSignerConstructorOptions = + IRequestSignerConstructorOptionsFromProperties | + IRequestSignerConstructorOptionsFromFunction; + + interface IRequestSignerConstructorOptionsFromProperties { + keyId: string; + key: string | Buffer; + algorithm?: string; + } + + interface IRequestSignerConstructorOptionsFromFunction { + sign?: (data: string, cb: (err: any, sig: ISignature) => void) => void; + } + + class RequestSigner { + constructor(options: RequestSignerConstructorOptions); + + public writeHeader(header: string, value: string): string; + + public writeDateHeader(): string; + + public writeTarget(method: string, path: string): void; + + public sign(cb: (err: any, authz: string) => void): void; + } + + interface ISignRequestOptions extends IOptions { + keyId: string; + key: string; + httpVersion?: string; + } + + export function parse(request: IncomingMessage, options?: IParseRequestOptions): IParsedSignature; + export function parseRequest(request: IncomingMessage, options?: IParseRequestOptions): IParsedSignature; + + export function sign(request: ClientRequest, options: ISignRequestOptions): boolean; + export function signRequest(request: ClientRequest, options: ISignRequestOptions): boolean; + export function createSigner(): RequestSigner; + export function isSigner(obj: any): obj is RequestSigner; + + export function sshKeyToPEM(key: string): string; + export function sshKeyFingerprint(key: string): string; + export function pemToRsaSSHKey(pem: string, comment: string): string; + + export function verify(parsedSignature: IParsedSignature, pubkey: string | Buffer): boolean; + export function verifySignature(parsedSignature: IParsedSignature, pubkey: string | Buffer): boolean; + export function verifyHMAC(parsedSignature: IParsedSignature, secret: string): boolean; +} diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts index 1ab5f094e..32ac7aebd 100644 --- a/src/queue/processors/http/process-inbox.ts +++ b/src/queue/processors/http/process-inbox.ts @@ -1,7 +1,7 @@ import * as bq from 'bee-queue'; import * as debug from 'debug'; -const httpSignature = require('http-signature'); +import * as httpSignature from 'http-signature'; import parseAcct from '../../../misc/acct/parse'; import User, { IRemoteUser } from '../../../models/user'; import perform from '../../../remote/activitypub/perform'; diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts index 9baab8374..366d7e19a 100644 --- a/src/remote/activitypub/request.ts +++ b/src/remote/activitypub/request.ts @@ -1,5 +1,5 @@ import { request } from 'https'; -const { sign } = require('http-signature'); +import { sign } from 'http-signature'; import { URL } from 'url'; import * as debug from 'debug'; import * as crypto from 'crypto'; diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts index 30dc6395e..20a8ee979 100644 --- a/src/server/activitypub.ts +++ b/src/server/activitypub.ts @@ -1,7 +1,7 @@ import { ObjectID } from 'mongodb'; import * as Router from 'koa-router'; const json = require('koa-json-body'); -const httpSignature = require('http-signature'); +import * as httpSignature from 'http-signature'; import { createHttpJob } from '../queue'; import { renderActivity } from '../remote/activitypub/renderer';