aboutsummaryrefslogtreecommitdiff
path: root/app/routes.py
blob: aaa0ec12060f590820dfa49d84d3f09af86024c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import flask
import tabulate
import sqlalchemy

from db import engine
from auth import auth
from func.signup import generate_account
from func.newlink import generate_link
from func.log import log
from func.delete_link import delete_link
from func.renew_link import renew_link
from func.link_records import link_records
from func.del_link_records import del_link_records


app = flask.Flask(__name__)

@app.route('/signup', methods=['GET'])
def signup():
    account_name = generate_account()
    return flask.jsonify({'account_name': account_name})


@app.route('/newlink', methods=['POST'])
@auth.login_required
def newlink():
    response = generate_link(flask.request, auth.current_user())
    return flask.jsonify(msg=response[0]), response[1]


"""
Return all links associated with an account
"""
@app.route('/links', methods=['POST'])
@auth.login_required
def links():
    with engine.begin() as conn:
        links = conn.execute(sqlalchemy.text('SELECT link, expire_date FROM links WHERE owner = :owner'), [{'owner': auth.current_user()}]).fetchall()

    string = ""
    i = 1
    for link, expire_date in links:
        string += f"{i}. {link} - Expires on {expire_date}\n"
        i += 1
    return string


"""
Return all records associated with an account, no matter the link
"""
@app.route('/records', methods=['POST'])
@auth.login_required
def records():
    with engine.begin() as conn:
        records = conn.execute(sqlalchemy.text('SELECT timestamp, ip, location, browser, os, user_agent, isp FROM records WHERE owner = :owner'), [{'owner': auth.current_user()}]).fetchall()

    if not records:
        return flask.jsonify('No records found'), 200

    return tabulate.tabulate(records, headers=['Timestamp', 'IP', 'Location', 'Browser', 'OS', 'User Agent', 'ISP']), 200


@app.route('/<link>', methods=['GET'])
def link(link):
    redirect_link = log(link, flask.request)
    return flask.redirect(redirect_link)


@app.route('/<link>/delete', methods=['POST'])
@auth.login_required
def link_delete(link):
    response = delete_link(link, auth.current_user())
    return flask.jsonify(msg=response[0]), response[1]


@app.route('/<link>/renew', methods=['POST'])
@auth.login_required
def renew_link(link):
    response = renew_link(link, auth.current_user())
    return flask.jsonify(msg=response[0]), response[1]


@app.route('/<link>/records', methods=['POST'])
@auth.login_required
def records_link(link):
    response = link_records(link, auth.current_user())
    # If we jsonify the tabulate string it fucks it up, so we have to return
    # it normally, this check does that
    if response[0].startswith('Timestamp'):
        return response[0], response[1]
    else:
        return flask.jsonify(msg=response[0]), response[1]


@app.route('/<link>/delrecords', methods=['POST'])
def records_delete(link):
    response = del_link_records(link, auth.current_user())
    return flask.jsonify(msg=response[0]), response[1]