示例#1
0
def rules_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('rules')
    page_data['nav'] = turbo_nav.generate_html('rules', user)
    status = '200 OK'
    response_body = templates.render('rules', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#2
0
def account_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('account')
    # Reset app_password if requested
    if post_vars.get('reset_app_password', [0])[0] == '1':
        csrf_token = post_vars.get('csrf_token', [''])[0]
        if csrf_clerk.validate(session, csrf_token):
            # silently failing on an invalid token is fine here
            user.reset_app_password()
    status = '200 OK'
    page_data['nav'] = turbo_nav.generate_html('account', user, expanded=True)
    page_data['form_action'] = turbo_views['account'].path
    page_data['username'] = user.username
    page_data['avatar_src'] = user.account.get('avatar', '')
    page_data['app_password'] = user.app_password_plain
    page_data['csrf_token'] = csrf_clerk.register(session)
    discord_member = discord.get_member(user.discord_id)
    discord_user = discord.get_user(discord_member)
    redirect_uri = turbo_views['discord-callback'].uri
    oauth = turbo_session.OAuth2Session(config.discord.client_id,
                                        redirect_uri=redirect_uri,
                                        scope=config.discord.scope)
    authorization_url, state = oauth.authorization_url(
        config.discord.authorize_url,
        turbo_session.generate_state(env, csrf_clerk))
    page_data['discord_username'] = discord.render_username(discord_user)
    page_data['discord_roles'] = discord.render_roles(discord_member)
    page_data['discord_avatar_src'] = discord.get_avatar_url(discord_user)
    page_data['authorization_url'] = authorization_url
    response_body = templates.render('account', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#3
0
        def decorated_function(env, csrf_clerk):
            response_body = 'Template Render Error.'
            response_headers = util.basic_response_header(response_body)
            status = '200 OK'
            try:
                response_body, response_headers, status = func(env, csrf_clerk)

            except DBError:
                # Database Error
                logger.exception('Database Error occured.')
                return error_view('Database Error',
                                  'A database error has occured.', nav,
                                  '500 Internal Server Error', headless)
            except OAuth2Error as error:
                # OAuth 2.0 Error
                logger.info(f'OAuth 2.0 Error occured: {error}',
                            exc_info=config.debug_mode)
                return error_view('OAuth Error',
                                  'Failed to complete OAuth 2.0 handshake.',
                                  nav, status, headless)
            except Exception:
                # Unknown Exception
                logger.exception('Unexpected Error occured.')
                return error_view('Unknown Error',
                                  'An unexpected error has occured.', nav,
                                  '500 Internal Server Error', headless)
            else:
                # Normal function return without errors
                return response_body, response_headers, status
示例#4
0
def headless_theatre_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('theatre-headless')
    status = '200 OK'
    given_password = post_vars.get('theatre_password', [''])[0]
    theatre_password = get_property('theatre_password', None)
    if (user is not None or given_password == theatre_password
            or patreon.validate_session(env)):
        page_data['chat_uri'] = turbo_views['chat-headless'].path
        page_data['youtube_stream_id'] = get_property('theatre_stream_id')
        response_body = templates.render('youtube_embed', page_data)
    else:
        callback_view = turbo_views['patreon-theatre-callback']
        redirect_uri = callback_view.uri
        oauth = turbo_session.OAuth2Session(config.patreon.client_id,
                                            redirect_uri=redirect_uri,
                                            scope=config.patreon.scope)
        authorization_url, state = oauth.authorization_url(
            config.patreon.authorize_url,
            turbo_session.generate_state(env, csrf_clerk))
        page_data['patreon_authorization_uri'] = authorization_url
        page_data['form_action'] = turbo_views['theatre-headless'].path
        page_data['login_uri'] = util.build_url(
            turbo_views['login'].path,
            query={'redirect_to': turbo_views['theatre'].path})
        response_body = templates.render('theatre_auth', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#5
0
def error_view(title,
               detail,
               nav='error',
               status='200 OK',
               headless=False,
               access_level=ACL.guest):
    try:
        page_data = basic_page_data(nav)
        page_data['error_title'] = title
        page_data['error_detail'] = detail
        page_data['nav'] = turbo_nav.generate_html(nav,
                                                   access_level=access_level)

        if headless:
            response_body = templates.render('error_headless', page_data)
        else:
            response_body = templates.render('error', page_data)

        response_headers = util.basic_response_header(response_body)
        return response_body, response_headers, status

    # In case we encounter an error in rendering the error view
    # we'd like to report it
    except Exception:
        logger.exception('Unexpected Error occured.')
        return '', '', '500 Internal Server Error'
示例#6
0
def theatre_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('theatre')
    page_data['nav'] = turbo_nav.generate_html('theatre', user)
    page_data['theatre_uri'] = turbo_views['theatre-headless'].path
    status = '200 OK'
    response_body = templates.render('theatre', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#7
0
def headless_stream_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('stream-headless')
    page_data['chat_uri'] = turbo_views['chat-headless'].path
    page_data['default_embed'] = util.get_default_embed(config.stream_sources)
    page_data['video_sources'] = util.generate_video_sources(
        config.stream_sources)
    status = '200 OK'
    response_body = templates.render('stream_embed', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
def main_view(env, csrf_clerk):
    page_data = basic_page_data('main')
    response_body = 'Template Render Error.'
    response_headers = util.basic_response_header(response_body)
    status = '200 OK'

    session = turbo_session.get_session(env)
    account = turbo_session.retrieve_oauth_account(session)

    # Couldn't auth based on session. Start fresh OAuth 2.0 handshake
    if(account is None):
        if(session is not None):
            redirect_uri = turbo_views['oauth-callback'].uri
            oauth = turbo_session.OAuth2Session(
                config.mastodon.client_id,
                redirect_uri=redirect_uri,
                scope=config.mastodon.scope
            )
            authorization_url, state = oauth.authorization_url(
                config.mastodon.authorize_url,
                turbo_session.generate_state(env, csrf_clerk)
            )

            status = '307 Temporary Redirect'
            response_body = ''
            response_headers = [('Location', str(authorization_url))]

        # Not yet authenticated and no old session
        else:
            page_data['nav'] = turbo_nav.generate_html('main')
            page_data['login_uri'] = turbo_views['login'].path
            response_body = templates.render('main', page_data)
            response_headers = util.basic_response_header(response_body)

    # Display Account Information
    else:
        status = '307 Temporary Redirect'
        response_body = ''
        response_headers = [
            ('Location', turbo_views['account'].uri)
        ]
    return response_body, response_headers, status
示例#9
0
def frash_chat_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('frash-chat')
    page_data['frash_mode'] = 'frash-show-mode'
    page_data['rules_uri'] = turbo_views['rules'].path
    page_data['rand_spinner'] = str(random.randint(1, 5))
    page_data['webchat_uri'] = util.build_url('/webchat', 'websockets')
    page_data['live_channel'] = config.discord.live_channel
    status = '200 OK'
    response_body = templates.render('chat_headless', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#10
0
def headless_legacy_chat_view(env, get_vars, post_vars, csrf_clerk, session,
                              user):
    page_data = basic_page_data('legacy-chat-headless')
    page_data['rules_uri'] = turbo_views['rules'].path
    page_data['rand_spinner'] = str(random.randint(1, 5))
    page_data['username'] = user.username if user is not None else ''
    page_data['password'] = user.app_password_plain if user is not None else ''
    status = '200 OK'
    response_body = templates.render('legacy_chat_headless', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status
示例#11
0
def logout_view(env, csrf_clerk):
    response_body = 'Template Render Error.'
    response_headers = util.basic_response_header(response_body)
    status = '200 OK'

    session = turbo_session.get_session(env)
    turbo_session.delete_session(session)
    status = '307 Temporary Redirect'
    response_body = ''
    response_headers = [
        util.unset_cookie_header('TB_SESSION'),
        ('Location', util.build_url('/', base='base'))
    ]
    return response_body, response_headers, status
示例#12
0
def theatre_admin_view(env, get_vars, post_vars, csrf_clerk, session, user):
    page_data = basic_page_data('theatre-admin')
    page_data['nav'] = turbo_nav.generate_html('theatre-admin', user)
    theatre_password = post_vars.get('theatre_password',
                                     [get_property('theatre_password')])[0]
    youtube_stream_id = post_vars.get('youtube_stream_id',
                                      [get_property('theatre_stream_id')])[0]
    set_property('theatre_password', theatre_password)
    set_property('theatre_stream_id', youtube_stream_id)
    page_data['form_action'] = turbo_views['theatre-admin'].path
    page_data['theatre_password'] = theatre_password
    page_data['youtube_stream_id'] = youtube_stream_id
    page_data['csrf_token'] = csrf_clerk.register(session)
    status = '200 OK'
    response_body = templates.render('theatre_admin', page_data)
    response_headers = util.basic_response_header(response_body)
    return response_body, response_headers, status