From 2a4ecd4850c5e2cff7560002756a4b681dbcac3a Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Wed, 20 Feb 2019 10:38:00 +0100 Subject: [PATCH] Add CDB_Username() function --- scripts-available/CDB_Username.sql | 13 +++++++++++++ .../{CDB_Conf.sql => 910-CDB_Conf.sql} | 0 scripts-enabled/920-CDB_Username.sql | 1 + test/CDB_Username.sql | 17 +++++++++++++++++ test/CDB_Username_expect | 3 +++ 5 files changed, 34 insertions(+) create mode 100644 scripts-available/CDB_Username.sql rename scripts-enabled/{CDB_Conf.sql => 910-CDB_Conf.sql} (100%) create mode 120000 scripts-enabled/920-CDB_Username.sql create mode 100644 test/CDB_Username.sql create mode 100644 test/CDB_Username_expect diff --git a/scripts-available/CDB_Username.sql b/scripts-available/CDB_Username.sql new file mode 100644 index 0000000..9a747ed --- /dev/null +++ b/scripts-available/CDB_Username.sql @@ -0,0 +1,13 @@ +-- Function returning the username of the provided user +CREATE OR REPLACE FUNCTION _CDB_Username(pg_user TEXT) +RETURNS text +AS $$ + SELECT CDB_Conf_GetConf(CONCAT('api_keys_', pg_user))->>'username'; +$$ LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE SECURITY DEFINER; + +-- Function returning the username of the current user +CREATE OR REPLACE FUNCTION CDB_Username() +RETURNS text +AS $$ + SELECT _CDB_Username(current_user); +$$ LANGUAGE SQL STABLE PARALLEL SAFE; diff --git a/scripts-enabled/CDB_Conf.sql b/scripts-enabled/910-CDB_Conf.sql similarity index 100% rename from scripts-enabled/CDB_Conf.sql rename to scripts-enabled/910-CDB_Conf.sql diff --git a/scripts-enabled/920-CDB_Username.sql b/scripts-enabled/920-CDB_Username.sql new file mode 120000 index 0000000..8c0abca --- /dev/null +++ b/scripts-enabled/920-CDB_Username.sql @@ -0,0 +1 @@ +../scripts-available/CDB_Username.sql \ No newline at end of file diff --git a/test/CDB_Username.sql b/test/CDB_Username.sql new file mode 100644 index 0000000..795f689 --- /dev/null +++ b/test/CDB_Username.sql @@ -0,0 +1,17 @@ +SELECT current_user; -- postgres +SELECT CDB_Username(); -- (NULL) + +-- Connect with admin +\set QUIET on +\o log/test.log +SELECT current_database() AS current_database; +\gset +SELECT SUBSTRING (:'current_database', 19, 36) AS user_id; +\gset +SELECT rolname AS admin_user FROM pg_roles where rolname LIKE ('%' || :'user_id'); +\gset +\c :current_database :admin_user +\o +\set QUIET off + +SELECT CDB_Username(); -- admin \ No newline at end of file diff --git a/test/CDB_Username_expect b/test/CDB_Username_expect new file mode 100644 index 0000000..5336c89 --- /dev/null +++ b/test/CDB_Username_expect @@ -0,0 +1,3 @@ +postgres + +admin