In this commit, we moved all features related to the PWA and the PWA itself to the community. This includes: * PWA * Web Push Notification * VCARD Note from original commits: =========================== PWA (part 1) ------------ This commit adds a ServiceWorker to complement the WebManifest to complete the setup of the backend as a Progressive Web App. More precisely, it adds the route, registration and the most basic ServiceWorker to allow the backend to be recognized as an installable PWA. References: - https://web.dev/install-criteria/ - https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Installable_PWAs - https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers Task ID: 3063485 PWA (part 2) ------------ This commit adds a WebManifest as a first step toward setuping the backend as a Progressive Web App. In a nutshell: - the web app's name is configurable through a config parameter (available in the Settings, in debug); defaulting to "Odoo". - the web app's icon has been revamped to accommodate the required sizes; also its design matches the one from the Android app. - "theme-color" is used to color part of the browser/system UI to match Enterprise brand color; also supports the dark mode. References: - https://web.dev/learn/pwa/web-app-manifest/ - https://web.dev/install-criteria/ - https://developer.mozilla.org/en-US/docs/Web/Manifest Task ID: 3063485 PWA shortcuts ------------- The main goal of this commit is like we did inside the `Android Odoo Mobile App`, allowing users to have some Odoo application shortcuts. We added the following apps in the key `shortcuts` on `web.manifest` in these orders: `Discuss`, `CRM`, `Project`, `To-Do` (old `Notes`). Links: - https://w3c.github.io/manifest/#shortcuts-member - https://developer.mozilla.org/en-US/docs/Web/Manifest/shortcuts Task ID: 3123607 Offline mode ------------ This commit introduces a way to notify the user that he's "offline" (aka. cannot reach its Odoo server) and that Odoo doesn't work in a graceful way in this circumstance. To do so, the Service-Worker will return the response of the ´web/offline´ route, which is cached at its setup. Note: this screen is only show when launched while "offline" and fails to load the requested page. It does not "interrupt" the WebClient to show this screen when the connection drops off (cf. not a replacement for the existing notification). Task ID: 3203639 WebPush ------- WebPush allows sending data to the user browser/app(PWA) even when tab/app is closed. Web push is a "constant" link between the ServiceWorker of browser/app and a WebPush server. Note that each browser has its own custom WebPush server. e.g.: Chrome: https://fcm.googleapis.com/ Firefox: https://updates.push.services.mozilla.com/ Safari: https://web.push.apple.com/ Edge: https://wns2-ln2p.notify.windows.com/ WebPush introduces some cryptographic notion to ensure some the reliability of the data sent: VAPID: "Voluntary Application Server Identification" is the standard used to generate the public and the private to sign the message between the browser and the WebPush server JWT: "JSON Web Token" is the standard used to sign the payload to the WebPush server ECE: "Encrypted Content-Encoding" is the standard used by WebPush to encrypt the data of the payload to avoid sending RAW data outside trusted network. Simplified steps how to WebPush works: The Javascript code of a web page subscribes to the WebPush server (using the VAPID key generated at mail_entreprise install). The WebPush server replay with a subscription (and some other info like the unique URL endpoint per subscription where to send a notification) The application (odoo-bin in our case) sends a post request to the WebPush server using the specific URL endpoint of the user (using JWT and ECE). The WebPush server sends back to the browser the encrypted payload. The browser decrypts the payload and sends it to the ServiceWorker linked to the subscription. Here is a Sequence diagram of all interactions to process a web push notification. In Odoo, we use WebPush to send Notification to the user. This commit aims to have a parity with the Android/iOS Mobile App at the notification level. Notes: There are some ways to encrypt (ECE) the message for WebPush: AESGCM128: this is a draft AESGCM: very well documented AES128GCM: RFC8188 Standard encoding We implement only the RFC one as it is the only one implemented in all major updated browsers (Chrome, Firefox, Safari, Edge, ...) You need to allow the desktop "Notification" and "Push" inside your browser. For iOS Devices, it only works on iOS 16.4+ and it's requiring Odoo to first be added to the Home Screen. It's delivered silently, meaning no sound, vibration, haptics or screen wake. Note: Notifications are sent directly if there are less than five notifications, otherwise we use a cron triggered immediately. Also, we have changed the value of the "QueryCount" as mail_enterprise executes a new query to search the devices associated with the partner. We have added a "try/except" for any Exception before the push_to_end_point method as we want to avoid blocking a normal flow just for a not mandatory push notification if something happens during the push to the endpoint. See: odoo/enterprise@d0ae70103d Links: https://www.rfc-editor.org/rfc/rfc8030 https://www.rfc-editor.org/rfc/rfc8188 https://www.rfc-editor.org/rfc/rfc8291 https://www.rfc-editor.org/rfc/rfc8292 https://w3c.github.io/push-api/index.html https://autopush.readthedocs.io/en/latest/http.html https://web.dev/push-notifications-web-push-protocol/ https://github.com/web-push-libs/encrypted-content-encoding https://github.com/web-push-libs/pywebpush https://github.com/web-push-libs/vapid https://caniuse.com/push-api Task ID: 3123678 VCARD ----- In the process of replacing the native methods exposed in the mobile apps, this commit implements the download of a vCard containing a partner's information. By using this standard format, both regular web users and mobile ones are now able to save the partner's details to use them with their usual address book software. On a mobile device, the actual import of those informations is delegated to the operating system. References: - https://datatracker.ietf.org/doc/html/rfc6350 - https://en.wikipedia.org/wiki/VCard - https://github.com/eventable/vobject#vcards Task ID: 2583916 =========== End of note =========== Task ID: 3478014 closes odoo/odoo#133560 Related: odoo/enterprise#46530 Related: odoo/upgrade#5086 Signed-off-by: Adrien Dieudonné (adr) <adr@odoo.com> Co-authored-by: Romeo Fragomeli <rfr@odoo.com> Co-authored-by: Romain Estievenart <res@odoo.com> Co-authored-by: Pierre Paridans <app@odoo.com>
12 lines
345 B
Python
12 lines
345 B
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from . import test_odoobot
|
|
from . import test_mail_performance
|
|
from . import test_mail_thread_internals
|
|
from . import test_mass_mailing
|
|
from . import test_portal
|
|
from . import test_rating
|
|
from . import test_res_users
|
|
from . import test_web_push
|