Skip to content

Commit 5548467

Browse files
Query n files, change key to encrypted_file
1 parent d08a9c6 commit 5548467

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

scripts/encryption_validator/readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Login to AWS account
1515
`pip install requirements.txt`
1616
`python script.py <key> <bucket> <region_name> [prefix]`
1717

18-
- `key` – Required. Must start with `salt`. Example: `salts/salts.txt.1744152738842`
18+
- `encrypted_file` – Required. Must start with `salt`. Example: `salts/encrypted/12_private/salts.txt.1745532777048` (To query multiple files you can use `salts/encrypted/12_private/*`)
1919
- `bucket` – Required. Name of the S3 bucket.
2020
- `region_name` – Required. AWS region of the S3 bucket (e.g. `us-east-1`)
2121
- `prefix` – Optional. S3 path prefix. If provided, it **must end with `/`**.

scripts/encryption_validator/script.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def _decrypt_input_stream(input_stream: IO[bytes], bucket, prefix, region_name)
5353
def salt_compare(key, prefix, bucket, region_name):
5454
s3 = boto3.client('s3', region_name=region_name)
5555
key = f"{prefix}{key}"
56+
print("Key is ", key)
5657
base_path = '/'.join(key.split('/')[:-3])
5758
file_name = key.split('/')[-1:][0]
5859
unencrypted = f'{base_path}/{file_name}'
@@ -63,13 +64,31 @@ def salt_compare(key, prefix, bucket, region_name):
6364
unencrypted = response['Body'].read().decode('utf-8')
6465
return (encrypted==unencrypted)
6566

67+
def _get_most_recent_files(bucket, prefix, key):
68+
s3 = boto3.client("s3")
69+
paginator = s3.get_paginator("list_objects_v2")
70+
page_iterator = paginator.paginate(Bucket=bucket, Prefix=f"{prefix}{key[:-2]}/")
71+
n, all_files = 5 , []
72+
for i, page in enumerate(page_iterator):
73+
if i >= n:
74+
break
75+
all_files.extend(page.get("Contents", []))
76+
recent_files = sorted(all_files, key=lambda x: x["LastModified"], reverse=True)
77+
recent_files = list(map(lambda x: x['Key'], recent_files))
78+
recent_files = list(filter(lambda x: "metadata" not in x, recent_files))
79+
return recent_files[:10]
80+
6681
if __name__ == '__main__':
67-
key = sys.argv[1]
82+
encrypted_file = sys.argv[1]
6883
bucket = sys.argv[2]
6984
region_name = sys.argv[3]
7085
prefix = sys.argv[4] if len(sys.argv) > 4 else ''
7186
if prefix != '' and prefix[-1]!='/':
7287
raise "prefix should terminate with /"
73-
if not key.startswith("salt"):
88+
if not encrypted_file.startswith("salt"):
7489
raise "only salts supported"
75-
print(salt_compare(key=key, prefix=prefix, bucket=bucket, region_name=region_name))
90+
if encrypted_file[-2:] == '/*':
91+
for recent in _get_most_recent_files(bucket=bucket, prefix=prefix, key=encrypted_file):
92+
print(salt_compare(key=recent, prefix=prefix, bucket=bucket, region_name=region_name))
93+
else:
94+
print(salt_compare(key=encrypted_file, prefix=prefix, bucket=bucket, region_name=region_name))

0 commit comments

Comments
 (0)