52 lines
1.1 KiB
PL/PgSQL
52 lines
1.1 KiB
PL/PgSQL
CREATE TABLE IF NOT EXISTS "hectic"."secret" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"key" TEXT UNIQUE NOT NULL,
|
|
"value" TEXT NOT NULL
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION "hectic"."load_secrets_from_env"(env_content TEXT)
|
|
RETURNS void
|
|
LANGUAGE plpgsql AS $fn$
|
|
DECLARE
|
|
line TEXT;
|
|
k TEXT;
|
|
v TEXT;
|
|
BEGIN
|
|
TRUNCATE TABLE "hectic"."secret";
|
|
|
|
FOR line IN
|
|
SELECT regexp_split_to_table(env_content, E'\n')
|
|
LOOP
|
|
line := btrim(line);
|
|
|
|
IF line = '' OR line LIKE '#%' THEN
|
|
CONTINUE;
|
|
END IF;
|
|
|
|
k := split_part(line, '=', 1);
|
|
v := substring(line FROM position('=' IN line) + 1);
|
|
|
|
k := btrim(k);
|
|
v := btrim(v);
|
|
|
|
IF v ~ '^".*"$' OR v ~ '^''.*''$' THEN
|
|
v := substring(v FROM 2 FOR char_length(v) - 2);
|
|
END IF;
|
|
|
|
INSERT INTO "hectic"."secret" ("key", "value") VALUES (k, v);
|
|
END LOOP;
|
|
END
|
|
$fn$;
|
|
|
|
CREATE OR REPLACE FUNCTION "hectic"."get_secret"(k TEXT)
|
|
RETURNS TEXT
|
|
LANGUAGE plpgsql AS $fn$
|
|
BEGIN
|
|
RETURN (
|
|
SELECT "value"
|
|
FROM "hectic"."secret"
|
|
WHERE "key" = k
|
|
);
|
|
END
|
|
$fn$;
|