Skip to content

Commit

Permalink
Fix listeners unregister (#22)
Browse files Browse the repository at this point in the history
* fix(Android): prevent listeners unregistering

* fix(iOS): resolve app kill on deviceID

* chore(release): freeRASP 6.0.1
  • Loading branch information
tompsota committed Feb 20, 2024
1 parent 63e32d2 commit 6d2c09e
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 45 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# freeRASP 6.0.1

### Android
- ⚡ Fixed bug that prevented firing callbacks in specific situations

### iOS
- ⚡ Fixed bug that caused app being killed in specific situations ([#42](https://github.com/talsec/Free-RASP-ReactNative/issues/42))

# freeRASP 6.0.0

-**BREAKING API CHANGE**: changed the way how threats are received. Now, it is necessary to pass object with reactions to `talsec.start()` method instead of a function.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cordova-talsec-plugin-freerasp",
"version": "6.0.0",
"version": "6.0.1",
"description": "Cordova plugin for improving app security and threat monitoring on Android and iOS mobile devices.",
"cordova": {
"id": "cordova-talsec-plugin-freerasp",
Expand Down
2 changes: 1 addition & 1 deletion plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="cordova-talsec-plugin-freerasp"
version="6.0.0">
version="6.0.1">

<name>freerasp</name>
<author>Talsec ([email protected])</author>
Expand Down
6 changes: 4 additions & 2 deletions src/android/TalsecPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ class TalsecPlugin : CordovaPlugin() {

override fun onPause(multitasking: Boolean) {
super.onPause(multitasking)
listener.unregisterListener(this.cordova.context)
registered = false
if (this.cordova.activity.isFinishing) {
listener.unregisterListener(this.cordova.context)
registered = false
}
}

override fun onResume(multitasking: Boolean) {
Expand Down
61 changes: 38 additions & 23 deletions www/talsec.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ class Threat {
static DeviceBinding = new Threat(0);
static DeviceID = new Threat(0);
static UnofficialStore = new Threat(0);
static Overlay = new Threat(0);
static ObfuscationIssues = new Threat(0);
constructor (value) {
this.value = value;
Expand Down Expand Up @@ -46,7 +45,6 @@ class Threat {
];
};
}

const getThreatCount = () => {
return Threat.getValues().length;
};
Expand All @@ -56,14 +54,21 @@ const itemsHaveType = (data, desidedType) => {
};
const getThreatIdentifiers = async () => {
const identifiers = await new Promise((resolve, reject) => {
cordova.exec((data) => {
resolve(data);
}, (error) => {
reject(error);
}, 'TalsecPlugin', 'getThreatIdentifiers');
cordova.exec(
(data) => {
resolve(data);
},
(error) => {
reject(error);
},
'TalsecPlugin',
'getThreatIdentifiers'
);
});
if (identifiers.length !== getThreatCount() ||
!itemsHaveType(identifiers, 'number')) {
if (
identifiers.length !== getThreatCount() ||
!itemsHaveType(identifiers, 'number')
) {
onInvalidCallback();
}
return identifiers;
Expand All @@ -77,7 +82,12 @@ const prepareMapping = async () => {
});
};
const onInvalidCallback = () => {
cordova.exec(() => { }, () => { }, 'TalsecPlugin', 'onInvalidCallback');
cordova.exec(
() => {},
() => {},
'TalsecPlugin',
'onInvalidCallback'
);
};
const start = async (config, eventListenerConfig) => {
await prepareMapping();
Expand Down Expand Up @@ -107,33 +117,38 @@ const start = async (config, eventListenerConfig) => {
case Threat.Passcode.value:
eventListenerConfig.passcode?.();
break;
case Threat.Overlay.value:
eventListenerConfig.overlay?.();
break;
case Threat.SecureHardwareNotAvailable.value:
eventListenerConfig.secureHardwareNotAvailable?.();
break;
case Threat.ObfuscationIssues.value:
eventListenerConfig.obfuscationIssues?.();
break;
case Threat.DeviceID.value:
eventListenerConfig.deviceID?.();
break;
default:
onInvalidCallback();
break;
}
};
return new Promise((resolve, reject) => {
cordova.exec((message) => {
if (message != null && message === 'started') {
resolve();
} else {
eventListener(message);
}
}, (error) => {
reject(error);
}, 'TalsecPlugin', 'start', [config]);
cordova.exec(
(message) => {
if (message != null && message === 'started') {
resolve();
} else {
eventListener(message);
}
},
(error) => {
reject(error);
},
'TalsecPlugin',
'start',
[config]
);
});
};

module.exports = {
start
};
49 changes: 31 additions & 18 deletions www/talsec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ type NativeEventEmitterActions = {
deviceBinding?: () => any;
deviceID?: () => any;
passcode?: () => any;
overlay?: () => any;
secureHardwareNotAvailable?: () => any;
obfuscationIssues?: () => any;
};
Expand Down Expand Up @@ -41,9 +40,8 @@ class Threat {
static DeviceBinding = new Threat(0);
static DeviceID = new Threat(0);
static UnofficialStore = new Threat(0);
static Overlay = new Threat(0);
static ObfuscationIssues = new Threat(0);

constructor (value: number) {
this.value = value;
}
Expand Down Expand Up @@ -75,7 +73,7 @@ class Threat {
this.UnofficialStore
];
};
};
}

const getThreatCount = (): number => {
return Threat.getValues().length;
Expand All @@ -87,19 +85,26 @@ const itemsHaveType = (data: any[], desidedType: string) => {
};
const getThreatIdentifiers = async (): Promise<number[]> => {
const identifiers: number[] = await new Promise((resolve, reject) => {
cordova.exec((data) => {
resolve(data);
}, (error) => {
reject(error);
}, 'TalsecPlugin', 'getThreatIdentifiers');
cordova.exec(
(data) => {
resolve(data);
},
(error) => {
reject(error);
},
'TalsecPlugin',
'getThreatIdentifiers'
);
});
if (identifiers.length !== getThreatCount() ||
!itemsHaveType(identifiers, 'number')) {
if (
identifiers.length !== getThreatCount() ||
!itemsHaveType(identifiers, 'number')
) {
onInvalidCallback();
}
return identifiers;
};
const prepareMapping = async (): Promise<void> => {
const prepareMapping = async (): Promise<void> => {
const newValues = await getThreatIdentifiers();
const threats = Threat.getValues();
// eslint-disable-next-line array-callback-return
Expand All @@ -108,10 +113,18 @@ const prepareMapping = async (): Promise<void> => {
});
};
const onInvalidCallback = () => {
cordova.exec(() => { }, () => { }, 'TalsecPlugin', 'onInvalidCallback');
cordova.exec(
() => {},
() => {},
'TalsecPlugin',
'onInvalidCallback'
);
};

const start = async (config: TalsecConfig, eventListenerConfig: NativeEventEmitterActions) => {
const start = async (
config: TalsecConfig,
eventListenerConfig: NativeEventEmitterActions
) => {
await prepareMapping();

const eventListener = (event: number) => {
Expand Down Expand Up @@ -140,15 +153,15 @@ const start = async (config: TalsecConfig, eventListenerConfig: NativeEventEmitt
case Threat.Passcode.value:
eventListenerConfig.passcode?.();
break;
case Threat.Overlay.value:
eventListenerConfig.overlay?.();
break;
case Threat.SecureHardwareNotAvailable.value:
eventListenerConfig.secureHardwareNotAvailable?.();
break;
case Threat.ObfuscationIssues.value:
eventListenerConfig.obfuscationIssues?.();
break;
case Threat.DeviceID.value:
eventListenerConfig.deviceID?.();
break;
default:
onInvalidCallback();
break;
Expand All @@ -172,7 +185,7 @@ const start = async (config: TalsecConfig, eventListenerConfig: NativeEventEmitt
[config]
);
});
}
};

module.exports = {
start
Expand Down

0 comments on commit 6d2c09e

Please sign in to comment.