Skip to content

Commit fd15fb4

Browse files
committed
Add store_bookmarks_by_userid config option
1 parent 31ae24f commit fd15fb4

File tree

2 files changed

+96
-50
lines changed

2 files changed

+96
-50
lines changed

schemas/qwc-permalink-service.json

+4
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
"default_expiry_period": {
4848
"description": "Default expiry period for permalinks, in days. Default: null (no expiry)",
4949
"type": "number"
50+
},
51+
"store_bookmarks_by_userid": {
52+
"description": "Whether to store bookmarks by userid instead of username. Default: true",
53+
"type": "boolean"
5054
}
5155
},
5256
"required": [

src/server.py

+92-50
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,14 @@ def db_conn():
6060
user_permalink_table = config.get(
6161
'user_permalink_table', qwc_config_schema + '.user_permalinks')
6262
user_bookmark_table = config.get('user_bookmark_table', qwc_config_schema + '.user_bookmarks')
63+
store_bookmarks_by_userid = config.get('store_bookmarks_by_userid', True)
64+
if store_bookmarks_by_userid:
65+
users_table = f'"{qwc_config_schema}"."users"'
66+
else:
67+
users_table = None
6368

6469
db = db_engine.db_engine(db_url)
65-
return (db, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table)
70+
return (db, users_table, permalinks_table, user_permalink_table, user_bookmark_table)
6671

6772

6873
@api.route('/createpermalink')
@@ -99,7 +104,7 @@ def post(self):
99104
}
100105

101106
# Insert into databse
102-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
107+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
103108
datastr = json.dumps(data)
104109
hexdigest = hashlib.sha224((datastr + str(time.time())).encode('utf-8')).hexdigest()[0:9]
105110
date = datetime.date.today().strftime(r"%Y-%m-%d")
@@ -153,7 +158,7 @@ def get(self):
153158
args = resolvepermalink_parser.parse_args()
154159
key = args['key']
155160
data = {}
156-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
161+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
157162
sql = sql_text("""
158163
SELECT data
159164
FROM {table}
@@ -176,7 +181,7 @@ def get(self):
176181
if not username:
177182
return jsonify({})
178183

179-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
184+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
180185
sql = sql_text("""
181186
SELECT data
182187
FROM {table}
@@ -218,7 +223,7 @@ def post(self):
218223
}
219224

220225
# Insert into databse
221-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
226+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
222227
datastr = json.dumps(data)
223228
date = datetime.date.today().strftime(r"%Y-%m-%d")
224229
sql = sql_text("""
@@ -248,16 +253,23 @@ def get(self):
248253
config = config_handler.tenant_config(tenant)
249254
sort_order = config.get('bookmarks_sort_order', 'date, description')
250255

251-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
252-
sql = sql_text("""
253-
WITH "user" AS (
254-
SELECT id FROM "{schema}"."users" WHERE name=:username
255-
)
256-
SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
257-
FROM {table}
258-
WHERE user_id = (SELECT id FROM "user")
259-
ORDER BY {sort_order}
260-
""".format(schema=qwc_config_schema, table=user_bookmark_table, sort_order=sort_order))
256+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
257+
if users_table:
258+
sql = sql_text("""
259+
WITH "user" AS (
260+
SELECT id FROM {users_table} WHERE name=:username
261+
)
262+
SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
263+
FROM {table}
264+
WHERE user_id = (SELECT id FROM "user")
265+
ORDER BY {sort_order}
266+
""".format(users_table=users_table, table=user_bookmark_table, sort_order=sort_order))
267+
else:
268+
sql = sql_text("""
269+
SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
270+
FROM {table}
271+
WHERE username = :user ORDER BY {sort_order}
272+
""".format(table=user_bookmark_table, sort_order=sort_order))
261273
try:
262274
data = []
263275
with db_engine.connect() as connection:
@@ -303,19 +315,29 @@ def post(self):
303315
}
304316

305317
# Insert into database
306-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
318+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
307319
datastr = json.dumps(data)
308320
hexdigest = hashlib.sha224((datastr + str(time.time())).encode('utf-8')).hexdigest()[0:9]
309321
date = datetime.date.today().strftime(r"%Y-%m-%d")
310322

311323
description = args['description']
312-
sql = sql_text("""
313-
WITH "user" AS (
314-
SELECT id FROM "{schema}"."users" WHERE name=:username
315-
)
316-
INSERT INTO {table} (user_id, username, data, key, date, description)
317-
VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
318-
""".format(schema=qwc_config_schema, table=user_bookmark_table))
324+
if users_table:
325+
sql = sql_text("""
326+
WITH "user" AS (
327+
SELECT id FROM {users_table} WHERE name=:username
328+
)
329+
INSERT INTO {table} (user_id, username, data, key, date, description)
330+
VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
331+
""".format(users_table=users_table, table=user_bookmark_table))
332+
else:
333+
sql = sql_text("""
334+
INSERT INTO {table} (username, data, key, date, description)
335+
VALUES (:user, :data, :key, :date, :description)
336+
ON CONFLICT (username,key) WHERE username = :user
337+
DO
338+
UPDATE
339+
SET data = :data, date = :date, description = :description
340+
""".format(table=user_bookmark_table))
319341

320342
attempts = 0
321343
while attempts < 100:
@@ -339,15 +361,22 @@ def get(self, key):
339361
if not username:
340362
return jsonify({"success": False})
341363

342-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
343-
sql = sql_text("""
344-
WITH "user" AS (
345-
SELECT id FROM "{schema}"."users" WHERE name=:username
346-
)
347-
SELECT data
348-
FROM {table}
349-
WHERE user_id = (SELECT id FROM "user") AND key = :key
350-
""".format(schema=qwc_config_schema, table=user_bookmark_table))
364+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
365+
if users_table:
366+
sql = sql_text("""
367+
WITH "user" AS (
368+
SELECT id FROM {users_table} WHERE name=:username
369+
)
370+
SELECT data
371+
FROM {table}
372+
WHERE user_id = (SELECT id FROM "user") AND key = :key
373+
""".format(users_table=users_table, table=user_bookmark_table))
374+
else:
375+
sql = sql_text("""
376+
SELECT data
377+
FROM {table}
378+
WHERE username = :user and key = :key
379+
""".format(table=user_bookmark_table))
351380
try:
352381
with db_engine.connect() as connection:
353382
data = json.loads(connection.execute(sql, {"username": username, "key": key}).mappings().first()["data"])
@@ -364,14 +393,20 @@ def delete(self, key):
364393
return jsonify({"success": False})
365394

366395
# Delete into databse
367-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
368-
sql = sql_text("""
369-
WITH "user" AS (
370-
SELECT id FROM "{schema}"."users" WHERE name=:username
371-
)
372-
DELETE FROM {table}
373-
WHERE key = :key and user_id = (SELECT id FROM "user")
374-
""".format(schema=qwc_config_schema, table=user_bookmark_table))
396+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
397+
if users_table:
398+
sql = sql_text("""
399+
WITH "user" AS (
400+
SELECT id FROM {users_table} WHERE name=:username
401+
)
402+
DELETE FROM {table}
403+
WHERE key = :key and user_id = (SELECT id FROM "user")
404+
""".format(users_table=users_table, table=user_bookmark_table))
405+
else:
406+
sql = sql_text("""
407+
DELETE FROM {table}
408+
WHERE key = :key and username = :username
409+
""".format(table=user_bookmark_table))
375410

376411
with db_engine.begin() as connection:
377412
connection.execute(sql, {"key": key, "username": username})
@@ -408,19 +443,26 @@ def put(self, key):
408443
}
409444

410445
# Update into databse
411-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
446+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
412447
datastr = json.dumps(data)
413448
date = datetime.date.today().strftime(r"%Y-%m-%d")
414449

415450
description = args['description']
416-
sql = sql_text("""
417-
WITH "user" AS (
418-
SELECT id FROM "{schema}"."users" WHERE name=:username
419-
)
420-
UPDATE {table}
421-
SET username = :username, data = :data, date = :date, description = :description
422-
WHERE user_id = (SELECT id FROM "user") and key = :key
423-
""".format(schema=qwc_config_schema, table=user_bookmark_table))
451+
if users_table:
452+
sql = sql_text("""
453+
WITH "user" AS (
454+
SELECT id FROM {users_table} WHERE name=:username
455+
)
456+
UPDATE {table}
457+
SET username = :username, data = :data, date = :date, description = :description
458+
WHERE user_id = (SELECT id FROM "user") and key = :key
459+
""".format(users_table=users_table, table=user_bookmark_table))
460+
else:
461+
sql = sql_text("""
462+
UPDATE {table}
463+
SET data = :data, date = :date, description = :description
464+
WHERE username = :user and key = :key
465+
""".format(table=user_bookmark_table))
424466

425467
with db_engine.begin() as connection:
426468
connection.execute(sql, {"username": username, "data": datastr, "key": key, "date": date, "description": description})
@@ -437,7 +479,7 @@ def ready():
437479
@app.route("/healthz", methods=['GET'])
438480
def healthz():
439481
try:
440-
db_engine, qwc_config_schema, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
482+
db_engine, users_table, permalinks_table, user_permalink_table, user_bookmark_table = db_conn()
441483
with db_engine.connect() as connection:
442484
connection.execute(sql_text("SELECT 1"))
443485
except Exception as e:

0 commit comments

Comments
 (0)