@contrail/flexplm 1.7.7-alpha.1ad98c2 → 1.7.7-alpha.24a6b7d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlexPLMConnect = void 0;
|
|
4
4
|
const app_framework_1 = require("@contrail/app-framework");
|
|
5
|
-
// Module-level on purpose: a new FlexPLMConnect is constructed for every event. Declaring for Session
|
|
5
|
+
// Module-level on purpose: a new FlexPLMConnect is constructed for every event. Declaring for Session reusing use case.
|
|
6
6
|
const sessionCache = new Map();
|
|
7
7
|
// Added for Session reuse - ET-390 - Ends
|
|
8
8
|
class FlexPLMConnect {
|
|
@@ -41,7 +41,6 @@ class FlexPLMConnect {
|
|
|
41
41
|
const cfg = this.config ?? {};
|
|
42
42
|
const sessReuseEntries = (name) => cfg[`flexplmConnect.sessionReuse.${name}`];
|
|
43
43
|
const enabled = sessReuseEntries('enabled');
|
|
44
|
-
console.info('sessionReuse.enabled value is --> ' + enabled);
|
|
45
44
|
return {
|
|
46
45
|
enabled: enabled === true || String(enabled).toLowerCase() === 'true',
|
|
47
46
|
ttlMs: (sessReuseEntries('ttlSeconds') ?? 900) * 1000,
|
|
@@ -63,12 +62,10 @@ class FlexPLMConnect {
|
|
|
63
62
|
sessionCache.delete(key);
|
|
64
63
|
return undefined;
|
|
65
64
|
}
|
|
66
|
-
console.info('cachedSessValue.cookie: ' + cachedSessValue.cookie);
|
|
67
65
|
return cachedSessValue.cookie;
|
|
68
66
|
}
|
|
69
67
|
storeSession(cookie) {
|
|
70
68
|
// sliding expiry: Windchill's session timeout is also sliding
|
|
71
|
-
console.info('cookie: ' + cookie);
|
|
72
69
|
sessionCache.set(this.getSessionKey(), { cookie, expiresAt: Date.now() + this.sessionOptions.ttlMs });
|
|
73
70
|
}
|
|
74
71
|
clearSession() {
|
|
@@ -77,7 +74,6 @@ class FlexPLMConnect {
|
|
|
77
74
|
/** Returns the session cookie value Windchill issued on this response, if any (last one wins). */
|
|
78
75
|
extractSessionCookie(response) {
|
|
79
76
|
const respHeader = response?.headers;
|
|
80
|
-
console.info('respHeader: ' + respHeader);
|
|
81
77
|
if (!respHeader)
|
|
82
78
|
return undefined;
|
|
83
79
|
let raw = [];
|
|
@@ -97,7 +93,6 @@ class FlexPLMConnect {
|
|
|
97
93
|
cookieNameMatcher = regexFilter.exec(line);
|
|
98
94
|
}
|
|
99
95
|
}
|
|
100
|
-
console.info('jSession: ' + jSession);
|
|
101
96
|
return jSession;
|
|
102
97
|
}
|
|
103
98
|
cookieHeader(sessionCookie) {
|
|
@@ -124,7 +119,6 @@ class FlexPLMConnect {
|
|
|
124
119
|
}
|
|
125
120
|
// Added for Session reuse - ET-390 - Starts
|
|
126
121
|
const cookie = this.cookieHeader(sessionCookie);
|
|
127
|
-
console.info('sessionReuse--cookie --> ' + cookie);
|
|
128
122
|
if (cookie) {
|
|
129
123
|
csrfOptions.headers['Cookie'] = cookie;
|
|
130
124
|
}
|
|
@@ -138,7 +132,6 @@ class FlexPLMConnect {
|
|
|
138
132
|
// Added for Session reuse - ET-390 - Ends
|
|
139
133
|
console.info('csrfOptions: ' + JSON.stringify(logOptions));
|
|
140
134
|
}
|
|
141
|
-
console.info('csrfOptions --> ' + csrfOptions);
|
|
142
135
|
return csrfOptions;
|
|
143
136
|
}
|
|
144
137
|
/////////////////////////////////////////////////////////////////////////////
|
|
@@ -159,7 +152,6 @@ class FlexPLMConnect {
|
|
|
159
152
|
const csrfOptions = this.getRequestOptions('GET', sentCookie);
|
|
160
153
|
// Added for Session reuse - ET-390 - Ends
|
|
161
154
|
let response = await fetch(csrfURL, csrfOptions);
|
|
162
|
-
console.info('response.status: ' + response.status);
|
|
163
155
|
// Added for Session reuse - ET-390 - Starts
|
|
164
156
|
// if the response status is 401 or 403, then get a new session id
|
|
165
157
|
if (sentCookie && this.sessionOptions.retryStatuses.includes(response.status)) {
|
|
@@ -190,9 +182,7 @@ class FlexPLMConnect {
|
|
|
190
182
|
const body = await response.json();
|
|
191
183
|
const nonce_key = body.items[0].attributes.nonce_key;
|
|
192
184
|
const nonce = body.items[0].attributes.nonce;
|
|
193
|
-
|
|
194
|
-
console.info('sessionCookie: ' + sessionCookie);
|
|
195
|
-
//ET-390 - adding sessionCookie to the return
|
|
185
|
+
// ET-390 - adding sessionCookie to the return
|
|
196
186
|
return {
|
|
197
187
|
nonce_key,
|
|
198
188
|
nonce,
|
|
@@ -321,8 +311,6 @@ class FlexPLMConnect {
|
|
|
321
311
|
this.storeSession(cachedCookie);
|
|
322
312
|
}
|
|
323
313
|
// Added for Session reuse - ET-390 - Ends
|
|
324
|
-
console.info('if loop entry 1: ' + this.sessionOptions.retryStatuses.includes(response.status));
|
|
325
|
-
console.info('response.status1: ' + response.status);
|
|
326
314
|
if (response.status >= 300) {
|
|
327
315
|
const message = 'Error connecting to FlexPLM:status: ' + response.status;
|
|
328
316
|
console.error(message);
|
|
@@ -39,7 +39,12 @@ const resp = (status, setCookie = [], json = csrfBody) => ({
|
|
|
39
39
|
});
|
|
40
40
|
let userCounter = 0;
|
|
41
41
|
const uniqueUser = () => 'sess-user-' + (++userCounter);
|
|
42
|
-
|
|
42
|
+
// The connector config is flat: keys look like 'flexplmConnect.sessionReuse.enabled'
|
|
43
|
+
const sessionConfig = (user, sessionReuse = { enabled: true }) => {
|
|
44
|
+
const flat = {};
|
|
45
|
+
Object.entries(sessionReuse).forEach(([k, v]) => { flat[`flexplmConnect.sessionReuse.${k}`] = v; });
|
|
46
|
+
return createConfig({ userName: () => user, ...flat });
|
|
47
|
+
};
|
|
43
48
|
const fetchMock = () => global.fetch;
|
|
44
49
|
const callHeaders = (i) => fetchMock().mock.calls[i][1].headers;
|
|
45
50
|
const callMethod = (i) => fetchMock().mock.calls[i][1].method;
|
|
@@ -140,7 +145,7 @@ describe('FlexPLMConnect.sendRequest', () => {
|
|
|
140
145
|
// Added for Session reuse - ET-390 - Starts
|
|
141
146
|
describe('FlexPLMConnect session reuse', () => {
|
|
142
147
|
const payload = { id: '123' };
|
|
143
|
-
it('
|
|
148
|
+
it('should capture JSESSIONID from the CSRF GET and send it on the POST', async () => {
|
|
144
149
|
const u = uniqueUser();
|
|
145
150
|
fetchMock()
|
|
146
151
|
.mockResolvedValueOnce(resp(200, ['JSESSIONID=abc.tomcat1; Path=/; HttpOnly']))
|