Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Sanitize API #349

Merged
merged 11 commits into from
Jul 7, 2022
Prev Previous commit
Next Next commit
extract sanitizer-related types
  • Loading branch information
ArturWierzbicki committed Jun 29, 2022
commit 088f74c1be6c009428720d1a429af0be5cfcc1de
3 changes: 2 additions & 1 deletion src/plugin/v2/grpc_plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { GrpcPlugin } from '../../node-plugin';
import { Logger } from '../../logger';
import { PluginConfig } from '../../config';
import { createBrowser, Browser } from '../../browser';
import { HTTPHeaders, ImageRenderOptions, RenderOptions, SanitizeRequest } from '../../types';
import { HTTPHeaders, ImageRenderOptions, RenderOptions } from '../../types';
import {
RenderRequest,
RenderResponse,
Expand All @@ -20,6 +20,7 @@ import {
GRPCSanitizeResponse,
} from './types';
import { createSanitizer, Sanitizer } from '../../sanitizer/Sanitizer';
import { SanitizeRequest } from '../../sanitizer/types';

const rendererV2PackageDef = protoLoader.loadSync(__dirname + '/../../../proto/rendererv2.proto', {
keepCase: true,
Expand Down
2 changes: 1 addition & 1 deletion src/plugin/v2/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ConfigType } from '../../types';
import { ConfigType } from '../../sanitizer/types';

export interface StringList {
values: string[];
Expand Down
2 changes: 1 addition & 1 deletion src/sanitizer/Sanitizer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as DOMPurify from 'dompurify';
import { JSDOM } from 'jsdom';
import { ConfigType, isDOMPurifyConfig, SanitizeRequest, SanitizeResponse } from '../types';
import { ConfigType, isDOMPurifyConfig, SanitizeRequest, SanitizeResponse } from './types';

const svgTags = {
altGlyphDef: /(<\/?)altGlyphDef([> ])/gi,
Expand Down
30 changes: 30 additions & 0 deletions src/sanitizer/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import * as DOMPurify from 'dompurify';

export enum ConfigType {
DOMPurify = 'DOMPurify',
}

export const isDOMPurifyConfig = (req: SanitizeRequest): req is SanitizeRequest<ConfigType.DOMPurify> => req.configType === ConfigType.DOMPurify;

const allConfigTypes = Object.values(ConfigType);

export type ConfigTypeToConfig = {
[ConfigType.DOMPurify]: {
domPurifyConfig?: DOMPurify.Config;
allowAllLinksInSvgUseTags?: boolean;
};
};

export const isSanitizeRequest = (obj: any): obj is SanitizeRequest => {
return Boolean(obj?.content) && allConfigTypes.includes(obj.configType) && typeof obj.config === 'object';
};

export type SanitizeRequest<configType extends ConfigType = ConfigType> = {
content: Buffer;
configType: configType;
config: ConfigTypeToConfig[configType];
};

export type SanitizeResponse = {
sanitized: Buffer;
};
3 changes: 2 additions & 1 deletion src/service/http-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ import { Logger } from '../logger';
import { Browser, createBrowser } from '../browser';
import { ServiceConfig } from '../config';
import { setupHttpServerMetrics } from './metrics_middleware';
import { HTTPHeaders, ImageRenderOptions, isSanitizeRequest, RenderOptions } from '../types';
import { HTTPHeaders, ImageRenderOptions, RenderOptions } from '../types';
import { Sanitizer } from '../sanitizer/Sanitizer';
import * as bodyParser from 'body-parser';
import * as multer from 'multer';
import { isSanitizeRequest } from '../sanitizer/types';

const upload = multer({ storage: multer.memoryStorage() });

Expand Down
31 changes: 0 additions & 31 deletions src/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import * as DOMPurify from 'dompurify';

export interface HTTPHeaders {
'Accept-Language'?: string;
[header: string]: string | undefined;
Expand Down Expand Up @@ -27,32 +25,3 @@ export interface ImageRenderOptions extends RenderOptions {
fullPageImage?: boolean;
scaleImage?: number;
}

export enum ConfigType {
DOMPurify = 'DOMPurify',
}

export const isDOMPurifyConfig = (req: SanitizeRequest): req is SanitizeRequest<ConfigType.DOMPurify> => req.configType === ConfigType.DOMPurify;

const allConfigTypes = Object.values(ConfigType);

export type ConfigTypeToConfig = {
[ConfigType.DOMPurify]: {
domPurifyConfig?: DOMPurify.Config;
allowAllLinksInSvgUseTags?: boolean;
};
};

export const isSanitizeRequest = (obj: any): obj is SanitizeRequest => {
return Boolean(obj?.content) && allConfigTypes.includes(obj.configType) && typeof obj.config === 'object';
};

export type SanitizeRequest<configType extends ConfigType = ConfigType> = {
content: Buffer;
configType: configType;
config: ConfigTypeToConfig[configType];
};

export type SanitizeResponse = {
sanitized: Buffer;
};