UNPKG

database-proxy

Version:

Through a set of access control rules configuration database access to realize the client directly access the database via HTTP.

103 lines (102 loc) 2.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Proxy = void 0; const types_1 = require("./types"); const assert = require("assert"); const logger_1 = require("./logger"); class Proxy { constructor(accessor, policy) { if (policy) { this._policy = policy; } if (accessor) { this._accessor = accessor; } } get logger() { if (!this._logger) { this._logger = new logger_1.DefaultLogger(); } return this._logger; } setLogger(logger) { this._logger = logger; } get accessor() { assert(this._accessor, 'proxy: accessor is empty'); return this._accessor; } /** * @deprecated * @param accessor */ async setAccessor(accessor) { this.logger.info(`change proxy's accessor: ` + accessor.type); this._accessor = accessor; } get policy() { return this._policy; } /** * set policy * @deprecated * @param ruler */ async setPolicy(policy) { this.logger.info(`change proxy's policy`); this._policy = policy; } /** * perform data request * @param params * @returns */ async execute(params) { this.logger.info(`entry before executing`); assert(this._accessor, 'accessor not configured for Proxy'); return await this.accessor.execute(params); } /** * perform validation on request * @param params * @param injections * @returns */ async validate(params, injections) { this.logger.info(`entry validating`); return await this.policy.validate(params, injections); } /** * Parse request params * @param reqParams req.body * @returns */ parseParams(reqParams) { const { action } = reqParams; this.logger.info(`params parsing`); const result = Proxy.parse(action, reqParams); this.logger.debug(`params parsed: `, JSON.stringify(result)); return result; } /** * Parse request params * @param actionType * @param reqParams * @returns */ static parse(actionType, reqParams) { const { collectionName: collection } = reqParams; const params = { action: actionType, collection }; const action = (0, types_1.getAction)(actionType); if (!action) { throw new Error(`unknown action: ${actionType}`); } // copy the params action.fields.forEach((field) => { if (reqParams[field]) params[field] = reqParams[field]; }); return params; } } exports.Proxy = Proxy;