Skip to content

Commit 96e344e

Browse files
committed
update based on new approach
1 parent 74754b2 commit 96e344e

File tree

2 files changed

+13
-23
lines changed

2 files changed

+13
-23
lines changed

src/apify/_consts.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
EVENT_LISTENERS_TIMEOUT = timedelta(seconds=5)
77

88
BASE64_REGEXP = '[-A-Za-z0-9+/]*={0,3}'
9-
ENCRYPTED_INPUT_VALUE_PREFIX = 'ENCRYPTED_VALUE'
10-
ENCRYPTED_INPUT_VALUE_REGEXP = re.compile(f'^{ENCRYPTED_INPUT_VALUE_PREFIX}:({BASE64_REGEXP}):({BASE64_REGEXP})$')
9+
ENCRYPTED_STRING_VALUE_PREFIX = 'ENCRYPTED_VALUE'
10+
ENCRYPTED_JSON_VALUE_PREFIX = 'ENCRYPTED_JSON'
11+
ENCRYPTED_INPUT_VALUE_REGEXP = re.compile(f'^({ENCRYPTED_STRING_VALUE_PREFIX}|{ENCRYPTED_JSON_VALUE_PREFIX}):(?:({BASE64_REGEXP}):)?({BASE64_REGEXP}):({BASE64_REGEXP})$')

src/apify/_crypto.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from apify_shared.utils import ignore_docs
1616
from crawlee._utils.crypto import crypto_random_object_id
1717

18-
from apify._consts import ENCRYPTED_INPUT_VALUE_REGEXP
18+
from apify._consts import ENCRYPTED_INPUT_VALUE_REGEXP, ENCRYPTED_STRING_VALUE_PREFIX, ENCRYPTED_JSON_VALUE_PREFIX
1919

2020
ENCRYPTION_KEY_LENGTH = 32
2121
ENCRYPTION_IV_LENGTH = 16
@@ -148,30 +148,19 @@ def decrypt_input_secrets(private_key: rsa.RSAPrivateKey, input_data: Any) -> An
148148
if isinstance(value, str):
149149
match = ENCRYPTED_INPUT_VALUE_REGEXP.fullmatch(value)
150150
if match:
151-
encrypted_password = match.group(1)
152-
encrypted_value = match.group(2)
153-
input_data[key] = private_decrypt(
151+
prefix = match.group(1)
152+
encrypted_password = match.group(3)
153+
encrypted_value = match.group(4)
154+
decrypted_value = private_decrypt(
154155
encrypted_password,
155156
encrypted_value,
156157
private_key=private_key,
157158
)
158-
# TODO reuse the decryption logic for string and objects
159-
elif isinstance(value, dict) and isinstance(value.get("secret"), str):
160-
match = ENCRYPTED_INPUT_VALUE_REGEXP.fullmatch(value["secret"])
161-
if match:
162-
encrypted_password = match.group(1)
163-
encrypted_value = match.group(2)
164-
try:
165-
decrypted_json_str = private_decrypt(
166-
encrypted_password,
167-
encrypted_value,
168-
private_key=private_key,
169-
)
170-
input_data[key] = json.loads(decrypted_json_str)
171-
except Exception as err:
172-
raise ValueError(
173-
f'The input field "{key}" could not be parsed as JSON after decryption: {err}'
174-
)
159+
160+
if prefix == ENCRYPTED_STRING_VALUE_PREFIX:
161+
input_data[key] = decrypted_value
162+
elif prefix == ENCRYPTED_JSON_VALUE_PREFIX:
163+
input_data[key] = json.loads(decrypted_value)
175164

176165
return input_data
177166

0 commit comments

Comments
 (0)