src/pyams_notify_ws/subscribe.py
changeset 21 5f2f72c00120
parent 15 6472be90626a
child 24 4f59f94ad901
--- a/src/pyams_notify_ws/subscribe.py	Thu Jun 20 12:50:23 2019 +0200
+++ b/src/pyams_notify_ws/subscribe.py	Thu Jun 20 12:51:25 2019 +0200
@@ -12,18 +12,15 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
 import asyncio
 import json
 
-# import interfaces
-
-# import packages
 from aiopyramid.websocket.config.gunicorn import WebsocketMapper
 from aiopyramid.websocket.view import WebsocketConnectionView
 from pyramid.view import view_config
 
+from pyams_notify_ws import _
+
 
 users_lock = asyncio.Lock()
 users = {}
@@ -69,14 +66,22 @@
         else:
             action = message.get('action')
             if action == 'subscribe':
-                if not message.get('principal'):
+                principal = message.get('principal')
+                translate = self.request.localizer.translate
+                if not principal:
                     await self.ws.send(json.dumps({'status': 'error',
-                                                   'message': "Missing 'principal' argument"}))
+                                                   'error': translate(_("API Error")),
+                                                   'message': translate(_("Missing principal argument!"))}))
+                    return
+                if self.request.unauthenticated_userid != principal.get('id'):
+                    await self.ws.send(json.dumps({'status': 'error',
+                                                   'error': translate(_("Authentication Error")),
+                                                   'message': translate(_("Can't subscribe to notifications!"))}))
                     return
                 async with users_lock:
                     subscription = users.get(self.ws)
                     if subscription is None:
-                        subscription = WebsocketSubscription(message.get('principal'))
+                        subscription = WebsocketSubscription(principal)
                     subscription.update_contexts(message.get('context'))
                     users[self.ws] = subscription