mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 19:28:09 +00:00
Merge pull request #2570 from akhilmhdh/fix/scim-error-response
Resolved response schema mismatch for scim
This commit is contained in:
@@ -8,12 +8,14 @@ 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,
|
||||||
|
depth = 0
|
||||||
) => {
|
) => {
|
||||||
const scimRootFilterAst = parse(rootScimFilter);
|
if (depth > 20) return;
|
||||||
|
|
||||||
const stack = [
|
const stack = [
|
||||||
{
|
{
|
||||||
scimFilterAst: scimRootFilterAst,
|
scimFilterAst: scimRootFilterAst,
|
||||||
@@ -75,42 +77,35 @@ 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, depth + 1);
|
||||||
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, depth + 1);
|
||||||
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, depth + 1);
|
||||||
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,
|
||||||
|
depth + 1
|
||||||
|
);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -119,3 +114,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
|
||||||
|
|||||||
@@ -97,7 +97,11 @@ export const fastifyErrHandler = fastifyPlugin(async (server: FastifyZodProvider
|
|||||||
message
|
message
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
void res.send(error);
|
void res.status(HttpStatusCodes.InternalServerError).send({
|
||||||
|
statusCode: HttpStatusCodes.InternalServerError,
|
||||||
|
error: "InternalServerError",
|
||||||
|
message: "Something went wrong"
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user