Skip to content

Commit 3265bba

Browse files
authored
release: 2023-06-01 (#407)
1 parent 04bbf15 commit 3265bba

File tree

6 files changed

+55
-19
lines changed

6 files changed

+55
-19
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ CARTO Analytics Toolbox Core.
44

55
All notable commits to this project will be documented in this file.
66

7+
## 2023-06-01
8+
9+
- fix(tools|installer): verify lds config when using cat-installer (#406)
10+
711
## 2023-05-05
812

913
- feat(sf|h3): add H3_CENTER function (#395)

clouds/postgres/common/list_libraries.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ if (diff.length) {
2323
/\.github\/workflows\/postgres\.yml/,
2424
/clouds\/postgres\/common\/.+/,
2525
/clouds\/postgres\/libraries\/.+/,
26-
/clouds\/postgres\/.*Makefile/
26+
/clouds\/postgres\/.*Makefile/,
27+
/clouds\/postgres\/version/
2728
];
2829
const patternModulesSql = /clouds\/postgres\/modules\/sql\/([^\s]*?)\//g;
2930
const patternModulesTest = /clouds\/postgres\/modules\/test\/([^\s]*?)\//g;

clouds/snowflake/common/test-utils.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,21 @@ function sortByKeyAndRound (list, orderKey, roundedKeys, precision=10) {
7171
return list;
7272
}
7373

74+
async function existsTable (table) {
75+
try {
76+
const query = `SELECT * FROM ${table} LIMIT 0`;
77+
await runQuery(query);
78+
return true;
79+
} catch {
80+
return false;
81+
}
82+
}
83+
7484
module.exports = {
7585
runQuery,
7686
createTable,
7787
deleteTable,
7888
sortByKey,
79-
sortByKeyAndRound
89+
sortByKeyAndRound,
90+
existsTable
8091
}

clouds/snowflake/modules/sql/h3/H3_RESOLUTION.sql

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
-- Copyright (C) 2023 CARTO
33
----------------------------
44

5-
CREATE OR REPLACE FUNCTION @@SF_SCHEMA@@.H3_RESOLUTION
5+
CREATE OR REPLACE SECURE FUNCTION @@SF_SCHEMA@@.H3_RESOLUTION
66
(
77
h3 STRING
88
)

tools/installer/setup.cfg

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = cat-installer
3-
version = 0.2.0
3+
version = 0.2.1
44
description = Python script to install the CARTO Analytics Toolbox in Redshift and Postgres
55
long_description = file: README.md
66
long_description_content_type = text/markdown
@@ -33,6 +33,8 @@ install_requires =
3333
sqlparse>0.4
3434
redshift-connector>2.0
3535
psycopg2-binary>=2.9.1
36+
pyjwt==2.7.0
37+
validator-collection==1.5.0
3638
zip_safe = False
3739
[options.entry_points]
3840
console_scripts =

tools/installer/src/__init__.py

+33-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import click
66
import zipfile
77
import redshift_connector
8+
import jwt
9+
from validator_collection import checkers
810

911
from tqdm import trange
1012
from sqlparse import split
@@ -77,6 +79,34 @@ def run_sql(sql, config):
7779
print(notice.strip())
7880

7981

82+
def validate_lds_config(lds_config):
83+
pattern = r'^(lds-function-asia-northeast1|lds-function-australia-southeast1|lds-function-europe-west1|lds-function-us-east1)$' # noqa: E501
84+
if not validate_str(lds_config.get('lambda'), pattern):
85+
exit('incorrect configuration: missing or invalid lds.lambda')
86+
87+
pattern = r'^arn:aws:iam::[0-9]+:role/CartoFunctionsRedshiftRole,arn:aws:iam::000955892807:role/CartoFunctionsRole$' # noqa: E501
88+
if not validate_str(lds_config.get('roles'), pattern):
89+
exit('incorrect configuration: missing or invalid lds.roles')
90+
91+
if not validate_str(lds_config.get('api_base_url')):
92+
exit('incorrect configuration: missing lds.api_base_url')
93+
94+
if not checkers.is_url(lds_config.get('api_base_url')):
95+
exit('incorrect configuration: invalid lds.api_base_url')
96+
97+
token = lds_config.get('token')
98+
if not validate_str(token):
99+
exit('incorrect configuration: missing lds.token')
100+
algorithm = jwt.get_unverified_header(token).get('alg')
101+
if not algorithm:
102+
exit('incorrect configuration: invalid lds.token')
103+
jwt_payload = jwt.decode(
104+
token, algorithms=[algorithm], options={'verify_signature': False}
105+
)
106+
if not jwt_payload.get('a') or not jwt_payload.get('jti'):
107+
exit('incorrect configuration: invalid lds.token')
108+
109+
80110
def validate_config(config):
81111
connection = config.get('connection')
82112

@@ -107,21 +137,9 @@ def validate_config(config):
107137
if not validate_str(connection.get('password')):
108138
exit('incorrect configuration: missing connection.password')
109139

110-
lds = config.get('lds')
111-
if cloud == 'redshift' and lds is not None:
112-
pattern = r'^(lds-function-asia-northeast1|lds-function-australia-southeast1|lds-function-europe-west1|lds-function-us-east1)$' # noqa: E501
113-
if not validate_str(lds.get('lambda'), pattern):
114-
exit('incorrect configuration: missing or invalid lds.lambda')
115-
116-
pattern = r'^arn:aws:iam::[0-9]+:role/CartoFunctionsRedshiftRole,arn:aws:iam::000955892807:role/CartoFunctionsRole$' # noqa: E501
117-
if not validate_str(lds.get('roles'), pattern):
118-
exit('incorrect configuration: missing or invalid lds.roles')
119-
120-
if not validate_str(lds.get('api_base_url')):
121-
exit('incorrect configuration: missing lds.api_base_url')
122-
123-
if not validate_str(lds.get('token')):
124-
exit('incorrect configuration: missing lds.token')
140+
lds_config = config.get('lds')
141+
if cloud == 'redshift' and lds_config is not None:
142+
validate_lds_config(lds_config)
125143

126144

127145
def validate_str(string, pattern=None):

0 commit comments

Comments
 (0)