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