mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 09:28:06 +00:00
fix: resolved response schema mismatch for scim
This commit is contained in:
@@ -8,12 +8,11 @@ const appendParentToGroupingOperator = (parentPath: string, filter: Filter) => {
|
|||||||
return filter;
|
return filter;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const generateKnexQueryFromScim = (
|
const processDynamicQuery = (
|
||||||
rootQuery: Knex.QueryBuilder,
|
rootQuery: Knex.QueryBuilder,
|
||||||
rootScimFilter: string,
|
scimRootFilterAst: Filter,
|
||||||
getAttributeField: (attr: string) => string | null
|
getAttributeField: (attr: string) => string | null
|
||||||
) => {
|
) => {
|
||||||
const scimRootFilterAst = parse(rootScimFilter);
|
|
||||||
const stack = [
|
const stack = [
|
||||||
{
|
{
|
||||||
scimFilterAst: scimRootFilterAst,
|
scimFilterAst: scimRootFilterAst,
|
||||||
@@ -75,42 +74,34 @@ export const generateKnexQueryFromScim = (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "and": {
|
case "and": {
|
||||||
void query.andWhere((subQueryBuilder) => {
|
scimFilterAst.filters.forEach((el) => {
|
||||||
scimFilterAst.filters.forEach((el) => {
|
void query.andWhere((subQueryBuilder) => {
|
||||||
stack.push({
|
processDynamicQuery(subQueryBuilder, el, getAttributeField);
|
||||||
query: subQueryBuilder,
|
|
||||||
scimFilterAst: el
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "or": {
|
case "or": {
|
||||||
void query.orWhere((subQueryBuilder) => {
|
scimFilterAst.filters.forEach((el) => {
|
||||||
scimFilterAst.filters.forEach((el) => {
|
void query.orWhere((subQueryBuilder) => {
|
||||||
stack.push({
|
processDynamicQuery(subQueryBuilder, el, getAttributeField);
|
||||||
query: subQueryBuilder,
|
|
||||||
scimFilterAst: el
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "not": {
|
case "not": {
|
||||||
void query.whereNot((subQueryBuilder) => {
|
void query.whereNot((subQueryBuilder) => {
|
||||||
stack.push({
|
processDynamicQuery(subQueryBuilder, scimFilterAst.filter, getAttributeField);
|
||||||
query: subQueryBuilder,
|
|
||||||
scimFilterAst: scimFilterAst.filter
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "[]": {
|
case "[]": {
|
||||||
void query.whereNot((subQueryBuilder) => {
|
void query.where((subQueryBuilder) => {
|
||||||
stack.push({
|
processDynamicQuery(
|
||||||
query: subQueryBuilder,
|
subQueryBuilder,
|
||||||
scimFilterAst: appendParentToGroupingOperator(scimFilterAst.attrPath, scimFilterAst.valFilter)
|
appendParentToGroupingOperator(scimFilterAst.attrPath, scimFilterAst.valFilter),
|
||||||
});
|
getAttributeField
|
||||||
|
);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -119,3 +110,12 @@ export const generateKnexQueryFromScim = (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const generateKnexQueryFromScim = (
|
||||||
|
rootQuery: Knex.QueryBuilder,
|
||||||
|
rootScimFilter: string,
|
||||||
|
getAttributeField: (attr: string) => string | null
|
||||||
|
) => {
|
||||||
|
const scimRootFilterAst = parse(rootScimFilter);
|
||||||
|
return processDynamicQuery(rootQuery, scimRootFilterAst, getAttributeField);
|
||||||
|
};
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ import fp from "fastify-plugin";
|
|||||||
|
|
||||||
import { DefaultResponseErrorsSchema } from "../routes/sanitizedSchemas";
|
import { DefaultResponseErrorsSchema } from "../routes/sanitizedSchemas";
|
||||||
|
|
||||||
|
const isScimRoutes = (pathname: string) =>
|
||||||
|
pathname.startsWith("/api/v1/scim/Users") || pathname.startsWith("/api/v1/scim/Groups");
|
||||||
|
|
||||||
export const addErrorsToResponseSchemas = fp(async (server) => {
|
export const addErrorsToResponseSchemas = fp(async (server) => {
|
||||||
server.addHook("onRoute", (routeOptions) => {
|
server.addHook("onRoute", (routeOptions) => {
|
||||||
if (routeOptions.schema && routeOptions.schema.response) {
|
if (routeOptions.schema && routeOptions.schema.response && !isScimRoutes(routeOptions.path)) {
|
||||||
routeOptions.schema.response = {
|
routeOptions.schema.response = {
|
||||||
...DefaultResponseErrorsSchema,
|
...DefaultResponseErrorsSchema,
|
||||||
...routeOptions.schema.response
|
...routeOptions.schema.response
|
||||||
|
|||||||
Reference in New Issue
Block a user