Merge pull request #3000 from dpalou/MOBILE-3695
MOBILE-3695 push: Allow unregister device when site logged outmain
commit
4fa1d72a2b
|
@ -51,6 +51,11 @@ export enum CoreSiteQRCodeType {
|
||||||
QR_CODE_LOGIN = 2, // QR code type login value
|
QR_CODE_LOGIN = 2, // QR code type login value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WS that we allow to call even if the site is logged out.
|
||||||
|
const ALLOWED_LOGGEDOUT_WS = [
|
||||||
|
'core_user_remove_user_device',
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class that represents a site (combination of site + user).
|
* Class that represents a site (combination of site + user).
|
||||||
* It will have all the site data and provide utility functions regarding a site.
|
* It will have all the site data and provide utility functions regarding a site.
|
||||||
|
@ -496,7 +501,7 @@ export class CoreSite {
|
||||||
*/
|
*/
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
async request<T = unknown>(method: string, data: any, preSets: CoreSiteWSPreSets, retrying?: boolean): Promise<T> {
|
async request<T = unknown>(method: string, data: any, preSets: CoreSiteWSPreSets, retrying?: boolean): Promise<T> {
|
||||||
if (this.isLoggedOut()) {
|
if (this.isLoggedOut() && !ALLOWED_LOGGEDOUT_WS.includes(method)) {
|
||||||
// Site is logged out, it cannot call WebServices.
|
// Site is logged out, it cannot call WebServices.
|
||||||
CoreEvents.trigger(CoreEvents.SESSION_EXPIRED, {}, this.id);
|
CoreEvents.trigger(CoreEvents.SESSION_EXPIRED, {}, this.id);
|
||||||
|
|
||||||
|
|
|
@ -519,20 +519,10 @@ export class CorePushNotificationsProvider {
|
||||||
appid: CoreConstants.CONFIG.app_id,
|
appid: CoreConstants.CONFIG.app_id,
|
||||||
uuid: Device.uuid,
|
uuid: Device.uuid,
|
||||||
};
|
};
|
||||||
|
let response: CoreUserRemoveUserDeviceWSResponse;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await site.write<CoreUserRemoveUserDeviceWSResponse>('core_user_remove_user_device', data);
|
response = await site.write<CoreUserRemoveUserDeviceWSResponse>('core_user_remove_user_device', data);
|
||||||
|
|
||||||
if (!response || !response.removed) {
|
|
||||||
throw new CoreError('Cannot unregister device');
|
|
||||||
}
|
|
||||||
|
|
||||||
await CoreUtils.ignoreErrors(Promise.all([
|
|
||||||
// Remove the device from the local DB.
|
|
||||||
site.getDb().deleteRecords(REGISTERED_DEVICES_TABLE_NAME, this.getRegisterData()),
|
|
||||||
// Remove pending unregisters for this site.
|
|
||||||
db.deleteRecords(PENDING_UNREGISTER_TABLE_NAME, { siteid: site.getId() }),
|
|
||||||
]));
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (CoreUtils.isWebServiceError(error)) {
|
if (CoreUtils.isWebServiceError(error)) {
|
||||||
throw error;
|
throw error;
|
||||||
|
@ -546,7 +536,20 @@ export class CorePushNotificationsProvider {
|
||||||
info: JSON.stringify(site.getInfo()),
|
info: JSON.stringify(site.getInfo()),
|
||||||
};
|
};
|
||||||
await db.insertRecord(PENDING_UNREGISTER_TABLE_NAME, entry);
|
await db.insertRecord(PENDING_UNREGISTER_TABLE_NAME, entry);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!response.removed) {
|
||||||
|
throw new CoreError('Cannot unregister device');
|
||||||
|
}
|
||||||
|
|
||||||
|
await CoreUtils.ignoreErrors(Promise.all([
|
||||||
|
// Remove the device from the local DB.
|
||||||
|
site.getDb().deleteRecords(REGISTERED_DEVICES_TABLE_NAME, this.getRegisterData()),
|
||||||
|
// Remove pending unregisters for this site.
|
||||||
|
db.deleteRecords(PENDING_UNREGISTER_TABLE_NAME, { siteid: site.getId() }),
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue