Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strip query params in linkmanager navigate #2393

Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
41b59db
don't allow query params in path of linkmanager navigate function
JohannesDoberer Nov 23, 2021
ca6eabf
removed decodeURIComponent
JohannesDoberer Nov 23, 2021
4b6496c
cut search params in path string from luigi client and encode searchp…
JohannesDoberer Nov 24, 2021
6ce9ca8
run commit hook
JohannesDoberer Nov 24, 2021
a31f94e
update todo
JohannesDoberer Nov 24, 2021
39caf30
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Nov 24, 2021
beb6245
removed unnesessary code
JohannesDoberer Nov 25, 2021
3db5664
Merge branch 'strip-query-params-in-linkmanager-navigate' of github.c…
JohannesDoberer Nov 25, 2021
067a9ff
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Nov 25, 2021
d868e0e
comment update
JohannesDoberer Nov 25, 2021
c2b286f
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Nov 29, 2021
48363d3
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Dec 3, 2021
afba15d
improvements
JohannesDoberer Dec 6, 2021
1bcce31
Merge branch 'strip-query-params-in-linkmanager-navigate' of github.c…
JohannesDoberer Dec 6, 2021
ec0145d
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Dec 8, 2021
e94f8b0
improvements
JohannesDoberer Dec 8, 2021
29b9e8b
tests
JohannesDoberer Dec 8, 2021
792d570
test fix
JohannesDoberer Dec 8, 2021
865066d
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Dec 9, 2021
26c4a3e
package-lock
JohannesDoberer Dec 9, 2021
be4c769
Merge branch 'strip-query-params-in-linkmanager-navigate' of github.c…
JohannesDoberer Dec 9, 2021
0e4fa7a
package-lock
JohannesDoberer Dec 9, 2021
fd3307d
package-lock
JohannesDoberer Dec 9, 2021
950d697
package lock
JohannesDoberer Dec 9, 2021
7123108
suggestion
JohannesDoberer Dec 10, 2021
e668311
package.json revert
JohannesDoberer Dec 10, 2021
73fe357
package-lock
JohannesDoberer Dec 10, 2021
b435234
package lock
JohannesDoberer Dec 13, 2021
0e530b9
package lock
JohannesDoberer Dec 13, 2021
769b679
package lock
JohannesDoberer Dec 13, 2021
93ef7d9
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Dec 14, 2021
7d361bd
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
JohannesDoberer Dec 15, 2021
5fa2de9
suggestion
JohannesDoberer Dec 15, 2021
8ba179d
Merge branch 'strip-query-params-in-linkmanager-navigate' of github.c…
JohannesDoberer Dec 15, 2021
9cbee2f
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
stanleychh Dec 16, 2021
b4ddaad
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
stanleychh Dec 16, 2021
263b583
Merge branch 'master' into strip-query-params-in-linkmanager-navigate
stanleychh Dec 16, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion client/src/linkManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ export class linkManager extends LuigiClientBase {
console.warn('Navigation with an absolute path prevented.');
return;
}

const navigationOpenMsg = {
msg: 'luigi.navigation.open',
sessionId: sessionId,
Expand Down
35 changes: 20 additions & 15 deletions core/src/App.html
Original file line number Diff line number Diff line change
Expand Up @@ -1348,16 +1348,19 @@

if ('luigi.navigation.open' === e.data.msg) {
isNavigateBack = false;

const srcNode = isSpecialIframe ? iframe.luigi.currentNode : undefined;
const srcPathParams = isSpecialIframe ? iframe.luigi.pathParams : undefined;

if (e.data.params.newTab) {
let path = buildPath(e.data.params, srcNode, srcPathParams);
const params = e.data.params;
const { intent, newTab, modal, splitView, drawer, withoutSync } = params;
if (e.source !== window && !intent && params.link) {
params.link = params.link.split('?')[0];
}
if (newTab) {
let path = buildPath(params, srcNode, srcPathParams);
path = GenericHelpers.addLeadingSlash(path);
openViewInNewTab(path);
} else if (e.data.params.modal !== undefined) {
let path = buildPath(e.data.params, srcNode, srcPathParams);
} else if (modal !== undefined) {
let path = buildPath(params, srcNode, srcPathParams);
path = GenericHelpers.addLeadingSlash(path);
const pathExist = await pathExists(path);
path = await RoutingHelpers.handlePageNotFoundAndRetrieveRedirectPath(
Expand All @@ -1370,9 +1373,9 @@
}
contentNode = node;
resetMicrofrontendModalData();
openViewInModal(path, e.data.params.modal === true ? {} : e.data.params.modal);
} else if (e.data.params.splitView !== undefined) {
let path = buildPath(e.data.params, srcNode, srcPathParams);
openViewInModal(path, modal === true ? {} : modal);
} else if (splitView !== undefined) {
let path = buildPath(params, srcNode, srcPathParams);
path = GenericHelpers.addLeadingSlash(path);
const pathExist = await pathExists(path);
path = await RoutingHelpers.handlePageNotFoundAndRetrieveRedirectPath(
Expand All @@ -1384,9 +1387,9 @@
return;
}
contentNode = node;
openSplitView(path, e.data.params.splitView);
} else if (e.data.params.drawer !== undefined) {
let path = buildPath(e.data.params, srcNode, srcPathParams);
openSplitView(path, splitView);
} else if (drawer !== undefined) {
let path = buildPath(params, srcNode, srcPathParams);
path = GenericHelpers.addLeadingSlash(path);
const pathExist = await pathExists(path);
path = await RoutingHelpers.handlePageNotFoundAndRetrieveRedirectPath(
Expand All @@ -1399,11 +1402,11 @@
}
contentNode = node;
resetMicrofrontendDrawerData();
e.data.params.drawer.isDrawer = true;
openViewInDrawer(path, e.data.params.drawer);
drawer.isDrawer = true;
openViewInDrawer(path, drawer);
} else {
getUnsavedChangesModalPromise().then(() => {
isNavigationSyncEnabled = !e.data.params.withoutSync;
isNavigationSyncEnabled = !withoutSync;
handleNavigation(e.data, config, srcNode, srcPathParams);
closeModal();
closeSplitView();
Expand Down Expand Up @@ -1593,6 +1596,8 @@
data,
keepBrowserHistory
);
} else {
console.warn('No client permissions to add url parameter for this node.');
}
}

Expand Down
8 changes: 5 additions & 3 deletions core/src/services/routing.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,18 @@ class RoutingClass {
const preserveQueryParams = LuigiConfig.getConfigValue('routing.preserveQueryParams');
let url = new URL(location.href);
route = preserveQueryParams ? RoutingHelpers.composeSearchParamsToRoute(route) : route;
hashRouting ? (url.hash = route) : (url.pathname = route);
if (hashRouting) {
url.hash = route;
}

const chosenHistoryMethod = pushState ? 'pushState' : 'replaceState';
const method = LuigiConfig.getConfigValue('routing.disableBrowserHistory') ? 'replaceState' : chosenHistoryMethod;
window.history[method](
{
path: hashRouting ? url.hash : decodeURIComponent(url.pathname)
path: hashRouting ? url.hash : route
},
'',
hashRouting ? url.hash : decodeURIComponent(url.pathname)
hashRouting ? url.hash : route
);

// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Browser_compatibility
Expand Down
18 changes: 14 additions & 4 deletions core/src/utilities/helpers/routing-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class RoutingHelpersClass {
}

parseParams(paramsString) {
if (!paramsString) return {};
const result = {};
const viewParamString = paramsString;
const pairs = viewParamString ? viewParamString.split('&') : null;
Expand Down Expand Up @@ -504,15 +505,24 @@ class RoutingHelpersClass {
}

addSearchParamsFromClient(currentNode, searchParams, keepBrowserHistory) {
const localSearchParams = { ...searchParams };
if (!GenericHelpers.isObject(localSearchParams)) {
return;
}
Object.keys(localSearchParams).forEach(key => {
localSearchParams[key] = encodeURIComponent(localSearchParams[key]);
});
if (currentNode && currentNode.clientPermissions && currentNode.clientPermissions.urlParameters) {
const filteredObj = {};
Object.keys(currentNode.clientPermissions.urlParameters).forEach(key => {
if (key in searchParams && currentNode.clientPermissions.urlParameters[key].write === true) {
filteredObj[key] = searchParams[key];
} else {
console.warn(`No permission to add "${key}" to the url`);
if (key in localSearchParams && currentNode.clientPermissions.urlParameters[key].write === true) {
filteredObj[key] = localSearchParams[key];
delete localSearchParams[key];
}
});
for (const key in localSearchParams) {
console.warn(`No permission to add the search param "${key}" to the url`);
}
if (Object.keys(filteredObj).length > 0) {
LuigiRouting.addSearchParams(filteredObj, keepBrowserHistory);
}
Expand Down
4 changes: 2 additions & 2 deletions core/test/utilities/helpers/routing-helpers.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ describe('Routing-helpers', () => {
it('Client can not write luigi url parameter', () => {
currentNode.clientPermissions.urlParameters.luigi.write = false;
RoutingHelpers.addSearchParamsFromClient(currentNode, { luigi: 'rocks', test: 'tets' });
sinon.assert.calledWith(console.warn, 'No permission to add "luigi" to the url');
sinon.assert.calledWith(console.warn, 'No permission to add the search param "luigi" to the url');
});
it('Client can only write specific url parameter', () => {
currentNode.clientPermissions.urlParameters = {
Expand All @@ -693,7 +693,7 @@ describe('Routing-helpers', () => {
};
RoutingHelpers.addSearchParamsFromClient(currentNode, { luigi: 'rocks', test: 'tets' });
sinon.assert.calledWith(LuigiRouting.addSearchParams, { test: 'tets' });
sinon.assert.calledWith(console.warn, 'No permission to add "luigi" to the url');
sinon.assert.calledWith(console.warn, 'No permission to add the search param "luigi" to the url');
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,19 +309,6 @@ <h3 class="fd-layout-panel__title">Navigate</h3>
data="linkManager().navigate('users/groups/stakeholders')"
></app-code-snippet>
</li>
<li class="fd-list__item">
<a
href="javascript:void(0)"
class="fd-link"
(click)="
linkManager().navigate('/projects/pr1/settings?ft=ft1')
"
>FeatureToggle</a
>
<app-code-snippet
data="linkManager().navigate('/projects/pr1/settings?ft=ft1')"
></app-code-snippet>
</li>
<li class="fd-list__item">
<a
href="javascript:void(0)"
Expand Down Expand Up @@ -388,24 +375,6 @@ <h3 class="fd-layout-panel__title">Navigate</h3>
>
</app-code-snippet>
</li>
<li class="fd-list__item">
<a
href="javascript:void(0)"
class="fd-link"
(click)="
linkManager()
.fromClosestContext()
.withParams({ feature: 'toggle' })
.navigate('settings_ft?ft=ft1')
"
>
project to settings with params (foo=bar) and FeatureToggle</a
>
<app-code-snippet
data="linkManager().fromClosestContext().withParams({feature: 'toggle'}).navigate('settings_ft?ft=ft1')"
>
</app-code-snippet>
</li>
<li class="fd-list__item">
<a
href="javascript:void(0)"
Expand Down