diff --git a/APIKey.py b/APIKey.py index 0a36c3f..f7a6e0f 100644 --- a/APIKey.py +++ b/APIKey.py @@ -26,3 +26,4 @@ class Provider(Enum): OPENAI = 1, ANTHROPIC = 2 AI21 = 3 + PALM = 4 diff --git a/Palm.py b/Palm.py new file mode 100644 index 0000000..6edc3c2 --- /dev/null +++ b/Palm.py @@ -0,0 +1,17 @@ +import requests +import APIKey + + +def check_palm(key: APIKey): + response = requests.get(f"https://generativelanguage.googleapis.com/v1beta2/models?key={key.api_key}") + if response.status_code != 200: + return + return True + + +def pretty_print_palm_keys(keys): + print('-' * 90) + print(f'Validated {len(keys)} PaLM keys:') + for key in keys: + print(f'{key.api_key}') + print(f'\n--- Total Valid PaLM Keys: {len(keys)} ---\n') diff --git a/main.py b/main.py index 4afdbe1..c44c04c 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,8 @@ from Anthropic import check_anthropic, pretty_print_anthropic_keys from Logger import Logger from OpenAI import get_oai_model, get_oai_key_attribs, get_oai_org, pretty_print_oai_keys from AI21 import check_ai21, pretty_print_ai21_keys +from Palm import check_palm, pretty_print_palm_keys + from APIKey import APIKey, Provider from concurrent.futures import ThreadPoolExecutor, as_completed import sys @@ -11,7 +13,7 @@ import re api_keys = set() -print("Enter API keys (OpenAI/Anthropic/AI21) one per line. Press Enter on a blank line to start validation") +print("Enter API keys (OpenAI/Anthropic/AI21/PaLM) one per line. Press Enter on a blank line to start validation") inputted_keys = set() while True: @@ -55,10 +57,16 @@ def validate_ai21(key: APIKey): api_keys.add(key) +def validate_palm(key: APIKey): + if check_palm(key) is None: + return + api_keys.add(key) + + oai_regex = re.compile('(sk-[A-Za-z0-9]{20}T3BlbkFJ[A-Za-z0-9]{20})') anthropic_regex = re.compile(r'sk-ant-api03-[A-Za-z0-9\-_]{93}AA') ai21_regex = re.compile('[A-Za-z0-9]{32}') - +palm_regex = re.compile(r'AIzaSy[A-Za-z0-9\-_]{33}') executor = ThreadPoolExecutor(max_workers=100) @@ -71,6 +79,12 @@ def validate_keys(): continue key_obj = APIKey(Provider.ANTHROPIC, key) futures.append(executor.submit(validate_anthropic, key_obj, 20)) + elif "AIzaSy" in key[:6]: + match = palm_regex.match(key) + if not match: + continue + key_obj = APIKey(Provider.PALM, key) + futures.append(executor.submit(validate_palm, key_obj)) elif "sk-" in key: match = oai_regex.match(key) if not match: @@ -89,11 +103,12 @@ def validate_keys(): futures.clear() -def get_invalid_keys(valid_oai_keys, valid_anthropic_keys, valid_ai21_keys): +def get_invalid_keys(valid_oai_keys, valid_anthropic_keys, valid_ai21_keys, valid_palm_keys): valid_oai_keys_set = set([key.api_key for key in valid_oai_keys]) valid_anthropic_keys_set = set([key.api_key for key in valid_anthropic_keys]) valid_ai21_keys_set = set([key.api_key for key in valid_ai21_keys]) - invalid_keys = inputted_keys - valid_oai_keys_set - valid_anthropic_keys_set - valid_ai21_keys_set + valid_palm_keys_set = set([key.api_key for key in valid_palm_keys]) + invalid_keys = inputted_keys - valid_oai_keys_set - valid_anthropic_keys_set - valid_ai21_keys_set - valid_palm_keys_set if len(invalid_keys) < 1: return print('\nInvalid Keys:') @@ -106,6 +121,7 @@ def output_keys(): valid_oai_keys = [] valid_anthropic_keys = [] valid_ai21_keys = [] + valid_palm_keys = [] for key in api_keys: if key.provider == Provider.OPENAI: valid_oai_keys.append(key) @@ -113,13 +129,15 @@ def output_keys(): valid_anthropic_keys.append(key) elif key.provider == Provider.AI21: valid_ai21_keys.append(key) + elif key.provider == Provider.PALM: + valid_palm_keys.append(key) output_filename = "key_snapshots.txt" sys.stdout = Logger(output_filename) print("#" * 90) print(f"Key snapshot from {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("#" * 90) print(f'\n--- Checked {len(inputted_keys)} keys | {len(inputted_keys) - len(api_keys)} were invalid ---') - get_invalid_keys(valid_oai_keys, valid_anthropic_keys, valid_ai21_keys) # just for completeness’s sake + get_invalid_keys(valid_oai_keys, valid_anthropic_keys, valid_ai21_keys, valid_palm_keys) print() if valid_oai_keys: pretty_print_oai_keys(valid_oai_keys) @@ -127,6 +145,8 @@ def output_keys(): pretty_print_anthropic_keys(valid_anthropic_keys) if valid_ai21_keys: pretty_print_ai21_keys(valid_ai21_keys) + if valid_palm_keys: + pretty_print_palm_keys(valid_palm_keys) sys.stdout.file.close()