Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions schemas/qwc-map-viewer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
"description": "The name of the DB schema which stores the qwc config. Default: qwc_config",
"type": "string"
},
"store_config_by_userid": {
"description": "Whether to store user config by userid instead of username. Default: true",
"type": "boolean"
},
"qwc2_path": {
"description": "Path to QWC2 files",
"type": "string"
Expand Down
52 changes: 43 additions & 9 deletions src/qwc2_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ def __init__(self, tenant, tenant_handler, logger):

self.db_url = config.get('db_url', 'postgresql:///?service=qwc_configdb')
self.qwc_config_schema = config.get('qwc_config_schema', 'qwc_config')
self.store_config_by_userid = config.get('store_config_by_userid', True)

self.show_restricted_themes = config.get('show_restricted_themes', False)
self.show_restricted_themes_whitelist = config.get('show_restricted_themes_whitelist', "")
Expand Down Expand Up @@ -136,13 +137,22 @@ def qwc2_index(self, identity, params, request_url):
and isinstance(identity, dict) and self.db_url \
:
db = db_engine.db_engine(self.db_url)
with db.connect() as conn:

if self.store_config_by_userid:
sql = sql_text("""
SELECT *
FROM {schema}.user_infos ui
JOIN {schema}.users u ON u.id=ui.user_id
FROM "{schema}".user_infos ui
JOIN "{schema}".users u ON u.id=ui.user_id
WHERE u.name=:user;
""".format(schema=self.qwc_config_schema))
else:
sql = sql_text("""
SELECT *
FROM "{schema}".user_infos ui
WHERE ui.username=:user;
""".format(schema=self.qwc_config_schema))

with db.connect() as conn:
result = conn.execute(sql, {"user": identity.get("username")})

row = result.first()
Expand Down Expand Up @@ -281,19 +291,28 @@ def qwc2_config(self, identity, params):
if self.db_url:
# add custom user info fields
db = db_engine.db_engine(self.db_url)
with db.connect() as conn:

if self.store_config_by_userid:
sql = sql_text("""
SELECT *
FROM {schema}.user_infos ui
JOIN {schema}.users u ON u.id=ui.user_id
FROM "{schema}".user_infos ui
JOIN "{schema}".users u ON u.id=ui.user_id
WHERE u.name=:user;
""".format(schema=self.qwc_config_schema))
else:
sql = sql_text("""
SELECT *
FROM "{schema}".user_infos ui
WHERE ui.username=:user;
""".format(schema=self.qwc_config_schema))

with db.connect() as conn:
result = conn.execute(sql, {"user": identity.get("username")})

row = result.first()
entries = row._asdict() if row else {}

if self.display_user_info_field:
if self.display_user_info_field and self.display_user_info_field in entries:
display_username = entries[self.display_user_info_field]

for field in self.user_info_fields:
Expand Down Expand Up @@ -389,8 +408,7 @@ def set_user_info(self, params, identity):

values["username"] = identity.get("username")

db = db_engine.db_engine(self.db_url)
with db.begin() as conn:
if self.store_config_by_userid:
sql = sql_text("""
WITH "user" AS (
SELECT id FROM "{schema}"."users" WHERE name=:username
Expand All @@ -405,6 +423,22 @@ def set_user_info(self, params, identity):
values_sql = ",".join(values_sql),
schema=self.qwc_config_schema
))
else:
sql = sql_text("""
INSERT INTO "{schema}"."user_infos" ("username", {columns})
VALUES (:username, {values_sql})
ON CONFLICT ("username") DO
UPDATE SET ({columns}) = ROW({values_sql})
RETURNING ({columns})
""".format(
columns = ",".join(columns),
values_sql = ",".join(values_sql),
schema=self.qwc_config_schema
))


db = db_engine.db_engine(self.db_url)
with db.begin() as conn:
result = conn.execute(sql, values)
row = result.one_or_none()
return_values = row._asdict() if row else None
Expand Down