def delete(self): vk_id = self.request.args.get('vk_id') tg_id = self.request.args.get('tg_id') if not (vk_id and tg_id): raise HTTP_400('Invalid `vk_id` or `tg_id` value') rpc_call('remove_connection', self.user['id'], vk_id, tg_id) self.response.status_code = 204 return ''
def post(self): vk_id = self.request.data.get('vk_id') tg_id = self.request.data.get('tg_id') active = int(self.request.data.get('active', 1)) if not (vk_id and tg_id): raise HTTP_400('Invalid `vk_id` or `tg_id` value') rpc_call('set_connection', self.user['id'], vk_id, tg_id, active) self.response.status_code = 204 return ''
def before(self): if self.request.method == 'OPTIONS': return user = None token = self._parse_auth_header() if token: try: payload = jwt_auth.decode_token(token, self.audience) user_id = payload.get('id') user = rpc_call('get_vk_user', user_id) if not user: raise HTTP_403("Access denied") except jwt_auth.DecodeError as e: self.logger.warning(e) raise HTTP_401("Unable to parse authentication token") except jwt_auth.ExpiredSignatureError: if 'guest' not in self.audience: raise HTTP_401("Expired token") except jwt_auth.InvalidAudienceError: raise HTTP_403("Incorrect claims") except Exception as e: self.logger.exception(e) raise HTTP_500("Unable to parse authentication token") elif 'guest' not in self.audience: raise HTTP_403("Access denied") self.user = user or {}
def delete(self): rpc_call('remove_vk_user', self.user['id'], timeout=5) self.response.status_code = 204 return ''
def get(self): return self._set_photo_path( rpc_call('get_tg_user', self.user['id'], timeout=30))
def _set_authorized(self, phone): db.del_interim_state(phone) rpc_call('set_phone_number', self.user['id'], phone) return True
def delete(self): if self.user['phone_number']: rpc_call('remove_tg_user', self.user['id']) self.response.status_code = 204 return ''
def get(self): res = list(rpc_call('get_targets', self.user['id'], timeout=5)) res.sort(key=lambda item: item['title']) return res
def get(self): return list(rpc_call('get_connections', self.user['id']))
#! /usr/bin/env python3 import os import sys from pprint import pprint from aiorpc import server from lib.rpc_client import rpc_call from lib.daemon import handlers handlers.init() commands = list(sorted(fn for fn in server.__dict__['_methods'])) if len(sys.argv) < 2: print('Usage: {} <command>[ <argument>[ <argument> ...]]'.format( os.path.basename(sys.argv[0]))) print(' Available commands:') pprint(commands, indent=4) exit(1) command = sys.argv[1] if command not in commands: print(' Unknown command {}'.format(command)) exit(2) pprint(rpc_call(command, *sys.argv[2:], timeout=30))
def get(self): res = list( map(self._set_photo_path, rpc_call('get_sources', self.user['id'], timeout=30))) res.sort(key=lambda item: item['title']) return res
def _final_stage(self, code): client_id = config.get('vk', 'client_id') client_secret = config.get('vk', 'client_secret') vksession = Session() try: resp = vksession.get( 'https://oauth.vk.com/access_token?' 'redirect_uri=https://api.vk.com/blank.html' f'&client_id={client_id}&client_secret={client_secret}&code={code}' ) resp.raise_for_status() auth = resp.json() if not auth.get('access_token'): raise VKException(auth) resp = vksession.get('https://api.vk.com/method/users.get', params={ 'v': '5.92', 'user_ids': auth['user_id'], 'fields': 'photo_100', 'access_token': auth['access_token'] }) resp.raise_for_status() user = resp.json() if user.get('error'): raise VKException(user) user = user.get('response', {}) user = { 'id': user[0]['id'], 'fullname':\ (user[0].get('first_name', '') + ' ' + user[0].get('last_name', '')).strip(), 'photo': user[0].get('photo_100'), 'access_token': auth['access_token'] } if user else {} rpc_call('set_vk_user', user) token = jwt_auth.create_token({ 'id': auth['user_id'], 'aud': 'authorized' }) self.logger.info('Issued JWT: %s', token) return { 'token': 'Bearer ' + token.decode("utf-8"), 'tgauth': user.get('id') and rpc_call('is_tg_authorized', user['id']) } except exceptions.HTTPError as e: self.logger.info('Error authorizing user on VK: %s', e) if e.response.status_code == 401: raise HTTP_403('Error authorizing user on VK') raise HTTPError(e.response.status_code, e.response.text) except VKException as e: self.logger.warning('Error authorizing user on VK: %s', e) raise HTTP_403(e.message, e.code) except Exception as e: self.logger.exception('Error authorizing user on VK: %s', e) finally: vksession.close() raise HTTP_500('Internal error')