Skip to content

Commit 078ace0

Browse files
Add WalkMe SRI (cloned) (#718)
* Add WalkMe SRI Fix previous test and add new cases * Fix unit test Co-authored-by: Francisco Garcia <paco.g@walkme.com>
1 parent 2d71ec3 commit 078ace0

File tree

3 files changed

+100
-29
lines changed

3 files changed

+100
-29
lines changed

integrations/walkme/lib/index.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
var integration = require('@segment/analytics.js-integration');
8+
var { option } = require('@segment/analytics.js-integration/lib/statics');
89

910
/**
1011
* Expose `WalkMe`
@@ -17,7 +18,8 @@ var WalkMe = module.exports = integration('WalkMe')
1718
.option('environment', '')
1819
.option('trackWalkMeEvents', false)
1920
.option('loadWalkMeInIframe', false)
20-
.tag('<script src="https://cdn.walkme.com/users/{{ walkMeSystemId }}{{ walkMeEnvironment }}/walkme_{{ walkMeSystemId }}_https.js">')
21+
.option('integrityHash', '')
22+
.tag('<script async="true" src="{{ url }}" crossorigin="" integrity="{{ hash }}">')
2123

2224
/**
2325
* Initialize WalkMe
@@ -57,9 +59,19 @@ WalkMe.prototype.initialize = function() {
5759
}
5860
};
5961

62+
var sriSuffix = '';
63+
var walkMeSystemId = this.options.walkMeSystemId.toLowerCase();
64+
65+
// WalkMe SRI is enabled
66+
if (this.options.integrityHash) {
67+
sriSuffix = 'private_';
68+
}
69+
70+
var url = 'https://cdn.walkme.com/users/' + walkMeSystemId + env + '/walkme_' + sriSuffix + walkMeSystemId + '_https.js';
71+
6072
this.load({
61-
walkMeSystemId: this.options.walkMeSystemId.toLowerCase(),
62-
walkMeEnvironment: env
73+
url,
74+
hash: this.options.integrityHash
6375
});
6476
};
6577

@@ -95,4 +107,6 @@ WalkMe.prototype.track = function () {
95107

96108
WalkMe.prototype.reset = function () {
97109
window._walkMe && window._walkMe.removeWalkMe && window._walkMe.removeWalkMe();
110+
window.walkme_ready = undefined;
111+
window._walkmeConfig = undefined;
98112
}

integrations/walkme/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
"walkme"
1010
],
1111
"main": "lib/index.js",
12+
"scripts": {
13+
"test": "karma start",
14+
"test:ci": "karma start karma.conf-ci.js"
15+
},
1216
"repository": {
1317
"type": "git",
1418
"url": "git+https://github.com/walkme/analytics.js-integration-walkme.git"

integrations/walkme/test/index.test.js

+79-26
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
'use strict';
22

3-
window.localStorage.setItem('wm_segment', true);
4-
53
var Analytics = require('@segment/analytics.js-core').constructor;
64
var integration = require('@segment/analytics.js-integration');
75
var sandbox = require('@segment/clear-env');
@@ -12,10 +10,13 @@ var Walkme = require('../lib');
1210
describe('WalkMe', function() {
1311
var analytics;
1412
var walkme;
13+
1514
var options = {
16-
walkMeSystemId: 'E011E9F84AD84D819286A5A94BAF2255',
17-
walkMeEnvironment: 'test',
18-
walkMeLoadInIframe: true
15+
walkMeSystemId: '1af309271794493f842eeea09740feb0'.toUpperCase(),
16+
environment: 'test',
17+
trackWalkMeEvents: false,
18+
loadWalkMeInIframe: true,
19+
integrityHash: ''
1920
};
2021

2122
beforeEach(function() {
@@ -24,22 +25,27 @@ describe('WalkMe', function() {
2425
analytics.use(Walkme);
2526
analytics.use(tester);
2627
analytics.add(walkme);
28+
window.analytics = analytics;
2729
});
2830

2931
afterEach(function() {
3032
analytics.restore();
3133
analytics.reset();
3234
walkme.reset();
3335
sandbox();
36+
window.analytics = undefined;
3437
});
3538

3639
it('should have the correct settings', function() {
3740
analytics.compare(
3841
Walkme,
3942
integration('WalkMe')
40-
.assumesPageview()
41-
.option('walkMeSystemId', '')
42-
.option('walkMeEnvironment', '')
43+
.assumesPageview()
44+
.option('walkMeSystemId', '')
45+
.option('environment', '')
46+
.option('trackWalkMeEvents', false)
47+
.option('loadWalkMeInIframe', false)
48+
.option('integrityHash', '')
4349
);
4450
});
4551

@@ -54,7 +60,17 @@ describe('WalkMe', function() {
5460
analytics.initialize();
5561
analytics.page();
5662
analytics.identify();
57-
analytics.deepEqual(window._walkmeConfig, { smartLoad: true });
63+
64+
analytics.deepEqual(window._walkmeConfig, {
65+
smartLoad: true,
66+
segmentOptions: options
67+
});
68+
});
69+
70+
it('should call #load', function() {
71+
analytics.initialize();
72+
analytics.page();
73+
analytics.called(walkme.load);
5874
});
5975
});
6076
});
@@ -64,37 +80,74 @@ describe('WalkMe', function() {
6480
analytics.spy(walkme, 'load');
6581
});
6682

83+
this.afterEach(() => {
84+
window._walkmeInternals.Segment = false
85+
})
86+
6787
it('should load walkme test lib', function(done) {
6888
try {
89+
var tag = fmt(
90+
'<script src="https://cdn.walkme.com/users/%s/%s/walkme_%s_https.js" >',
91+
options.walkMeSystemId.toLowerCase(),
92+
'test',
93+
options.walkMeSystemId.toLowerCase()
94+
);
95+
96+
window.walkme_ready = function() {
97+
analytics.assert(
98+
!!window.WalkMeAPI,
99+
'Expected WalkMeAPI to be present on the page'
100+
);
101+
102+
done();
103+
};
104+
69105
analytics.load(walkme, function() {
70-
analytics.loaded(
71-
fmt(
72-
'<script src="https://cdn.walkme.com/users/%s/%s/walkme_%s_https.js"/>',
73-
options.walkMeSystemId.toLowerCase(),
74-
'test',
75-
options.walkMeSystemId.toLowerCase()
76-
)
106+
analytics.loaded(tag);
107+
analytics.identify('UserId');
108+
});
109+
} catch (e) {
110+
done(e);
111+
}
112+
}).timeout(10000);
113+
114+
it('should load walkme SRI', function(done) {
115+
try {
116+
var walkMeSystemId = '42b2849a0ca54749bd485bcbd5bcc64e';
117+
var integrityHash = 'sha256-FjbibNOUzdIz+mtyFRU7NHj1G5tPgzOuJNCkRyDmXr8=';
118+
119+
var tag = fmt(
120+
'<script src="https://cdn.walkme.com/users/%s/%s/walkme_private_%s_https.js" crossorigin="" integrity="%s" >',
121+
walkMeSystemId,
122+
'test',
123+
walkMeSystemId,
124+
integrityHash
125+
);
126+
127+
window.walkme_ready = function() {
128+
analytics.assert(
129+
!!window.WalkMeAPI,
130+
'Expected WalkMeAPI to be present on the page'
77131
);
78132

79-
analytics.identify();
133+
done();
134+
};
80135

81-
window.walkme_ready = function() {
82-
analytics.assert(
83-
!!window.WalkMeAPI,
84-
'Expected WalkMeAPI to be present on the page'
85-
);
136+
walkme.options.walkMeSystemId = '42b2849a0ca54749bd485bcbd5bcc64e';
137+
walkme.options.integrityHash = 'sha256-FjbibNOUzdIz+mtyFRU7NHj1G5tPgzOuJNCkRyDmXr8=';
86138

87-
done();
88-
};
139+
analytics.load(walkme, function() {
140+
analytics.loaded(tag);
89141
});
90142
} catch (e) {
91143
done(e);
92144
}
93-
});
145+
}).timeout(10000);
94146
});
95147

96148
describe('after loading', function() {
97149
beforeEach(function(done) {
150+
window.analytics = analytics;
98151
analytics.once('ready', done);
99152
analytics.initialize();
100153
analytics.page();
@@ -145,7 +198,7 @@ describe('WalkMe', function() {
145198
window.walkme_ready = function() {
146199
done();
147200
};
148-
});
201+
}).timeout(10000);
149202
});
150203
});
151204
});

0 commit comments

Comments
 (0)