UNPKG

rxdb-server

Version:
102 lines (101 loc) 2.93 kB
import { flatClone, getFromMapOrCreate, getQueryMatcher, normalizeMangoQuery, uniqueArray } from 'rxdb/plugins/core'; export function setCors(server, path, cors) { var useCors = cors; if (!useCors) { useCors = server.cors; } if (useCors) { server.adapter.setCors(server.serverApp, path, useCors); } } var AUTH_PER_REQUEST = new WeakMap(); export async function getAuthDataByRequest(server, request, response) { return getFromMapOrCreate(AUTH_PER_REQUEST, request, async () => { try { var headers = server.adapter.getRequestHeaders(request); var authData = await server.authHandler(headers); return authData; } catch (err) { server.adapter.closeConnection(response, 401, 'Unauthorized'); return false; } }); } ; var defaultMatchingQuery = { selector: {}, skip: 0, sort: [] }; export function getDocAllowedMatcher(endpoint, authData) { var useQuery = endpoint.queryModifier ? endpoint.queryModifier(authData, normalizeMangoQuery(endpoint.collection.schema.jsonSchema, {})) : defaultMatchingQuery; var docDataMatcher = getQueryMatcher(endpoint.collection.schema.jsonSchema, useQuery); return docDataMatcher; } export function docContainsServerOnlyFields(serverOnlyFields, doc) { var has = serverOnlyFields.find(field => { return typeof doc[field] !== 'undefined'; }); return has; } export function removeServerOnlyFieldsMonad(serverOnlyFields) { var serverOnlyFieldsStencil = { _meta: undefined, _rev: undefined, _attachments: undefined }; serverOnlyFields.forEach(field => serverOnlyFieldsStencil[field] = undefined); return docData => { if (!docData) { return docData; } return Object.assign({}, docData, serverOnlyFieldsStencil); }; } export function mergeServerDocumentFieldsMonad(serverOnlyFields) { var useFields = serverOnlyFields.slice(0); // useFields.push('_rev'); // useFields.push('_meta'); // useFields.push('_attachments'); useFields = uniqueArray(useFields); return (clientDoc, serverDoc) => { if (!serverDoc) { return clientDoc; } var ret = flatClone(clientDoc); useFields.forEach(field => { ret[field] = serverDoc[field]; }); return ret; }; } /** * $regex queries are dangerous because they can dos-attack the server. * * @param selector */ export function doesContainRegexQuerySelector(selector) { if (!selector) { return false; } if (Array.isArray(selector)) { var found = !!selector.find(item => doesContainRegexQuerySelector(item)); return found; } if (typeof selector !== 'object') { return false; } var entries = Object.entries(selector); for (var [key, value] of entries) { if (key === '$regex') { return true; } else { var has = doesContainRegexQuerySelector(value); if (has) { return true; } } } return false; } //# sourceMappingURL=helper.js.map