mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 16:27:40 +00:00
escape special characters for ILIKE search
This commit is contained in:
@@ -50,11 +50,14 @@ export const pamAccountDALFactory = (db: TDbClient) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (search) {
|
if (search) {
|
||||||
|
// escape special characters (`%`, `_`) and the escape character itself (`\`)
|
||||||
|
const escapedSearch = search.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
|
||||||
|
const pattern = `%${escapedSearch}%`;
|
||||||
void query.where((q) => {
|
void query.where((q) => {
|
||||||
void q
|
void q
|
||||||
.whereILike(`${TableName.PamAccount}.name`, `%${search}%`)
|
.whereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamAccount, "name", pattern])
|
||||||
.orWhereILike(`${TableName.PamResource}.name`, `%${search}%`)
|
.orWhereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamResource, "name", pattern])
|
||||||
.orWhereILike(`${TableName.PamAccount}.description`, `%${search}%`);
|
.orWhereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamAccount, "description", pattern]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,9 @@ export const pamFolderDALFactory = (db: TDbClient) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (search) {
|
if (search) {
|
||||||
void query.whereILike(`${TableName.PamFolder}.name`, `%${search}%`);
|
// escape special characters (`%`, `_`) and the escape character itself (`\`)
|
||||||
|
const escapedSearch = search.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
|
||||||
|
void query.whereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamFolder, "name", `%${escapedSearch}%`]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const countQuery = query.clone().count("*", { as: "count" }).first();
|
const countQuery = query.clone().count("*", { as: "count" }).first();
|
||||||
|
|||||||
@@ -47,10 +47,13 @@ export const pamResourceDALFactory = (db: TDbClient) => {
|
|||||||
const query = dbInstance(TableName.PamResource).where(`${TableName.PamResource}.projectId`, projectId);
|
const query = dbInstance(TableName.PamResource).where(`${TableName.PamResource}.projectId`, projectId);
|
||||||
|
|
||||||
if (search) {
|
if (search) {
|
||||||
|
// escape special characters (`%`, `_`) and the escape character itself (`\`)
|
||||||
|
const escapedSearch = search.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
|
||||||
|
const pattern = `%${escapedSearch}%`;
|
||||||
void query.where((q) => {
|
void query.where((q) => {
|
||||||
void q
|
void q
|
||||||
.whereILike(`${TableName.PamResource}.name`, `%${search}%`)
|
.whereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamResource, "name", pattern])
|
||||||
.orWhereILike(`${TableName.PamResource}.resourceType`, `%${search}%`);
|
.orWhereRaw(`??.?? ILIKE ? ESCAPE '\\'`, [TableName.PamResource, "resourceType", pattern]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user