Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,19 @@ You can set your own regexp if you need to :
}),
````

#### Mask IDs from url paths

This can be combined with idsRegExp

`/project/12981/feature` becomes `/project/XXXXX/feature`
````ts
Angulartics2Module.forRoot({
pageTracking: {
maskIds: true,
}
}),
````

#### Remove Query Params from url paths

This can be combined with clearIds and idsRegExp
Expand Down
3 changes: 3 additions & 0 deletions src/lib/angulartics2-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ export interface PageTrackingSettings {
excludedRoutes: (string | RegExp)[];
/** drop ids from url `/sections/123/pages/456` -> `/sections/pages` */
clearIds: boolean;
/** mask ids of url `/sections/123/pages/456` -> `/sections/XXXXX/pages/XXXXX` */
maskIds: boolean;
/** drop contents of url after hash marker `/callback#authcode=1234` -> `/callback` */
clearHash: boolean;
/** drop query params from url `/sections/123/pages?param=456&param2=789` -> `/sections/123/pages` */
Expand All @@ -52,6 +54,7 @@ export class DefaultConfig implements Angulartics2Settings {
basePath: '',
excludedRoutes: [],
clearIds: false,
maskIds: false,
clearHash: false,
clearQueryParams: false,
idsRegExp:
Expand Down
20 changes: 12 additions & 8 deletions src/lib/angulartics2-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,19 +81,23 @@ export class Angulartics2 {
protected clearUrl(url: string): string {
if (
this.settings.pageTracking.clearIds ||
this.settings.pageTracking.maskIds ||
this.settings.pageTracking.clearQueryParams ||
this.settings.pageTracking.clearHash
) {
return url
const newUrl = url
.split('/')
.map(part => (this.settings.pageTracking.clearQueryParams ? part.split('?')[0] : part))
.map(part => (this.settings.pageTracking.clearHash ? part.split('#')[0] : part))
.filter(
part =>
!this.settings.pageTracking.clearIds ||
!part.match(this.settings.pageTracking.idsRegExp),
)
.join('/');
.map(part => (this.settings.pageTracking.clearHash ? part.split('#')[0] : part));

if (this.settings.pageTracking.clearIds) {
return newUrl.filter(part => !part.match(this.settings.pageTracking.idsRegExp)).join('/');
} else if (this.settings.pageTracking.maskIds) {
return newUrl
.map(part => part.replace(this.settings.pageTracking.idsRegExp, 'XXXXX'))
.join('/');
}
return newUrl.join('/');
}
return url;
}
Expand Down
37 changes: 37 additions & 0 deletions src/lib/angulartics2.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,43 @@ describe('angulartics2', () => {
),
));

it('should mask ids and uuids from url if maskIds is true', fakeAsync(
inject(
[Router, Location, Angulartics2],
(router: Router, location: Location, angulartics2: Angulartics2) => {
fixture = createRootWithRouter(router, RootCmp);
angulartics2.pageTrack.subscribe((x: any) => EventSpy(x));
angulartics2.settings.pageTracking.maskIds = true;
(location as SpyLocation).simulateUrlPop(
'/0sections0/01234567-9ABC-DEF0-1234-56789ABCDEF0/pages?param=456',
);
advance(fixture);
expect(EventSpy).toHaveBeenCalledWith({
path: '/0sections0/XXXXX/pages?param=456',
});
},
),
));

it('should mask ids using custom regex if idsRegExp is set', fakeAsync(
inject(
[Router, Location, Angulartics2],
(router: Router, location: Location, angulartics2: Angulartics2) => {
fixture = createRootWithRouter(router, RootCmp);
angulartics2.pageTrack.subscribe((x: any) => EventSpy(x));
angulartics2.settings.pageTracking.maskIds = true;
angulartics2.settings.pageTracking.idsRegExp = /^[a-z]\d+$/;
(location as SpyLocation).simulateUrlPop(
'/0sections0/a01/pages/page/2/summary?param=456',
);
advance(fixture);
expect(EventSpy).toHaveBeenCalledWith({
path: '/0sections0/XXXXX/pages/page/2/summary?param=456',
});
},
),
));

it('should remove hash if clearHash is set', fakeAsync(
inject(
[Router, Location, Angulartics2],
Expand Down