aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorlonkaars <l.leblansch@gmail.com>2021-03-13 12:20:47 +0100
committerlonkaars <l.leblansch@gmail.com>2021-03-13 12:20:47 +0100
commitc5cf5b432aa49df55de8a58c176dae3eb0923754 (patch)
treed643ff200b29599ef8c271420df82927cb6bb83a /api
parent056b77e82c72136170084ef0addba013eae22c9d (diff)
friend status + recentgames key prop
Diffstat (limited to 'api')
-rw-r--r--api/api.ts1
-rw-r--r--api/user/info.py40
2 files changed, 32 insertions, 9 deletions
diff --git a/api/api.ts b/api/api.ts
index 1cf50ef..0902d53 100644
--- a/api/api.ts
+++ b/api/api.ts
@@ -6,6 +6,7 @@ export interface userInfo {
registered?: number,
type?: string,
username?: string,
+ relation?: "none"|"friends"|"incoming"|"outgoing"|"blocked",
};
export type ruleset = {
diff --git a/api/user/info.py b/api/user/info.py
index 6dc48f1..e720e56 100644
--- a/api/user/info.py
+++ b/api/user/info.py
@@ -3,7 +3,22 @@ from db import cursor
from auth.login_token import token_login
import json
-def format_user(user_id):
+def valid_user_id(user_id):
+ query = cursor.execute("select user_id from users where user_id = ?", [user_id]).fetchone()
+ return bool(query)
+
+def get_relation_to(user_1_id, user_2_id):
+ relation = cursor.execute("select * from social where " + \
+ "(user_1_id = ? and user_2_id = ?) or " + \
+ "(user_1_id = ? and user_2_id = ?)", [user_1_id, user_2_id, user_2_id, user_1_id]).fetchone()
+ if not relation: return "none"
+ if relation[2] == "friendship": return "friends"
+ if relation[2] == "outgoing" and relation[0] == user_1_id: return "outgoing"
+ if relation[2] == "outgoing" and relation[1] == user_1_id: return "incoming"
+ if relation[2] == "block" and relation[0] == user_1_id: return "blocked"
+ return "none"
+
+def format_user(user_id, viewer = ''):
user = cursor.execute("select " + ", ".join([
"username",
"user_id",
@@ -12,7 +27,7 @@ def format_user(user_id):
"avatar",
"status",
]) + " from users where user_id = ?", [user_id]).fetchone()
- return {
+ formatted_user = {
"username": user[0],
"id": user[1],
"country": user[2],
@@ -20,6 +35,9 @@ def format_user(user_id):
"avatar": user[4],
"status": user[5],
}
+ if viewer:
+ formatted_user["relation"] = get_relation_to(viewer, user_id)
+ return formatted_user
info = Blueprint('info', __name__)
@@ -31,24 +49,28 @@ def index():
username = data.get("username") or ""
user_id = data.get("id") or ""
token = request.cookies.get("token") or ""
+ viewer = ""
if not username and \
not user_id and \
not token:
return "", 400
- if token and not (username or user_id):
- user_id = token_login(token)
-
- if username and not user_id:
+ if username:
temp_user_id = cursor.execute("select user_id from users where username = ?", [username]).fetchone()
if len(temp_user_id) > 0: user_id = temp_user_id
- user = format_user(user_id)
+ if token:
+ self_id = token_login(token)
+ if not (username or user_id):
+ user_id = self_id
+ if user_id:
+ viewer = self_id
- if not user: return "", 403
+ if user_id and not valid_user_id(user_id): return "", 403
+ user = format_user(user_id, viewer)
#TODO: rating uitrekenen zodra er game functionaliteit is
- return user
+ return user, 200
dynamic_route = ["/user", info]