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
JavaScript
;
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;