diff --git a/platypush/backend/http/app/routes/pwa.py b/platypush/backend/http/app/routes/pwa.py new file mode 100644 index 000000000..1462dc8e5 --- /dev/null +++ b/platypush/backend/http/app/routes/pwa.py @@ -0,0 +1,113 @@ +from flask import Blueprint, jsonify, send_from_directory + +from platypush.config import Config +from platypush.backend.http.app import template_folder + +pwa = Blueprint('pwa', __name__, template_folder=template_folder) + +# Declare routes list +__routes__ = [ + pwa, +] + + +@pwa.route('/manifest.json', methods=['GET']) +def manifest_json(): + """Generated manifest file for the PWA""" + return jsonify( + { + "name": f'Platypush @ {Config.get("device_id")}', + "short_name": Config.get('device_id'), + "icons": [ + { + "src": "/img/icons/favicon-16x16.png", + "sizes": "16x16", + "type": "image/png", + }, + { + "src": "/img/icons/favicon-32x32.png", + "sizes": "32x32", + "type": "image/png", + }, + { + "src": "/img/icons/apple-touch-icon-60x60.png", + "sizes": "60x60", + "type": "image/png", + }, + { + "src": "/img/icons/apple-touch-icon-76x76.png", + "sizes": "76x76", + "type": "image/png", + }, + { + "src": "/img/icons/apple-touch-icon-120x120.png", + "sizes": "120x120", + "type": "image/png", + }, + { + "src": "/img/icons/msapplication-icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + }, + { + "src": "/img/icons/mstile-150x150.png", + "sizes": "150x150", + "type": "image/png", + }, + { + "src": "/img/icons/apple-touch-icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + }, + { + "src": "/img/icons/apple-touch-icon-180x180.png", + "sizes": "180x180", + "type": "image/png", + }, + { + "src": "/img/icons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png", + }, + { + "src": "/img/icons/android-chrome-maskable-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable", + }, + { + "src": "/img/icons/logo-256x256.png", + "sizes": "256x256", + "type": "image/png", + }, + { + "src": "/img/icons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png", + }, + { + "src": "/img/icons/android-chrome-maskable-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable", + }, + ], + "gcm_sender_id": "", + "gcm_user_visible_only": True, + "start_url": "/", + "permissions": ["gcm"], + "orientation": "portrait", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff", + } + ) + + +@pwa.route('/service-worker.js', methods=['GET']) +def service_worker_js(): + """URL that serves the service worker for the PWA""" + return send_from_directory(template_folder, 'service-worker.js') + + +# vim:sw=4:ts=4:et: