Example #1
0
def route(user):
    init_session()
    fg = FeedGenerator()
    fg.title(session['site_name'])
    fg.subtitle('Trash bag of links')
    fg.generator(session['site_name'])
    fg.link(href=get_config_value('address'))
    fg.logo(f'{get_config_value("address")}/static/img/logo.png')
    fg.language('en')

    rss_posts = get_all_posts_for_rss(
    ) if user is None else get_all_user_posts_for_rss(user)

    for post in reversed(rss_posts):
        post_title = Markup((post.title[:60] +
                             '...') if len(post.title) > 60 else post.title)
        fe = fg.add_entry()
        fe.title(f'[{post.tags}] {post_title}')
        fe.link(href=html.unescape(Markup(post.url)))
        fe.author(name=post.username)
        fe.pubDate(
            datetime.datetime.fromtimestamp(post.datetime).strftime('%c +10'))
        fe.updated(
            datetime.datetime.fromtimestamp(post.updated).strftime('%c +10'))

    response = make_response(fg.rss_str(pretty=True))
    response.headers.set('Content-Type', 'application/rss+xml')

    return response
Example #2
0
def route():
    init_session()
    if request.method == 'GET':
        if 'q' in request.args:
            query = request.args.get('q', 1, type=str)
            if not query.strip() or query.isspace():
                return render_template(f'{session["view_mode"]}/search.html', empty_query=True)
        else:
            return render_template(f'{session["view_mode"]}/search.html')
        term = 'title'
        search_query = query
        if query.startswith('!tag'):
            term = 'tag'
            query = query.replace('!tag ', '', 1)
        if query.startswith('!domain'):
            term = 'domain'
            query = query.replace('!domain ', '')
        if query.startswith('!user'):
            term = 'user'
            query = query.replace('!user ', '')
        list_of_posts = []
        page = request.args.get('p', 1, type=int)
        page_total, page_info = search_for_posts(page, query, term)
        if len(page_info.items) > 0:
            for post in page_info.items:
                list_of_posts.append(post_reformat(post))
            return render_template(f'{session["view_mode"]}/search.html',
                                   is_valid_search=True, query=search_query, search_count=page_total,
                                   page=page_info, posts=list_of_posts)
        else:
            return render_template(f'{session["view_mode"]}/search.html', nothing_found=True)
    else:
        return render_template(f'{session["view_mode"]}/search.html')
Example #3
0
def route(post_id):
    init_session()
    if post_id is None:
        if request.method == 'POST':
            user = escape(session['username'])
            title, url, tags = request.form['link-title'], request.form[
                'link-url'], request.form['link-tags']
            is_post_valid, error_tag = post_check(title, url, tags)
            if is_post_valid:
                insert_post(user, escape(title), escape(url), escape(tags))
                alert_telegram_channel(
                    f'<b>[{tags}] {title}</b>\n<i>Posted by {user}</i>\n<a href="{url}">Link</a>'
                )
                return redirect(url_for('route.index'))
            else:
                return render_template(f'{session["view_mode"]}/submit.html',
                                       options=list_of_tags(),
                                       error=error_tag,
                                       title=title,
                                       url=url,
                                       tags=tags)
        else:
            return render_template(f'{session["view_mode"]}/submit.html',
                                   options=list_of_tags())
    else:
        if isinstance(int(post_id), int):
            if request.method == 'POST':
                title, url, tags = request.form['link-title'], request.form[
                    'link-url'], request.form['link-tags']
                is_post_valid, error_tag = post_check(title, url, tags)
                if is_post_valid:
                    edit_post(post_id, escape(title), escape(url),
                              escape(tags))
                    return redirect(url_for('route.index'))
                else:
                    return render_template(
                        f'{session["view_mode"]}/submit.html',
                        options=list_of_tags(),
                        error=error_tag,
                        title=title,
                        url=url,
                        tags=tags)
            else:
                post = get_post(post_id)
                no_ownership = True if post.username != escape(
                    session['username']) else False
                restricted_edit = True if (int(time.time()) -
                                           post.datetime) > 86400 else False
                return render_template(f'{session["view_mode"]}/edit.html',
                                       options=list_of_tags(),
                                       id=post.id,
                                       title=Markup(post.title),
                                       url=post.url,
                                       tag=post.tags,
                                       no_ownership=no_ownership,
                                       restricted_edit=restricted_edit)
        else:
            return redirect(url_for('route.index'))
Example #4
0
def route(top_or_recent, template):
    init_session()
    posts = []

    for post in top_or_recent:
        posts.append(post_reformat(post))

    return render_template(f'{session["view_mode"]}/{template}.html',
                           posts=posts)
Example #5
0
def route():
    init_session()
    list_of_posts = []
    page = request.args.get('p', 1, type=int)
    if session["view_mode"] == 'desktop':
        page_info = get_all_posts(page)
    else:
        page_info = get_all_posts(page, 5)
    for post in page_info.items:
        list_of_posts.append(post_reformat(post))
    return render_template(f'{session["view_mode"]}/index.html',
                           page=page_info,
                           posts=list_of_posts)
Example #6
0
def route(viewuser):
    init_session()
    short_password = False
    if 'short_password' in session and session['short_password']:
        session.pop('short_password', None)
        short_password = True
    if viewuser is not None:
        user_request = escape(viewuser)
        details = get_all_user_details(user_request)
        if details is None:
            return render_template(f'{session["view_mode"]}/user.html',
                                   viewuser=escape(viewuser),
                                   error=True)
        points, post_count = get_user_post_points(
            user_request), get_user_post_count(user_request)
        top_posts, recent_posts = [], []
        for post in get_all_top_posts(escape(viewuser)):
            top_posts.append(post_reformat(post))
        for post in get_all_recent_updated_posts(escape(viewuser)):
            recent_posts.append(post_reformat(post))
        can_see_invite_code = True if user_request == escape(
            session['username']) else False
        return render_template(f'{session["view_mode"]}/user.html',
                               viewuser=escape(viewuser),
                               points=points,
                               about_me=details.about_me,
                               last_login=datetime.datetime.fromtimestamp(
                                   details.last_login).strftime('%c'),
                               invited_by=details.invited_by,
                               can_see_invite_code=can_see_invite_code,
                               invite_code=details.invite_code,
                               submissions=post_count,
                               short_password=short_password,
                               num_posts=len(top_posts),
                               top_posts=top_posts,
                               recent_posts=recent_posts)
    else:
        tree = Tree()
        tree.create_node(tag='overseer', identifier='overseer')
        count = 0
        for u, i in get_all_user_invitee():
            if u != 'overseer':
                tree.create_node(tag=u, identifier=u, parent=i)
                count += 1
        return render_template(f'{session["view_mode"]}/user_tree.html',
                               viewuser=escape(viewuser),
                               tree=tree.show(stdout=False),
                               total=count)
Example #7
0
def route(action, post_id):
    init_session()
    if 'logged_in' in session:
        if session['logged_in'] and int(post_id) > 0:
            if action == 'delete':
                if get_post(post_id) is not None:
                    delete_post(post_id, escape(session['username']))
            if action == 'upvote':
                if not check_already_vote_or_old(post_id,
                                                 escape(session['username'])):
                    add_vote_to_post(post_id, escape(session['username']))
            if action == 'report':
                if not check_already_report(post_id, escape(
                        session['username'])):
                    add_report_to_post(post_id, escape(session['username']))
    return redirect(url_for('route.index'))
Example #8
0
def route():
    init_session()
    if request.method == 'POST':
        username = request.form['username'].lower()
        if len(request.form['password'].lower()) < 8:
            session['short_password'] = True
            return redirect(f'/u/{username}')
        if session['logged_in'] and username == escape(session['username']):
            if get_all_user_details(username) is not None:
                password = bcrypt.hashpw(escape(request.form['password']).encode('utf-8'), bcrypt.gensalt(16))
                options = ';'
                change_user_details(username, password, options)
                session.clear()
                return render_template(f'{session["view_mode"]}/private.html',
                                       password_changed=True, type=f'Password Changed for {username}')
    return redirect(url_for('route.index'))
Example #9
0
def route():
    init_session()
    if request.method == 'POST':
        user_login = get_all_user_details(escape(request.form['username'].lower()))
        if user_login is not None:
            if bcrypt.checkpw(escape(request.form['password']).encode('utf-8'), user_login.password):
                update_last_login_on_user(user_login.username)
                session['logged_in'], session['username'], session['current_page'] = True, user_login.username, 1
                return redirect(url_for('route.index'))
            else:
                return render_template(f'{session["view_mode"]}/login.html', error=True)
        else:
            return render_template(f'{session["view_mode"]}/login.html', error=True)
    elif request.method == 'GET':
        return render_template(f'{session["view_mode"]}/login.html')
    else:
        return redirect(url_for('route.index'))
Example #10
0
def route(code):
    init_session()
    if request.method == 'POST':
        user_invite = get_user_by_invite_code(code)
        if does_user_exist(request.form['username'].lower()):
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   user_exists=True)
        if len(request.form['username'].lower()) < 4:
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   less_than_four=True)
        if len(request.form['username'].lower()) > 16:
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   more_than_sixteen=True)
        if len(request.form['password'].lower()) < 8:
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   short_password=True)
        if request.form['username'].lower() in [
            'admin', 'administrator', 'root', 'system', 'qanon', '4chan', 'quisquiliae', 'user', 'username',
            'hitler', 'jesus', 'stalin', 'trump', 'phil', 'overseer', 'rocketotter'
        ] or profanity.contains_profanity(request.form['username'].lower()):
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   blacklisted=True)
        invited_by = get_user_by_invite_code(request.form['invite_code'])
        private_key = []
        for i in range(4):
            private_key.append(RandomWords().get_random_word(minLength=4, maxLength=8, includePartOfSpeech="verb"))
        private_key_raw = '-'.join(private_key).lower()
        private_key = bcrypt.hashpw(escape('-'.join(private_key).lower()).encode('utf-8'), bcrypt.gensalt(16))
        invite_code = generate_code(32)
        insert_user(escape(request.form['username'].lower()),
                    bcrypt.hashpw(escape(request.form['password']).encode('utf-8'), bcrypt.gensalt(16)),
                    private_key=private_key, invited_by=invited_by.username, invite_code=invite_code)
        return render_template(f'{session["view_mode"]}/private.html',
                               user_created=True,
                               private_key=private_key_raw,
                               user=escape(request.form['username'].lower()))
    elif request.method == 'GET':
        if code is None:
            return redirect(url_for('route.index'))
        user_invite = get_user_by_invite_code(code)
        if user_invite is not None:
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invalid_invite_code=False,
                                   invite_from=user_invite.username,
                                   invite_code=code,
                                   valid_invite_code=True)
        else:
            return render_template(f'{session["view_mode"]}/invite.html',
                                   invalid_invite_code=True)
    else:
        return redirect(url_for('route.index'))
Example #11
0
def change_view():
    init_session()
    session['view_mode'] = 'mobile' if session[
        'view_mode'] == 'desktop' else 'desktop'
    return redirect(url_for('route.index'))
Example #12
0
def page_not_found(error):
    init_session()
    return render_template(f'{session["view_mode"]}/error.html',
                           error=f'{error.code} {error.name}')