--- 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