From d95861e1fb1862ec55c059df9e8790f469ae74c0 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 29 May 2020 20:29:34 -0500 Subject: [PATCH] Don't use duplicate relations when eager-loading access list items and clients. This fixes an Objection warning: 'Duplicate relation "proxy_hosts" in a relation expression. You should use "a.[b, c]" instead of "[a.b, a.c]". This will cause an error in objection 2.0'. It also fixes the access list clients not being properly eager-loaded when building the proxy host nginx configuration files. Closes #434 --- backend/internal/access-list.js | 6 +++--- backend/internal/proxy-host.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/internal/access-list.js b/backend/internal/access-list.js index 36a9d2bb..c70a53a1 100644 --- a/backend/internal/access-list.js +++ b/backend/internal/access-list.js @@ -71,7 +71,7 @@ const internalAccessList = { // re-fetch with expansions return internalAccessList.get(access, { id: data.id, - expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients', 'proxy_hosts.access_list.items'] + expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.[clients,items]'] }, true /* <- skip masking */); }) .then((row) => { @@ -216,7 +216,7 @@ const internalAccessList = { // re-fetch with expansions return internalAccessList.get(access, { id: data.id, - expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.clients', 'proxy_hosts.access_list.items'] + expand: ['owner', 'items', 'clients', 'proxy_hosts.access_list.[clients,items]'] }, true /* <- skip masking */); }) .then((row) => { @@ -254,7 +254,7 @@ const internalAccessList = { .joinRaw('LEFT JOIN `proxy_host` ON `proxy_host`.`access_list_id` = `access_list`.`id` AND `proxy_host`.`is_deleted` = 0') .where('access_list.is_deleted', 0) .andWhere('access_list.id', data.id) - .allowEager('[owner,items,clients,proxy_hosts,proxy_hosts.access_list.clients,proxy_hosts.access_list.items]') + .allowEager('[owner,items,clients,proxy_hosts.[*, access_list.[clients,items]]]') .omit(['access_list.is_deleted']) .first(); diff --git a/backend/internal/proxy-host.js b/backend/internal/proxy-host.js index 115af92e..b26e0566 100644 --- a/backend/internal/proxy-host.js +++ b/backend/internal/proxy-host.js @@ -73,7 +73,7 @@ const internalProxyHost = { // re-fetch with cert return internalProxyHost.get(access, { id: row.id, - expand: ['certificate', 'owner', 'access_list.clients', 'access_list.items'] + expand: ['certificate', 'owner', 'access_list.[clients,items]'] }); }) .then((row) => { @@ -186,7 +186,7 @@ const internalProxyHost = { .then(() => { return internalProxyHost.get(access, { id: data.id, - expand: ['owner', 'certificate', 'access_list.clients', 'access_list.items'] + expand: ['owner', 'certificate', 'access_list.[clients,items]'] }) .then((row) => { // Configure nginx @@ -219,7 +219,7 @@ const internalProxyHost = { .query() .where('is_deleted', 0) .andWhere('id', data.id) - .allowEager('[owner,access_list,access_list.clients,access_list.items,certificate]') + .allowEager('[owner,access_list,access_list.[clients,items],certificate]') .first(); if (access_data.permission_visibility !== 'all') {