Skip to content

Commit aac516b

Browse files
committed
fix: add staging and prod certs for ssl
1 parent 2745674 commit aac516b

5 files changed

Lines changed: 66 additions & 3 deletions

File tree

internal/db/diff/migra.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/docker/docker/api/types/network"
1111
"github.com/go-errors/errors"
1212
"github.com/spf13/viper"
13+
"github.com/supabase/cli/internal/gen/types"
1314
"github.com/supabase/cli/internal/utils"
1415
"github.com/supabase/cli/pkg/config"
1516
)
@@ -20,6 +21,11 @@ var (
2021
//go:embed templates/migra.ts
2122
diffSchemaTypeScript string
2223

24+
//go:embed templates/staging-ca-2021.crt
25+
caStaging string
26+
//go:embed templates/prod-ca-2021.crt
27+
caProd string
28+
2329
managedSchemas = []string{
2430
// Local development
2531
"_analytics",
@@ -82,6 +88,13 @@ func DiffSchemaMigraBash(ctx context.Context, source, target string, schema []st
8288

8389
func DiffSchemaMigra(ctx context.Context, source, target string, schema []string) (string, error) {
8490
env := []string{"SOURCE=" + source, "TARGET=" + target}
91+
// node-postgres does not support sslmode=prefer
92+
if require, err := types.IsRequireSSL(ctx, target); err != nil {
93+
return "", err
94+
} else if require {
95+
rootCA := caStaging + caProd
96+
env = append(env, "SSL_CA="+rootCA)
97+
}
8598
if len(schema) > 0 {
8699
env = append(env, "INCLUDED_SCHEMAS="+strings.Join(schema, ","))
87100
} else {

internal/db/diff/templates/migra.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { createClient } from "npm:@pgkit/client";
22
import { Migration } from "npm:@pgkit/migra";
33

4+
// Avoids error on self-signed certificate
5+
const ca = Deno.env.get("SSL_CA");
46
const clientBase = createClient(Deno.env.get("SOURCE"));
5-
const clientHead = createClient(Deno.env.get("TARGET"));
7+
const clientHead = createClient(Deno.env.get("TARGET"), {
8+
pgpOptions: { connect: { ssl: ca && { ca } } },
9+
});
610
const includedSchemas = Deno.env.get("INCLUDED_SCHEMAS")?.split(",") ?? [];
711
const excludedSchemas = Deno.env.get("EXCLUDED_SCHEMAS")?.split(",") ?? [];
812

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDxDCCAqygAwIBAgIUbLxMod62P2ktCiAkxnKJwtE9VPYwDQYJKoZIhvcNAQEL
3+
BQAwazELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0RlbHdhcmUxEzARBgNVBAcMCk5l
4+
dyBDYXN0bGUxFTATBgNVBAoMDFN1cGFiYXNlIEluYzEeMBwGA1UEAwwVU3VwYWJh
5+
c2UgUm9vdCAyMDIxIENBMB4XDTIxMDQyODEwNTY1M1oXDTMxMDQyNjEwNTY1M1ow
6+
azELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0RlbHdhcmUxEzARBgNVBAcMCk5ldyBD
7+
YXN0bGUxFTATBgNVBAoMDFN1cGFiYXNlIEluYzEeMBwGA1UEAwwVU3VwYWJhc2Ug
8+
Um9vdCAyMDIxIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQXW
9+
QyHOB+qR2GJobCq/CBmQ40G0oDmCC3mzVnn8sv4XNeWtE5XcEL0uVih7Jo4Dkx1Q
10+
DmGHBH1zDfgs2qXiLb6xpw/CKQPypZW1JssOTMIfQppNQ87K75Ya0p25Y3ePS2t2
11+
GtvHxNjUV6kjOZjEn2yWEcBdpOVCUYBVFBNMB4YBHkNRDa/+S4uywAoaTWnCJLUi
12+
cvTlHmMw6xSQQn1UfRQHk50DMCEJ7Cy1RxrZJrkXXRP3LqQL2ijJ6F4yMfh+Gyb4
13+
O4XajoVj/+R4GwywKYrrS8PrSNtwxr5StlQO8zIQUSMiq26wM8mgELFlS/32Uclt
14+
NaQ1xBRizkzpZct9DwIDAQABo2AwXjALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFKjX
15+
uXY32CztkhImng4yJNUtaUYsMB8GA1UdIwQYMBaAFKjXuXY32CztkhImng4yJNUt
16+
aUYsMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAB8spzNn+4VU
17+
tVxbdMaX+39Z50sc7uATmus16jmmHjhIHz+l/9GlJ5KqAMOx26mPZgfzG7oneL2b
18+
VW+WgYUkTT3XEPFWnTp2RJwQao8/tYPXWEJDc0WVQHrpmnWOFKU/d3MqBgBm5y+6
19+
jB81TU/RG2rVerPDWP+1MMcNNy0491CTL5XQZ7JfDJJ9CCmXSdtTl4uUQnSuv/Qx
20+
Cea13BX2ZgJc7Au30vihLhub52De4P/4gonKsNHYdbWjg7OWKwNv/zitGDVDB9Y2
21+
CMTyZKG3XEu5Ghl1LEnI3QmEKsqaCLv12BnVjbkSeZsMnevJPs1Ye6TjjJwdik5P
22+
o/bKiIz+Fq8=
23+
-----END CERTIFICATE-----
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIID1DCCArygAwIBAgIUbYRdq/8/uNq8G9stMCdOFSBgA2MwDQYJKoZIhvcNAQEL
3+
BQAwczELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0RlbHdhcmUxEzARBgNVBAcMCk5l
4+
dyBDYXN0bGUxFTATBgNVBAoMDFN1cGFiYXNlIEluYzEmMCQGA1UEAwwdU3VwYWJh
5+
c2UgU3RhZ2luZyBSb290IDIwMjEgQ0EwHhcNMjEwNDI4MTAzNjEzWhcNMzEwNDI2
6+
MTAzNjEzWjBzMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRGVsd2FyZTETMBEGA1UE
7+
BwwKTmV3IENhc3RsZTEVMBMGA1UECgwMU3VwYWJhc2UgSW5jMSYwJAYDVQQDDB1T
8+
dXBhYmFzZSBTdGFnaW5nIFJvb3QgMjAyMSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
9+
ggEPADCCAQoCggEBAN0AKRE8a56O8LaZxiOAcHFUFnwiKUvPoXPq26Ifw+Nv+7zg
10+
N2V5WnMZbbw24q61Os60ZUn0XmbVtuIeJ+stPHsO7qxxuL+bmPR+qU5tkDrIOyEe
11+
YD/2u8/q6ssVv42k4XcXbhM6RVz7CkCDY0TiBm1bMtRZso3xB6E9wAjxDf43XfV5
12+
PAGs3JI+Zo/vyqCDlN0hHOrB/aBl01JXqQWI84Gia5ooucq4SjA1CyawBcQ2IAvG
13+
rXuy1BouY+xM3zRuNvtfFP6rb5Mta+jCYEMh1AZ8yP8sYUWAyhxX6k9EbOb009wQ
14+
aZljbUCh/UglGWuBxdzePavx+zPjzWXB1NyVkpkCAwEAAaNgMF4wCwYDVR0PBAQD
15+
AgEGMB0GA1UdDgQWBBQFx+PHLf27iIo/PMfIfGqXF7Zb+DAfBgNVHSMEGDAWgBQF
16+
x+PHLf27iIo/PMfIfGqXF7Zb+DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
17+
CwUAA4IBAQB/xIiz5dDqzGXjqYqXZYx4iSfSxsVayeOPDMfmaiCfSMJEUG4cUiwG
18+
OvMPGztaUEYeip5SCvSKuAAjVkXyP7ahKR7t7lZ9mErVXyxSZoVLbOd578CuYiZk
19+
OgT17UjPv66WMzEKEr8wGpomTYWWfEkuqt8ENdiM1Z4LNFahdKj36+jm6/a+9R8K
20+
25VIL68DTaQpBxFWG6ixC1HRMHJ12lDhKsshIi099BVpkGibESlxPrQOdKKqBB/J
21+
vIX+/Hb+mS4H5zYMeK2wX0onp+GBcD6X9L1UJuXMVd+BRan8RFidXL5s3++xXjQq
22+
Nzbc6lnA69urKffvcT07YwMsY/OmHzVa
23+
-----END CERTIFICATE-----

internal/gen/types/types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func Run(ctx context.Context, projectId string, dbConfig pgconn.Config, lang str
7878

7979
fmt.Fprintln(os.Stderr, "Connecting to", dbConfig.Host, dbConfig.Port)
8080
escaped := utils.ToPostgresURL(dbConfig)
81-
if require, err := isRequireSSL(ctx, originalURL, options...); err != nil {
81+
if require, err := IsRequireSSL(ctx, originalURL, options...); err != nil {
8282
return err
8383
} else if require {
8484
// node-postgres does not support sslmode=prefer
@@ -106,7 +106,7 @@ func Run(ctx context.Context, projectId string, dbConfig pgconn.Config, lang str
106106
)
107107
}
108108

109-
func isRequireSSL(ctx context.Context, dbUrl string, options ...func(*pgx.ConnConfig)) (bool, error) {
109+
func IsRequireSSL(ctx context.Context, dbUrl string, options ...func(*pgx.ConnConfig)) (bool, error) {
110110
conn, err := utils.ConnectByUrl(ctx, dbUrl+"&sslmode=require", options...)
111111
if err != nil {
112112
if strings.HasSuffix(err.Error(), "(server refused TLS connection)") {

0 commit comments

Comments
 (0)