MOBILE-4214 pushnotifications: Add public key registration

main
Alex Morris 2023-04-21 16:17:46 +12:00 committed by Dani Palou
parent 77605b87f4
commit a0d49dc5e0
5 changed files with 75 additions and 23 deletions

44
package-lock.json generated
View File

@ -4197,21 +4197,6 @@
}
}
},
"@ionic-native/push": {
"version": "5.36.0",
"resolved": "https://registry.npmjs.org/@ionic-native/push/-/push-5.36.0.tgz",
"integrity": "sha512-N2Ei6qsIYOmqfz/kH9XpKeIp3C5Qe9NXebzH2ytkpwBApPiCc6h+9LOxgMB/rls9VfT0V0ZoxvJbac9UZ6SJmA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha512-rkiiTuf/z2wTd4RxFOb+clE7PF4AEJU0hsczbUdkHHBtkUmpWQpEddynNfJYKYtZFJKbq4F+brfekt1kx85IZA=="
}
}
},
"@ionic-native/qr-scanner": {
"version": "5.36.0",
"resolved": "https://registry.npmjs.org/@ionic-native/qr-scanner/-/qr-scanner-5.36.0.tgz",
@ -11588,10 +11573,33 @@
"resolved": "https://registry.npmjs.org/@moodlehq/cordova-plugin-zip/-/cordova-plugin-zip-3.1.0-moodle.1.tgz",
"integrity": "sha512-QD5S6bsm6awJrNMb8YN/vkYghKAMfZMHccdimx6s1i5S9fgZUSf7L477NJqjFu62imVZYJIJuavBbw5fR/562w=="
},
"@moodlehq/ionic-native-push": {
"version": "5.36.0-moodle.2",
"resolved": "https://registry.npmjs.org/@moodlehq/ionic-native-push/-/ionic-native-push-5.36.0-moodle.2.tgz",
"integrity": "sha512-UWT4WaoTEEqGQ5pu+CyakXCOhiXsQSb8mD8j89jDqV0hJyrIQ8zA2ciGW9Y/vd55NuqjCu1tNJcWEJ4WcRVv0Q==",
"requires": {
"@angular/core": "^9.1.12",
"@ionic-native/core": "^5.1.0",
"@types/cordova": "^11.0.0",
"rxjs": "^5.5.0 || ^6.5.0"
},
"dependencies": {
"@angular/core": {
"version": "9.1.13",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-9.1.13.tgz",
"integrity": "sha512-mBm24Q9GjkAsxMAzqQ86U1078+yTEpr0+syMEruUtJ0HUH6Fzn3J+6xTLb+BVcGb9RkCkFaV9T5mcn6ZM0f++g=="
},
"@types/cordova": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-11.0.0.tgz",
"integrity": "sha512-AtBm1IAqqXsXszJe6XxuA2iXLhraNCj25p/FHRyikPeW0Z3YfgM6qzWb+VJglJTmZc5lqRNy84cYM/sQI5v6Vw=="
}
}
},
"@moodlehq/phonegap-plugin-push": {
"version": "4.0.0-moodle.2",
"resolved": "https://registry.npmjs.org/@moodlehq/phonegap-plugin-push/-/phonegap-plugin-push-4.0.0-moodle.2.tgz",
"integrity": "sha512-kxHnpCzM7VMw5XUrLeZX03bLkQzA3j//+4nq7MiZbLoliPsQRAxGqyZ9HmbLcPsvlt1h7NM1eSVG52qZ7D3PlQ=="
"version": "4.0.0-moodle.3",
"resolved": "https://registry.npmjs.org/@moodlehq/phonegap-plugin-push/-/phonegap-plugin-push-4.0.0-moodle.3.tgz",
"integrity": "sha512-oJTmcVN6QBxo8+9uHEFTLCgNJkd7jeaT1MMM3ljDhR5EkFDkHwMMat/Km0tjm+9ToD0LYWHZfvLljpCZM5u3yg=="
},
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",

View File

@ -65,7 +65,6 @@
"@ionic-native/local-notifications": "5.36.0",
"@ionic-native/media-capture": "5.36.0",
"@ionic-native/network": "5.36.0",
"@ionic-native/push": "5.36.0",
"@ionic-native/qr-scanner": "5.36.0",
"@ionic-native/splash-screen": "5.36.0",
"@ionic-native/sqlite": "5.36.0",
@ -80,7 +79,8 @@
"@moodlehq/cordova-plugin-local-notification": "0.9.0-moodle.11",
"@moodlehq/cordova-plugin-qrscanner": "3.0.1-moodle.5",
"@moodlehq/cordova-plugin-zip": "3.1.0-moodle.1",
"@moodlehq/phonegap-plugin-push": "4.0.0-moodle.2",
"@moodlehq/ionic-native-push": "5.36.0-moodle.2",
"@moodlehq/phonegap-plugin-push": "4.0.0-moodle.3",
"@ngx-translate/core": "13.0.0",
"@ngx-translate/http-loader": "6.0.0",
"@types/chart.js": "2.9.31",

View File

@ -30,7 +30,7 @@ import { WebView } from '@ionic-native/ionic-webview/ngx';
import { Keyboard } from '@ionic-native/keyboard/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { MediaCapture } from '@ionic-native/media-capture/ngx';
import { Push } from '@ionic-native/push/ngx';
import { Push } from '@moodlehq/ionic-native-push/ngx';
import { QRScanner } from '@ionic-native/qr-scanner/ngx';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { SQLite } from '@ionic-native/sqlite/ngx';

View File

@ -14,7 +14,7 @@
import { Injectable } from '@angular/core';
import { ILocalNotification } from '@ionic-native/local-notifications';
import { NotificationEventResponse, PushOptions, RegistrationEventResponse } from '@ionic-native/push/ngx';
import { NotificationEventResponse, PushOptions, RegistrationEventResponse } from '@moodlehq/ionic-native-push/ngx';
import { CoreApp } from '@services/app';
import { CoreSites } from '@services/sites';
@ -750,6 +750,33 @@ export class CorePushNotificationsProvider {
// Remove pending unregisters for this site.
await CoreUtils.ignoreErrors(this.pendingUnregistersTable.deleteByPrimaryKey({ siteid: site.getId() }));
}
this.registerPublicKeyOnMoodle();
}
/**
* Register a public key on a Moodle site.
*/
async registerPublicKeyOnMoodle(): Promise<void> {
this.logger.debug('Register public key on Moodle.');
const site = await CoreSites.getSite();
const publicKey = await Push.getPublicKey();
if (publicKey == null) {
throw new CoreError('Cannot get app public key.');
}
const data: CoreUserUpdateUserDevicePublicKeyWSParams = {
uuid: Device.uuid,
appid: CoreConstants.CONFIG.app_id,
publickey: publicKey,
};
await site.write<CoreUserUpdateUserDevicePublicKeyWSResponse>(
'core_user_update_user_device_public_key',
data,
);
}
/**
@ -936,3 +963,20 @@ export type CoreUserAddUserDeviceWSParams = {
* Data returned by core_user_add_user_device WS.
*/
export type CoreUserAddUserDeviceWSResponse = CoreWSExternalWarning[][];
/**
* Params of core_user_update_user_device_public_key WS.
*/
export type CoreUserUpdateUserDevicePublicKeyWSParams = {
uuid: string;
appid: string;
publickey: string;
};
/**
* Data returned by core_user_update_user_device_public_key WS.
*/
export type CoreUserUpdateUserDevicePublicKeyWSResponse = {
status: boolean;
warnings?: CoreWSExternalWarning[];
};

View File

@ -53,7 +53,7 @@ import { WebView as WebViewService } from '@ionic-native/ionic-webview/ngx';
import { Keyboard as KeyboardService } from '@ionic-native/keyboard/ngx';
import { LocalNotifications as LocalNotificationsService } from '@ionic-native/local-notifications/ngx';
import { MediaCapture as MediaCaptureService } from '@ionic-native/media-capture/ngx';
import { Push as PushService } from '@ionic-native/push/ngx';
import { Push as PushService } from '@moodlehq/ionic-native-push/ngx';
import { QRScanner as QRScannerService } from '@ionic-native/qr-scanner/ngx';
import { StatusBar as StatusBarService } from '@ionic-native/status-bar/ngx';
import { SplashScreen as SplashScreenService } from '@ionic-native/splash-screen/ngx';