Commit f3c10a4ca2d6d695255736909485bfaa89e46ba5

Authored by Igor Kulikov
1 parent 27c9ad95

Improve query params handling

... ... @@ -294,10 +294,11 @@ export class AuthService {
294 294 })
295 295 );
296 296 } else if (accessToken) {
297   - this.utils.updateQueryParam('accessToken', null);
  297 + const queryParamsToRemove = ['accessToken'];
298 298 if (refreshToken) {
299   - this.utils.updateQueryParam('refreshToken', null);
  299 + queryParamsToRemove.push('refreshToken');
300 300 }
  301 + this.utils.removeQueryParams(queryParamsToRemove);
301 302 try {
302 303 this.updateAndValidateToken(accessToken, 'jwt_token', false);
303 304 if (refreshToken) {
... ...
... ... @@ -410,9 +410,23 @@ export class UtilsService {
410 410 return decodeURIComponent(results[2].replace(/\+/g, ' '));
411 411 }
412 412
  413 + public removeQueryParams(keys: Array<string>) {
  414 + let params = this.window.location.search;
  415 + for (const key of keys) {
  416 + params = this.updateUrlQueryString(params, key, null);
  417 + }
  418 + const baseUrlPart = [baseUrl(), this.window.location.pathname].join('');
  419 + this.window.history.replaceState({}, '', baseUrlPart + params);
  420 + }
  421 +
413 422 public updateQueryParam(name: string, value: string | null) {
414 423 const baseUrlPart = [baseUrl(), this.window.location.pathname].join('');
415 424 const urlQueryString = this.window.location.search;
  425 + const params = this.updateUrlQueryString(urlQueryString, name, value);
  426 + this.window.history.replaceState({}, '', baseUrlPart + params);
  427 + }
  428 +
  429 + private updateUrlQueryString(urlQueryString: string, name: string, value: string | null): string {
416 430 let newParam = '';
417 431 let params = '';
418 432 if (value !== null) {
... ... @@ -425,13 +439,16 @@ export class UtilsService {
425 439 newParam = '$1' + newParam;
426 440 }
427 441 params = urlQueryString.replace(keyRegex, newParam);
  442 + if (params.startsWith('&')) {
  443 + params = '?' + params.substring(1);
  444 + }
428 445 } else if (newParam) {
429 446 params = urlQueryString + '&' + newParam;
430 447 }
431 448 } else if (newParam) {
432 449 params = '?' + newParam;
433 450 }
434   - this.window.history.replaceState({}, '', baseUrlPart + params);
  451 + return params;
435 452 }
436 453
437 454 public baseUrl(): string {
... ...