@onehat/data 1.19.5 → 1.19.7
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.
- package/package.json +1 -1
- package/src/Integration/Browser/Repository/LocalStorage.js +0 -2
- package/src/Integration/Browser/Repository/SecureLocalStorage.js +84 -0
- package/src/Integration/Browser/Repository/SecureSessionStorage.js +56 -0
- package/src/Integration/Browser/Repository/SessionStorage.js +2 -0
- package/src/Repository/Repository.js +1 -5
package/package.json
CHANGED
|
@@ -7,8 +7,6 @@ import _ from 'lodash';
|
|
|
7
7
|
/**
|
|
8
8
|
* Repository representing a browser's LocalStorage implementation
|
|
9
9
|
* Uses store2 package
|
|
10
|
-
* Note: LocalStorage is only active for the current browser session.
|
|
11
|
-
* It does not persist across sessions. For that, use SessionStorage.
|
|
12
10
|
* @extends OfflineRepository
|
|
13
11
|
*/
|
|
14
12
|
class LocalStorageRepository extends OfflineRepository {
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** @module Repository */
|
|
2
|
+
|
|
3
|
+
import LocalStorageRepository from '@onehat/data/src/Integration/Browser/Repository/LocalStorage';
|
|
4
|
+
import AES from 'crypto-js/aes';
|
|
5
|
+
import _ from 'lodash';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Repository representing an encrypted version of the browser's LocalStorage implementation
|
|
9
|
+
* Requires crypto-js - https://www.npmjs.com/package/crypto-js
|
|
10
|
+
* @extends LocalStorageRepository
|
|
11
|
+
*/
|
|
12
|
+
class SecureLocalStorageRepository extends LocalStorageRepository {
|
|
13
|
+
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
|
|
17
|
+
if (_.isEmpty(config.passphrase)) {
|
|
18
|
+
throw new Error('SecureLocalStorageRepository requires a passphrase!');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
this.passphrase = config.passphrase;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_storageGetValue = (name) => {
|
|
25
|
+
try {
|
|
26
|
+
|
|
27
|
+
if (this.debugMode) {
|
|
28
|
+
console.log(this.name, 'LocalStorage.get', name);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// BEGIN MOD
|
|
32
|
+
let result = this._store(name);
|
|
33
|
+
result = AES.decrypt(result, this.passphrase);
|
|
34
|
+
// END MOD
|
|
35
|
+
|
|
36
|
+
if (this.debugMode) {
|
|
37
|
+
console.log(this.name, 'LocalStorage.get results', name, result);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let value = null;
|
|
41
|
+
if (!_.isNil(result)) {
|
|
42
|
+
try {
|
|
43
|
+
value = JSON.parse(result);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
// Invalid JSON, just return raw result
|
|
46
|
+
value = result;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (this.debugMode) {
|
|
52
|
+
const msg = error && error.message;
|
|
53
|
+
debugger;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
_storageSetValue = (name, value) => {
|
|
59
|
+
try {
|
|
60
|
+
if (this.debugMode) {
|
|
61
|
+
console.log(this.name, 'LocalStorage.set', name, value);
|
|
62
|
+
}
|
|
63
|
+
if (!_.isString(value)) {
|
|
64
|
+
value = JSON.stringify(value);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
value = AES.encrypt(value, this.passphrase); // MOD
|
|
68
|
+
|
|
69
|
+
return this._store(name, value);
|
|
70
|
+
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (this.debugMode) {
|
|
73
|
+
const msg = error && error.message;
|
|
74
|
+
debugger;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
SecureLocalStorageRepository.className = 'SecureLocalStorage';
|
|
82
|
+
SecureLocalStorageRepository.type = 'secureLocal';
|
|
83
|
+
|
|
84
|
+
export default SecureLocalStorageRepository;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** @module Repository */
|
|
2
|
+
|
|
3
|
+
import SessionStorageRepository from '@onehat/data/src/Integration/Browser/Repository/SessionStorage';
|
|
4
|
+
import AES from 'crypto-js/aes';
|
|
5
|
+
import _ from 'lodash';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Repository representing an encrypted version of the browser's SessionStorage implementation
|
|
9
|
+
* Requires crypto-js - https://www.npmjs.com/package/crypto-js
|
|
10
|
+
* @extends SessionStorageRepository
|
|
11
|
+
*/
|
|
12
|
+
class SecureSessionStorageRepository extends SessionStorageRepository {
|
|
13
|
+
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
|
|
17
|
+
if (_.isEmpty(config.passphrase)) {
|
|
18
|
+
throw new Error('SecureSessionStorageRepository requires a passphrase!');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
this.passphrase = config.passphrase;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_storageGetValue = (name) => {
|
|
25
|
+
|
|
26
|
+
// BEGIN MOD
|
|
27
|
+
let result = this._store.session(name);
|
|
28
|
+
result = AES.decrypt(result, this.passphrase);
|
|
29
|
+
// END MOD
|
|
30
|
+
|
|
31
|
+
let value;
|
|
32
|
+
try {
|
|
33
|
+
value = JSON.parse(result);
|
|
34
|
+
} catch (e) {
|
|
35
|
+
// Invalid JSON, just return raw result
|
|
36
|
+
value = result;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_storageSetValue = (name, value) => {
|
|
42
|
+
if (!_.isString(value)) {
|
|
43
|
+
value = JSON.stringify(value);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
value = AES.encrypt(value, this.passphrase); // MOD
|
|
47
|
+
|
|
48
|
+
return this._store.session(name, value);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
SecureSessionStorageRepository.className = 'SecureSessionStorage';
|
|
54
|
+
SecureSessionStorageRepository.type = 'secureSession';
|
|
55
|
+
|
|
56
|
+
export default SecureSessionStorageRepository;
|
|
@@ -7,6 +7,8 @@ import _ from 'lodash';
|
|
|
7
7
|
/**
|
|
8
8
|
* Repository representing a browser's SessionStorage implementation
|
|
9
9
|
* Uses store2 package
|
|
10
|
+
* Note: SessionStorage is only active for the current browser session.
|
|
11
|
+
* It does not persist across sessions. For that, use LocalStorage.
|
|
10
12
|
* @extends OfflineRepository
|
|
11
13
|
*/
|
|
12
14
|
class SessionStorageRepository extends OfflineRepository {
|
|
@@ -1044,14 +1044,10 @@ export default class Repository extends EventEmitter {
|
|
|
1044
1044
|
this.throwError('this.createStandaloneEntity is no longer valid. Repository has been destroyed.');
|
|
1045
1045
|
return;
|
|
1046
1046
|
}
|
|
1047
|
-
if (this.isRemotePhantomMode) {
|
|
1048
|
-
this.throwError('This repository uses isRemotePhantomMode, and therefore cannot create standalone entities.');
|
|
1049
|
-
return;
|
|
1050
|
-
}
|
|
1051
1047
|
|
|
1052
1048
|
const entity = Repository._createEntity(this.schema, data, this, isPersisted, isDelayedSave, this.isRemotePhantomMode);
|
|
1053
1049
|
|
|
1054
|
-
if (entity.isPhantom) {
|
|
1050
|
+
if (entity.isPhantom && !this.isRemotePhantomMode) {
|
|
1055
1051
|
entity.createTempId();
|
|
1056
1052
|
}
|
|
1057
1053
|
|