import pywebpush
 from flask import Blueprint, current_app, g, request
 
-from . import auth, db
+from . import auth, datadir, db
 
 bp = Blueprint("push-notifications", __name__, url_prefix="/push-notifications")
 
 def _do_push(app, userids, title, body):
     data = {"title": title, "body": body}
     data_str = json.dumps(data)
+
+    private_key_path = datadir.get_vapid_private_key_path()
+    claims = {"sub": "mailto:littlesongplace@gmail.com"}
+    private_key = None
+    if private_key_path.exists():
+        with open(private_key_path, "r") as private_key_file:
+            private_key = private_key_file.read().strip()
+
     sent_notifications = 0
     with app.app_context():
         for userid in userids:
             subs = get_user_subscriptions(userid)
             for subid, sub in subs:
                 try:
-                    # TODO: Use VAPID keys
-                    pywebpush.webpush(sub, data_str)
+                    if private_key:
+                        pywebpush.webpush(sub, data_str, vapid_private_key=private_key, vapid_claims=claims)
+                    else:
+                        pywebpush.webpush(sub, data_str)
+
                     sent_notifications += 1
                 except pywebpush.WebPushException as ex:
                     if ex.response.status_code == 410:  # Subscription deleted
 
+const vapid_public_key = "BLsO37LostwqKch7SFr5Df0MexEoBOcujdMRY7wJurRPc_MGdz9rAkMrqs_dil4qSFxVbVyAA3FqLEPSL-WRNZs";
+
 self.addEventListener("activate", async () => {
     try {
-        // TODO: Use VAPID key
-        const options = {};
+        // Subscribe via browser's push service
+        const options = {userVisibleOnly: true, applicationServerKey: vapid_public_key};
         const subscription = await self.registration.pushManager.subscribe(options);
         console.log(JSON.stringify(subscription));
+
+        // Register subscription with LSP server
         const response = await fetch(
             "/push-notifications/subscribe", {
                 method: "post",
     catch (err) {
         console.log("Error while activating service:", err);
     }
-
 });
 
 self.addEventListener("push", (event) => {