Show More
@@ -41,12 +41,15 b' def includeme(config):' | |||
|
41 | 41 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens') |
|
42 | 42 | config.add_route( |
|
43 | 43 | name='my_account_auth_tokens_add', |
|
44 |
pattern=ADMIN_PREFIX + '/my_account/auth_tokens/new' |
|
|
45 | ) | |
|
44 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens/new') | |
|
46 | 45 | config.add_route( |
|
47 | 46 | name='my_account_auth_tokens_delete', |
|
48 |
pattern=ADMIN_PREFIX + '/my_account/auth_tokens/delete' |
|
|
49 | ) | |
|
47 | pattern=ADMIN_PREFIX + '/my_account/auth_tokens/delete') | |
|
48 | ||
|
49 | # channelstream test | |
|
50 | config.add_route( | |
|
51 | name='my_account_notifications_test_channelstream', | |
|
52 | pattern=ADMIN_PREFIX + '/my_account/test_channelstream') | |
|
50 | 53 | |
|
51 | 54 | # Scan module for configuration decorators. |
|
52 | 55 | config.scan() |
@@ -19,14 +19,17 b'' | |||
|
19 | 19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
20 | 20 | |
|
21 | 21 | import logging |
|
22 | import datetime | |
|
22 | 23 | |
|
23 | 24 | from pyramid.httpexceptions import HTTPFound |
|
24 | 25 | from pyramid.view import view_config |
|
25 | 26 | |
|
26 | 27 | from rhodecode.apps._base import BaseAppView |
|
27 | 28 | from rhodecode import forms |
|
29 | from rhodecode.lib import helpers as h | |
|
28 | 30 | from rhodecode.lib.auth import LoginRequired, NotAnonymous, CSRFRequired |
|
29 |
from rhodecode.lib import |
|
|
31 | from rhodecode.lib.channelstream import channelstream_request, \ | |
|
32 | ChannelstreamException | |
|
30 | 33 | from rhodecode.lib.utils2 import safe_int, md5 |
|
31 | 34 | from rhodecode.model.auth_token import AuthTokenModel |
|
32 | 35 | from rhodecode.model.meta import Session |
@@ -192,3 +195,37 b' class MyAccountView(BaseAppView):' | |||
|
192 | 195 | h.flash(_("Auth token successfully deleted"), category='success') |
|
193 | 196 | |
|
194 | 197 | return HTTPFound(h.route_path('my_account_auth_tokens')) |
|
198 | ||
|
199 | @LoginRequired() | |
|
200 | @NotAnonymous() | |
|
201 | @CSRFRequired() | |
|
202 | @view_config( | |
|
203 | route_name='my_account_notifications_test_channelstream', | |
|
204 | request_method='POST', renderer='json_ext') | |
|
205 | def my_account_notifications_test_channelstream(self): | |
|
206 | message = 'Test message sent via Channelstream by user: {}, on {}'.format( | |
|
207 | self._rhodecode_user.username, datetime.datetime.now()) | |
|
208 | payload = { | |
|
209 | # 'channel': 'broadcast', | |
|
210 | 'type': 'message', | |
|
211 | 'timestamp': datetime.datetime.utcnow(), | |
|
212 | 'user': 'system', | |
|
213 | 'pm_users': [self._rhodecode_user.username], | |
|
214 | 'message': { | |
|
215 | 'message': message, | |
|
216 | 'level': 'info', | |
|
217 | 'topic': '/notifications' | |
|
218 | } | |
|
219 | } | |
|
220 | ||
|
221 | registry = self.request.registry | |
|
222 | rhodecode_plugins = getattr(registry, 'rhodecode_plugins', {}) | |
|
223 | channelstream_config = rhodecode_plugins.get('channelstream', {}) | |
|
224 | ||
|
225 | try: | |
|
226 | channelstream_request(channelstream_config, [payload], '/message') | |
|
227 | except ChannelstreamException as e: | |
|
228 | log.exception('Failed to send channelstream data') | |
|
229 | return {"response": 'ERROR: {}'.format(e.__class__.__name__)} | |
|
230 | return {"response": 'Channelstream data sent. ' | |
|
231 | 'You should see a new live message now.'} |
@@ -513,10 +513,6 b' def make_map(config):' | |||
|
513 | 513 | '/my_account/toggle_visibility', |
|
514 | 514 | action='my_notifications_toggle_visibility', |
|
515 | 515 | conditions={'method': ['POST']}) |
|
516 | m.connect('my_account_notifications_test_channelstream', | |
|
517 | '/my_account/test_channelstream', | |
|
518 | action='my_account_notifications_test_channelstream', | |
|
519 | conditions={'method': ['POST']}) | |
|
520 | 516 | |
|
521 | 517 | # NOTIFICATION REST ROUTES |
|
522 | 518 | with rmap.submapper(path_prefix=ADMIN_PREFIX, |
@@ -24,11 +24,9 b' my account controller for RhodeCode admi' | |||
|
24 | 24 | """ |
|
25 | 25 | |
|
26 | 26 | import logging |
|
27 | import datetime | |
|
28 | 27 | |
|
29 | 28 | import formencode |
|
30 | 29 | from formencode import htmlfill |
|
31 | from pyramid.threadlocal import get_current_registry | |
|
32 | 30 | from pyramid.httpexceptions import HTTPFound |
|
33 | 31 | |
|
34 | 32 | from pylons import request, tmpl_context as c, url |
@@ -44,8 +42,6 b' from rhodecode.lib.base import BaseContr' | |||
|
44 | 42 | from rhodecode.lib.utils import jsonify |
|
45 | 43 | from rhodecode.lib.utils2 import safe_int, str2bool |
|
46 | 44 | from rhodecode.lib.ext_json import json |
|
47 | from rhodecode.lib.channelstream import channelstream_request, \ | |
|
48 | ChannelstreamException | |
|
49 | 45 | |
|
50 | 46 | from rhodecode.model.db import ( |
|
51 | 47 | Repository, PullRequest, UserEmailMap, User, UserFollowing) |
@@ -332,33 +328,3 b' class MyAccountController(BaseController' | |||
|
332 | 328 | user.update_userdata(notification_status=new_status) |
|
333 | 329 | Session().commit() |
|
334 | 330 | return user.user_data['notification_status'] |
|
335 | ||
|
336 | @auth.CSRFRequired() | |
|
337 | @jsonify | |
|
338 | def my_account_notifications_test_channelstream(self): | |
|
339 | message = 'Test message sent via Channelstream by user: {}, on {}'.format( | |
|
340 | c.rhodecode_user.username, datetime.datetime.now()) | |
|
341 | payload = { | |
|
342 | 'type': 'message', | |
|
343 | 'timestamp': datetime.datetime.utcnow(), | |
|
344 | 'user': 'system', | |
|
345 | #'channel': 'broadcast', | |
|
346 | 'pm_users': [c.rhodecode_user.username], | |
|
347 | 'message': { | |
|
348 | 'message': message, | |
|
349 | 'level': 'info', | |
|
350 | 'topic': '/notifications' | |
|
351 | } | |
|
352 | } | |
|
353 | ||
|
354 | registry = get_current_registry() | |
|
355 | rhodecode_plugins = getattr(registry, 'rhodecode_plugins', {}) | |
|
356 | channelstream_config = rhodecode_plugins.get('channelstream', {}) | |
|
357 | ||
|
358 | try: | |
|
359 | channelstream_request(channelstream_config, [payload], '/message') | |
|
360 | except ChannelstreamException as e: | |
|
361 | log.exception('Failed to send channelstream data') | |
|
362 | return {"response": 'ERROR: {}'.format(e.__class__.__name__)} | |
|
363 | return {"response": 'Channelstream data sent. ' | |
|
364 | 'You should see a new live message now.'} |
@@ -123,5 +123,6 b' function registerRCRoutes() {' | |||
|
123 | 123 | pyroutes.register('my_account_auth_tokens', '/_admin/my_account/auth_tokens', []); |
|
124 | 124 | pyroutes.register('my_account_auth_tokens_add', '/_admin/my_account/auth_tokens/new', []); |
|
125 | 125 | pyroutes.register('my_account_auth_tokens_delete', '/_admin/my_account/auth_tokens/delete', []); |
|
126 | pyroutes.register('my_account_notifications_test_channelstream', '/_admin/my_account/test_channelstream', []); | |
|
126 | 127 | pyroutes.register('apiv2', '/_admin/api', []); |
|
127 | 128 | } |
@@ -10,7 +10,7 b'' | |||
|
10 | 10 | |
|
11 | 11 | <iron-ajax id="sendTestNotification" |
|
12 | 12 | method="post" |
|
13 |
url="${ |
|
|
13 | url="${h.route_path('my_account_notifications_test_channelstream')}" | |
|
14 | 14 | content-type="application/json" |
|
15 | 15 | on-response="handleTestNotification" |
|
16 | 16 | handle-as="json"> |
General Comments 0
You need to be logged in to leave comments.
Login now