##// END OF EJS Templates
channelstream: fix incorrect log.exception usage.
marcink -
r1277:5d54091a default
parent child Browse files
Show More
@@ -1,178 +1,178 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22 Channel Stream controller for rhodecode
23 23
24 24 :created_on: Oct 10, 2015
25 25 :author: marcinl
26 26 :copyright: (c) 2013-2015 RhodeCode GmbH.
27 27 :license: Commercial License, see LICENSE for more details.
28 28 """
29 29
30 30 import logging
31 31 import uuid
32 32
33 33 from pylons import tmpl_context as c
34 34 from pyramid.settings import asbool
35 35 from pyramid.view import view_config
36 36 from webob.exc import HTTPBadRequest, HTTPForbidden, HTTPBadGateway
37 37
38 38 from rhodecode.lib.channelstream import (
39 39 channelstream_request,
40 40 ChannelstreamConnectionException,
41 41 ChannelstreamPermissionException,
42 42 check_channel_permissions,
43 43 get_connection_validators,
44 44 get_user_data,
45 45 parse_channels_info,
46 46 update_history_from_logs,
47 47 STATE_PUBLIC_KEYS)
48 48 from rhodecode.lib.auth import NotAnonymous
49 49 from rhodecode.lib.utils2 import str2bool
50 50
51 51 log = logging.getLogger(__name__)
52 52
53 53
54 54 class ChannelstreamView(object):
55 55 def __init__(self, context, request):
56 56 self.context = context
57 57 self.request = request
58 58
59 59 # Some of the decorators rely on this attribute to be present
60 60 # on the class of the decorated method.
61 61 self._rhodecode_user = request.user
62 62 registry = request.registry
63 63 self.channelstream_config = registry.rhodecode_plugins['channelstream']
64 64 if not self.channelstream_config.get('enabled'):
65 log.exception('Channelstream plugin is disabled')
65 log.error('Channelstream plugin is disabled')
66 66 raise HTTPBadRequest()
67 67
68 68 @NotAnonymous()
69 69 @view_config(route_name='channelstream_connect', renderer='json')
70 70 def connect(self):
71 71 """ handle authorization of users trying to connect """
72 72 try:
73 73 json_body = self.request.json_body
74 74 except Exception:
75 75 log.exception('Failed to decode json from request')
76 76 raise HTTPBadRequest()
77 77 try:
78 78 channels = check_channel_permissions(
79 79 json_body.get('channels'),
80 80 get_connection_validators(self.request.registry))
81 81 except ChannelstreamPermissionException:
82 82 log.error('Incorrect permissions for requested channels')
83 83 raise HTTPForbidden()
84 84
85 85 user = c.rhodecode_user
86 86 if user.user_id:
87 87 user_data = get_user_data(user.user_id)
88 88 else:
89 89 user_data = {
90 90 'id': None,
91 91 'username': None,
92 92 'first_name': None,
93 93 'last_name': None,
94 94 'icon_link': None,
95 95 'display_name': None,
96 96 'display_link': None,
97 97 }
98 98 user_data['permissions'] = c.rhodecode_user.permissions
99 99 payload = {
100 100 'username': user.username,
101 101 'user_state': user_data,
102 102 'conn_id': str(uuid.uuid4()),
103 103 'channels': channels,
104 104 'channel_configs': {},
105 105 'state_public_keys': STATE_PUBLIC_KEYS,
106 106 'info': {
107 107 'exclude_channels': ['broadcast']
108 108 }
109 109 }
110 110 filtered_channels = [channel for channel in channels
111 111 if channel != 'broadcast']
112 112 for channel in filtered_channels:
113 113 payload['channel_configs'][channel] = {
114 114 'notify_presence': True,
115 115 'history_size': 100,
116 116 'store_history': True,
117 117 'broadcast_presence_with_user_lists': True
118 118 }
119 119 # connect user to server
120 120 try:
121 121 connect_result = channelstream_request(self.channelstream_config,
122 122 payload, '/connect')
123 123 except ChannelstreamConnectionException:
124 124 log.exception('Channelstream service is down')
125 125 return HTTPBadGateway()
126 126
127 127 connect_result['channels'] = channels
128 128 connect_result['channels_info'] = parse_channels_info(
129 129 connect_result['channels_info'],
130 130 include_channel_info=filtered_channels)
131 131 update_history_from_logs(self.channelstream_config,
132 132 filtered_channels, connect_result)
133 133 return connect_result
134 134
135 135 @NotAnonymous()
136 136 @view_config(route_name='channelstream_subscribe', renderer='json')
137 137 def subscribe(self):
138 138 """ can be used to subscribe specific connection to other channels """
139 139 try:
140 140 json_body = self.request.json_body
141 141 except Exception:
142 142 log.exception('Failed to decode json from request')
143 143 raise HTTPBadRequest()
144 144 try:
145 145 channels = check_channel_permissions(
146 146 json_body.get('channels'),
147 147 get_connection_validators(self.request.registry))
148 148 except ChannelstreamPermissionException:
149 149 log.error('Incorrect permissions for requested channels')
150 150 raise HTTPForbidden()
151 151 payload = {'conn_id': json_body.get('conn_id', ''),
152 152 'channels': channels,
153 153 'channel_configs': {},
154 154 'info': {
155 155 'exclude_channels': ['broadcast']}
156 156 }
157 157 filtered_channels = [chan for chan in channels if chan != 'broadcast']
158 158 for channel in filtered_channels:
159 159 payload['channel_configs'][channel] = {
160 160 'notify_presence': True,
161 161 'history_size': 100,
162 162 'store_history': True,
163 163 'broadcast_presence_with_user_lists': True
164 164 }
165 165 try:
166 166 connect_result = channelstream_request(
167 167 self.channelstream_config, payload, '/subscribe')
168 168 except ChannelstreamConnectionException:
169 169 log.exception('Channelstream service is down')
170 170 return HTTPBadGateway()
171 171 # include_channel_info will limit history only to new channel
172 172 # to not overwrite histories on other channels in client
173 173 connect_result['channels_info'] = parse_channels_info(
174 174 connect_result['channels_info'],
175 175 include_channel_info=filtered_channels)
176 176 update_history_from_logs(self.channelstream_config,
177 177 filtered_channels, connect_result)
178 178 return connect_result
General Comments 0
You need to be logged in to leave comments. Login now