Example #1
0
    async def get_channel_messages(self, req: Request) -> Response:
        channel_id = req.match_info['channel_id']

        try:
            return utils.resp(self.messages[channel_id])
        except KeyError:
            return utils.not_found({
                'message': 'Channel id not found',
                'success': False,
            })
Example #2
0
    async def auth_exchange(self, req: Request) -> Response:
        try:
            code = req.rel_url.query['code']
        except KeyError:
            return utils.bad_req('No code')

        async with aiohttp.ClientSession() as session:
            post_req = session.post(endpoints.oauth2_token(),
                                    data={
                                        'code': code,
                                        'client_id': self.settings.client_id,
                                        'client_secret':
                                        self.settings.client_secret,
                                        'redirect_uri':
                                        self.settings.redirect_uri,
                                        'grant_type':
                                        constants.oauth2_grant_type,
                                    })

            async with post_req as resp:
                data: Mapping[str, any] = await resp.json()

                if req.remote not in self.clients:
                    self.add_client(req.remote, None)

                try:
                    access_token = data['access_token']
                    self.clients[req.remote].access_token = access_token
                except KeyError:
                    return utils.resp('Code already exchanged', False)

            get_req = session.get(endpoints.my_channel(),
                                  headers={
                                      'Authorization':
                                      f'Bearer {access_token}',
                                  })

            async with get_req as resp:
                data: Mapping[str, any] = await resp.json()

        print('Authenticated')

        return utils.resp(data)
Example #3
0
    async def auth_check(self, req: Request) -> Response:
        try:
            client = self.clients[req.remote]

            async with aiohttp.ClientSession() as session:
                get_req = session.get(
                    endpoints.oauth2_check(client.access_token))

                async with get_req as resp:
                    body = await resp.json()

                    if body['aud'] == self.settings.client_id:
                        return utils.resp({
                            'logged_in': True,
                        })
        except KeyError:
            pass

        return utils.resp({
            'logged_in': False,
            'success': True,
        })
Example #4
0
    async def auth_logout(self, req: Request) -> Response:
        try:
            token = self.clients[req.remote].access_token

            self.clients[req.remote].access_token = None

            async with aiohttp.ClientSession() as session:
                get_req = session.get(endpoints.oauth2_revoke(token))

                async with get_req as _:
                    print('Revoked access token')

                    pass
        except KeyError:
            pass

        return utils.resp({
            'logged_out': True,
        })
Example #5
0
    async def send_message(self, req: Request) -> Response:
        try:
            data: Mapping[str, any] = json.loads(await req.text())
        except KeyError:
            return utils.bad_req('Invalid JSON sent')

        if 'content' not in data:
            return utils.bad_req('No content sent')

        try:
            client: Client = self.clients[req.remote]
        except KeyError:
            return utils.bad_req('Unknown client')

        if not client or client.livestream_id is None:
            return utils.bad_req('You are not watching a channel')

        if client.access_token is None:
            return utils.bad_req('You are not authenticated')

        msg: Mapping[str, object] = {
            'snippet': {
                'liveChatId': client.livestream_id,
                'textMessageDetails': {
                    'messageText': data['content']
                },
                'type': 'textMessageEvent',
            },
        }

        async with aiohttp.ClientSession() as session:
            post_req = session.post(endpoints.messages(),
                                    json=msg,
                                    headers={
                                        'Authorization':
                                        f'Bearer {client.access_token}',
                                    })

            async with post_req as resp:
                return utils.resp(await resp.json())
Example #6
0
def latest_success(repo_name):
    tag = flask.request.args.get('tag', None)
    result = data.get_latest_successful(repo_name, tag)
    return utils.resp(app, result)
Example #7
0
def get_summary(id):
    result = data.get_summary(id)
    return utils.resp(app, result)
Example #8
0
def latest_summary():
    result = data.latest_status()
    return utils.resp(app, result)
Example #9
0
def home():
    return utils.resp(app, 'stackbrew')
Example #10
0
def latest_success(repo_name):
    tag = flask.request.args.get('tag', None)
    result = data.get_latest_successful(repo_name, tag)
    return utils.resp(app, result)
Example #11
0
def get_summary(id):
    result = data.get_summary(id)
    return utils.resp(app, result)
Example #12
0
def latest_summary():
    result = data.latest_status()
    return utils.resp(app, result)
Example #13
0
def home():
    return utils.resp(app, 'stackbrew')
Example #14
0
 async def index(self, req: Request) -> Response:
     return utils.resp('index')
Example #15
0
    async def get_channels(self, req: Request) -> Response:
        async with aiohttp.ClientSession() as session:
            get_req = session.get(endpoints.channels(self.settings.yt_key))

            async with get_req as resp:
                return utils.resp(await resp.json())