aboutsummaryrefslogtreecommitdiff
path: root/app/func/link
diff options
context:
space:
mode:
authorParker <contact@pkrm.dev>2024-02-26 20:55:05 -0600
committerParker <contact@pkrm.dev>2024-02-26 20:55:05 -0600
commitbce756b9aa51dfdfa2c2e6cdef4f88f660b80148 (patch)
treed2e7a238b04d4339bedf05f626bff15d48a61945 /app/func/link
parenta0bfa5440603841c40e6a29495ca49c09a5d8c83 (diff)
Overhaul: Flask -> FastAPI
Diffstat (limited to 'app/func/link')
-rw-r--r--app/func/link/delete.py20
-rw-r--r--app/func/link/delrecords.py20
-rw-r--r--app/func/link/records.py23
-rw-r--r--app/func/link/renew.py23
4 files changed, 86 insertions, 0 deletions
diff --git a/app/func/link/delete.py b/app/func/link/delete.py
new file mode 100644
index 0000000..97b696e
--- /dev/null
+++ b/app/func/link/delete.py
@@ -0,0 +1,20 @@
+import sqlalchemy
+
+from db import engine
+
+"""
+Delete the specified link from the users associated links
+"""
+def delete_link(link, owner):
+ with engine.begin() as conn:
+ try:
+ link_owner = conn.execute(sqlalchemy.text('SELECT owner FROM links WHERE link = :link'), [{'link': link}]).fetchone()[0]
+ except TypeError:
+ return 404
+
+ if owner == link_owner:
+ with engine.begin() as conn:
+ conn.execute(sqlalchemy.text('DELETE FROM links WHERE link = :link'), [{'link': link}])
+ return link
+ else:
+ return 401 \ No newline at end of file
diff --git a/app/func/link/delrecords.py b/app/func/link/delrecords.py
new file mode 100644
index 0000000..d82bfa5
--- /dev/null
+++ b/app/func/link/delrecords.py
@@ -0,0 +1,20 @@
+import sqlalchemy
+
+from db import engine
+
+"""
+Delete all of the IP log records that are associated with a specific link
+"""
+def delete_link_records(link, owner):
+ with engine.begin() as conn:
+ try:
+ link_owner = conn.execute(sqlalchemy.text('SELECT owner FROM links WHERE link = :link'), [{'link': link}]).fetchone()[0]
+ except TypeError:
+ return 404
+
+ if owner == link_owner:
+ with engine.begin() as conn:
+ conn.execute(sqlalchemy.text('DELETE FROM records WHERE link = :link'), [{'link': link}])
+ return link
+ else:
+ return 401 \ No newline at end of file
diff --git a/app/func/link/records.py b/app/func/link/records.py
new file mode 100644
index 0000000..56bb6d2
--- /dev/null
+++ b/app/func/link/records.py
@@ -0,0 +1,23 @@
+import sqlalchemy
+
+from db import engine
+
+"""
+Retrieve all records associated with a specific link
+"""
+def get_link_records(link, owner):
+ with engine.begin() as conn:
+ try:
+ link_owner = conn.execute(sqlalchemy.text('SELECT owner FROM links WHERE link = :link'), [{'link': link}]).fetchone()[0]
+ except TypeError:
+ return 404
+
+ if owner == link_owner:
+ with engine.begin() as conn:
+ records = conn.execute(sqlalchemy.text('SELECT timestamp, ip, location, browser, os, user_agent, isp FROM records WHERE owner = :owner and link = :link'), [{'owner': owner, 'link': link}]).fetchall()
+ if not records:
+ return 204
+ else:
+ return 401
+
+ return records \ No newline at end of file
diff --git a/app/func/link/renew.py b/app/func/link/renew.py
new file mode 100644
index 0000000..bcf0550
--- /dev/null
+++ b/app/func/link/renew.py
@@ -0,0 +1,23 @@
+import sqlalchemy
+import datetime
+
+from db import engine
+
+"""
+Renew a specified link so that the user can continue logging through that URL
+Adds 7 days from the current date
+"""
+def renew_link(link, owner):
+ with engine.begin() as conn:
+ try:
+ link_owner = conn.execute(sqlalchemy.text('SELECT owner FROM links WHERE link = :link'), [{'link': link}]).fetchone()[0]
+ except TypeError:
+ return 404
+
+ if owner == link_owner:
+ with engine.begin() as conn:
+ expire_date = datetime.datetime.date(datetime.datetime.now()) + datetime.timedelta(days=7)
+ conn.execute(sqlalchemy.text('UPDATE links SET expire_date = :expire_date WHERE link = :link'), [{'expire_date': expire_date, 'link': link}])
+ return link, expire_date
+ else:
+ return 401 \ No newline at end of file