Skip to content

Commit 0480a4d

Browse files
committed
tmp
1 parent ef999f9 commit 0480a4d

File tree

2 files changed

+54
-103
lines changed

2 files changed

+54
-103
lines changed

common-nix.vars.pkr.hcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
postgres-version = "15.6.1.141"
1+
postgres-version = "15.6.1.141-vault-1"

nix/ext/001-new-vault.patch

Lines changed: 53 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ index 80209a1..0000000
1212
-.cache
1313
-test*
1414
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
15-
index 77209b9..2a88809 100644
15+
index 77209b9..64cf218 100644
1616
--- a/.github/workflows/test.yml
1717
+++ b/.github/workflows/test.yml
1818
@@ -1,12 +1,24 @@
@@ -31,7 +31,7 @@ index 77209b9..2a88809 100644
3131
runs-on: ubuntu-latest
3232
+ strategy:
3333
+ matrix:
34-
+ pg-version: ['13', '14', '15', '16']
34+
+ pg-version: ['13', '14', '15', '16', '17']
3535
+
3636
steps:
3737
- - uses: actions/checkout@v2
@@ -139,13 +139,13 @@ index 8c33ac1..e9f0e08 100644
139139
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
140140
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
141141
diff --git a/Makefile b/Makefile
142-
index 7f66766..d78d401 100644
142+
index 7f66766..af0ef00 100644
143143
--- a/Makefile
144144
+++ b/Makefile
145145
@@ -1,5 +1,25 @@
146146
+PG_CFLAGS = -std=c99 -Werror -Wno-declaration-after-statement
147147
EXTENSION = supabase_vault
148-
+EXTVERSION = 0.3.1
148+
+EXTVERSION = 0.3.0
149149
+
150150
DATA = $(wildcard sql/*--*.sql)
151151
+
@@ -307,7 +307,7 @@ index 0000000..575051e
307307
+(mkAttributes false) // (mkAttributes true)
308308
diff --git a/nix/postgresql/generic.nix b/nix/postgresql/generic.nix
309309
new file mode 100644
310-
index 0000000..ba730c4
310+
index 0000000..54bfdcd
311311
--- /dev/null
312312
+++ b/nix/postgresql/generic.nix
313313
@@ -0,0 +1,311 @@
@@ -509,7 +509,7 @@ index 0000000..ba730c4
509509
+ wrapProgram $out/bin/initdb --prefix PATH ":" ${glibc.bin}/bin
510510
+ '';
511511
+
512-
+ doCheck = !stdenv'.isDarwin;
512+
+ doCheck = false;
513513
+ # autodetection doesn't seem to able to find this, but it's there.
514514
+ checkTarget = "check";
515515
+
@@ -923,7 +923,7 @@ index 4ecd1de..0000000
923923
-docker exec -it $DB_HOST psql -U "$SU" $@
924924
diff --git a/shell.nix b/shell.nix
925925
new file mode 100644
926-
index 0000000..758d40d
926+
index 0000000..e21cb68
927927
--- /dev/null
928928
+++ b/shell.nix
929929
@@ -0,0 +1,36 @@
@@ -947,7 +947,7 @@ index 0000000..758d40d
947947
+ postgresql_14
948948
+ postgresql_15
949949
+ postgresql_16
950-
+ # ourPg.postgresql_17
950+
+ ourPg.postgresql_17
951951
+ ];
952952
+ pgWithExt = { pg }: pg.withPackages (p: [
953953
+ (callPackage ./nix/pgsodium.nix { postgresql = pg; })
@@ -965,10 +965,10 @@ index 0000000..758d40d
965965
+}
966966
diff --git a/sql/supabase_vault--0.2.8--0.3.0.sql b/sql/supabase_vault--0.2.8--0.3.0.sql
967967
new file mode 100644
968-
index 0000000..df6565a
968+
index 0000000..5e4837a
969969
--- /dev/null
970970
+++ b/sql/supabase_vault--0.2.8--0.3.0.sql
971-
@@ -0,0 +1,135 @@
971+
@@ -0,0 +1,148 @@
972972
+CREATE OR REPLACE FUNCTION vault._crypto_aead_det_encrypt(message bytea, additional bytea, key_id bigint, context bytea = 'pgsodium', nonce bytea = NULL)
973973
+RETURNS bytea
974974
+AS 'MODULE_PATHNAME', 'pgsodium_crypto_aead_det_encrypt_by_id'
@@ -984,6 +984,8 @@ index 0000000..df6565a
984984
+AS 'MODULE_PATHNAME', 'pgsodium_crypto_aead_det_noncegen'
985985
+LANGUAGE c IMMUTABLE;
986986
+
987+
+ALTER TABLE vault.secrets OWNER TO current_user;
988+
+
987989
+SECURITY LABEL ON COLUMN vault.secrets.secret IS NULL;
988990
+
989991
+DROP TRIGGER IF EXISTS secrets_encrypt_secret_trigger_secret ON vault.secrets;
@@ -1037,8 +1039,6 @@ index 0000000..df6565a
10371039
+ s.updated_at
10381040
+FROM vault.secrets s;
10391041
+
1040-
+GRANT ALL ON vault.decrypted_secrets TO pgsodium_keyiduser;
1041-
+
10421042
+CREATE OR REPLACE FUNCTION vault.create_secret(
10431043
+ new_secret text,
10441044
+ new_name text = NULL,
@@ -1047,6 +1047,7 @@ index 0000000..df6565a
10471047
+ new_key_id uuid = NULL
10481048
+)
10491049
+RETURNS uuid
1050+
+SECURITY DEFINER
10501051
+LANGUAGE plpgsql
10511052
+SET search_path = ''
10521053
+AS $$
@@ -1082,6 +1083,7 @@ index 0000000..df6565a
10821083
+ new_key_id uuid = NULL
10831084
+)
10841085
+RETURNS void
1086+
+SECURITY DEFINER
10851087
+LANGUAGE plpgsql
10861088
+SET search_path = ''
10871089
+AS $$
@@ -1104,31 +1106,23 @@ index 0000000..df6565a
11041106
+ WHERE s.id = secret_id;
11051107
+END
11061108
+$$;
1107-
diff --git a/sql/supabase_vault--0.2.8.sql b/sql/supabase_vault--0.2.8.sql
1108-
index ee40004..8973fe0 100644
1109-
--- a/sql/supabase_vault--0.2.8.sql
1110-
+++ b/sql/supabase_vault--0.2.8.sql
1111-
@@ -8,7 +8,6 @@ CREATE TABLE vault.secrets (
1112-
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
1113-
updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
1114-
);
1115-
-ALTER TABLE vault.secrets OWNER TO session_user;
1116-
1117-
COMMENT ON TABLE vault.secrets IS 'Table with encrypted `secret` column for storing sensitive information on disk.';
1118-
1119-
diff --git a/sql/supabase_vault--0.3.0--0.3.1.sql b/sql/supabase_vault--0.3.0--0.3.1.sql
1120-
new file mode 100644
1121-
index 0000000..ee25f24
1122-
--- /dev/null
1123-
+++ b/sql/supabase_vault--0.3.0--0.3.1.sql
1124-
@@ -0,0 +1 @@
1125-
+-- no SQL changes in 0.3.1
1109+
+
1110+
+REVOKE ALL ON SCHEMA vault FROM pgsodium_keyiduser;
1111+
+REVOKE ALL ON vault.decrypted_secrets, vault.secrets FROM pgsodium_keyiduser;
1112+
+
1113+
+REVOKE ALL ON FUNCTION
1114+
+ vault._crypto_aead_det_encrypt,
1115+
+ vault._crypto_aead_det_decrypt,
1116+
+ vault._crypto_aead_det_noncegen,
1117+
+ vault.create_secret,
1118+
+ vault.update_secret
1119+
+FROM PUBLIC;
11261120
diff --git a/sql/supabase_vault--0.3.0.sql b/sql/supabase_vault--0.3.0.sql
11271121
new file mode 100644
1128-
index 0000000..af6abe2
1122+
index 0000000..b0e5998
11291123
--- /dev/null
11301124
+++ b/sql/supabase_vault--0.3.0.sql
1131-
@@ -0,0 +1,123 @@
1125+
@@ -0,0 +1,129 @@
11321126
+CREATE OR REPLACE FUNCTION vault._crypto_aead_det_encrypt(message bytea, additional bytea, key_id bigint, context bytea = 'pgsodium', nonce bytea = NULL)
11331127
+RETURNS bytea
11341128
+AS 'MODULE_PATHNAME', 'pgsodium_crypto_aead_det_encrypt_by_id'
@@ -1181,10 +1175,6 @@ index 0000000..af6abe2
11811175
+ s.updated_at
11821176
+FROM vault.secrets s;
11831177
+
1184-
+GRANT ALL ON SCHEMA vault TO pgsodium_keyiduser;
1185-
+GRANT ALL ON TABLE vault.secrets TO pgsodium_keyiduser;
1186-
+GRANT ALL ON vault.decrypted_secrets TO pgsodium_keyiduser;
1187-
+
11881178
+CREATE OR REPLACE FUNCTION vault.create_secret(
11891179
+ new_secret text,
11901180
+ new_name text = NULL,
@@ -1193,6 +1183,7 @@ index 0000000..af6abe2
11931183
+ new_key_id uuid = NULL
11941184
+)
11951185
+RETURNS uuid
1186+
+SECURITY DEFINER
11961187
+LANGUAGE plpgsql
11971188
+SET search_path = ''
11981189
+AS $$
@@ -1228,6 +1219,7 @@ index 0000000..af6abe2
12281219
+ new_key_id uuid = NULL
12291220
+)
12301221
+RETURNS void
1222+
+SECURITY DEFINER
12311223
+LANGUAGE plpgsql
12321224
+SET search_path = ''
12331225
+AS $$
@@ -1251,6 +1243,14 @@ index 0000000..af6abe2
12511243
+END
12521244
+$$;
12531245
+
1246+
+REVOKE ALL ON FUNCTION
1247+
+ vault._crypto_aead_det_encrypt,
1248+
+ vault._crypto_aead_det_decrypt,
1249+
+ vault._crypto_aead_det_noncegen,
1250+
+ vault.create_secret,
1251+
+ vault.update_secret
1252+
+FROM PUBLIC;
1253+
+
12541254
+SELECT pg_catalog.pg_extension_config_dump('vault.secrets', '');
12551255
diff --git a/src/crypto_aead_det_xchacha20.c b/src/crypto_aead_det_xchacha20.c
12561256
new file mode 100644
@@ -1441,7 +1441,7 @@ index 0000000..91eca9a
14411441
+#endif
14421442
diff --git a/src/pgsodium.c b/src/pgsodium.c
14431443
new file mode 100644
1444-
index 0000000..563c55f
1444+
index 0000000..d337fff
14451445
--- /dev/null
14461446
+++ b/src/pgsodium.c
14471447
@@ -0,0 +1,144 @@
@@ -1559,7 +1559,7 @@ index 0000000..563c55f
15591559
+ {
15601560
+ nonce = NULL;
15611561
+ }
1562-
+ ERRORIF (VARSIZE_ANY_EXHDR (ciphertext) <
1562+
+ ERRORIF (VARSIZE_ANY_EXHDR (ciphertext) <=
15631563
+ crypto_aead_det_xchacha20_ABYTES, "%s: invalid message");
15641564
+ result_len =
15651565
+ VARSIZE_ANY_EXHDR (ciphertext) - crypto_aead_det_xchacha20_ABYTES;
@@ -1999,10 +1999,10 @@ index e6221c2..0000000
19991999
-select * from finish();
20002000
diff --git a/test/expected/test.out b/test/expected/test.out
20012001
new file mode 100644
2002-
index 0000000..1d69ec5
2002+
index 0000000..84c4c15
20032003
--- /dev/null
20042004
+++ b/test/expected/test.out
2005-
@@ -0,0 +1,110 @@
2005+
@@ -0,0 +1,86 @@
20062006
+select no_plan();
20072007
+ no_plan
20082008
+---------
@@ -2083,63 +2083,36 @@ index 0000000..1d69ec5
20832083
+ ok 5 - bob can query an updated secret
20842084
+(1 row)
20852085
+
2086-
+truncate vault.secrets;
2087-
+reset role;
2088-
+do $$
2089-
+begin
2090-
+ perform vault.create_secret(
2091-
+ new_secret := '',
2092-
+ new_name := 'empty_secret'
2093-
+ );
2094-
+end
2095-
+$$;
2096-
+select results_eq(
2097-
+ $test$
2098-
+ select decrypted_secret collate "default"
2099-
+ from vault.decrypted_secrets
2100-
+ where name = 'empty_secret'
2101-
+ $test$,
2102-
+ $results$values ('')$results$,
2103-
+ 'secret can be an empty string'
2104-
+);
2105-
+ results_eq
2106-
+--------------------------------------
2107-
+ ok 6 - secret can be an empty string
2108-
+(1 row)
2109-
+
21102086
+select * from finish();
21112087
+ finish
21122088
+--------
2113-
+ 1..6
2089+
+ 1..5
21142090
+(1 row)
21152091
+
21162092
diff --git a/test/fixtures.sql b/test/fixtures.sql
21172093
new file mode 100644
2118-
index 0000000..b323d22
2094+
index 0000000..d4c00c8
21192095
--- /dev/null
21202096
+++ b/test/fixtures.sql
2121-
@@ -0,0 +1,15 @@
2097+
@@ -0,0 +1,12 @@
21222098
+CREATE ROLE bob login password 'bob';
21232099
+
2124-
+CREATE ROLE pgsodium_keyiduser WITH
2125-
+ NOLOGIN
2126-
+ NOSUPERUSER
2127-
+ NOCREATEDB
2128-
+ NOCREATEROLE
2129-
+ INHERIT
2130-
+ NOREPLICATION
2131-
+ CONNECTION LIMIT -1;
2132-
+
21332100
+CREATE EXTENSION IF NOT EXISTS pgtap;
21342101
+CREATE EXTENSION supabase_vault CASCADE;
21352102
+
2136-
+GRANT pgsodium_keyiduser TO bob;
2103+
+GRANT USAGE ON SCHEMA vault TO bob WITH GRANT OPTION;
2104+
+GRANT SELECT ON vault.secrets, vault.decrypted_secrets TO bob WITH GRANT OPTION;
2105+
+GRANT EXECUTE ON FUNCTION
2106+
+ vault.create_secret,
2107+
+ vault.update_secret,
2108+
+ vault._crypto_aead_det_decrypt
2109+
+TO bob WITH GRANT OPTION;
21372110
diff --git a/test/sql/test.sql b/test/sql/test.sql
21382111
new file mode 100644
2139-
index 0000000..69dbccd
2112+
index 0000000..064e382
21402113
--- /dev/null
21412114
+++ b/test/sql/test.sql
2142-
@@ -0,0 +1,84 @@
2115+
@@ -0,0 +1,62 @@
21432116
+select no_plan();
21442117
+
21452118
+do $$
@@ -2201,26 +2174,4 @@ index 0000000..69dbccd
22012174
+ $results$values ('fooz', 'barz', 'bazz')$results$,
22022175
+ 'bob can query an updated secret');
22032176
+
2204-
+truncate vault.secrets;
2205-
+reset role;
2206-
+
2207-
+do $$
2208-
+begin
2209-
+ perform vault.create_secret(
2210-
+ new_secret := '',
2211-
+ new_name := 'empty_secret'
2212-
+ );
2213-
+end
2214-
+$$;
2215-
+
2216-
+select results_eq(
2217-
+ $test$
2218-
+ select decrypted_secret collate "default"
2219-
+ from vault.decrypted_secrets
2220-
+ where name = 'empty_secret'
2221-
+ $test$,
2222-
+ $results$values ('')$results$,
2223-
+ 'secret can be an empty string'
2224-
+);
2225-
+
22262177
+select * from finish();

0 commit comments

Comments
 (0)