Пример #1
0
    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 ''
Пример #2
0
    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 ''
Пример #3
0
    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 {}
Пример #4
0
    def delete(self):
        rpc_call('remove_vk_user', self.user['id'], timeout=5)

        self.response.status_code = 204
        return ''
Пример #5
0
 def get(self):
     return self._set_photo_path(
         rpc_call('get_tg_user', self.user['id'], timeout=30))
Пример #6
0
 def _set_authorized(self, phone):
     db.del_interim_state(phone)
     rpc_call('set_phone_number', self.user['id'], phone)
     return True
Пример #7
0
    def delete(self):
        if self.user['phone_number']:
            rpc_call('remove_tg_user', self.user['id'])

        self.response.status_code = 204
        return ''
Пример #8
0
 def get(self):
     res = list(rpc_call('get_targets', self.user['id'], timeout=5))
     res.sort(key=lambda item: item['title'])
     return res
Пример #9
0
 def get(self):
     return list(rpc_call('get_connections', self.user['id']))
Пример #10
0
#! /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))
Пример #11
0
 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
Пример #12
0
    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')