Skip to content

Commit 8cf1210

Browse files
authored
Added Prefix
1 parent 1fa169b commit 8cf1210

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

generateApiKey/__init__.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ async def generateApiKey(
1616
seed: str,
1717
include: str = None,
1818
add_dashes: bool = False,
19+
prefix: str = None
1920
) -> str:
2021
"""
2122
Generate a secure API key based on a secret, seed, and optional parameters.
@@ -24,7 +25,8 @@ async def generateApiKey(
2425
secret: The secret key used for hashing.
2526
seed: A unique identifier used to personalize the key.
2627
include: An optional string to be included in the key generation process.
27-
add_dashes: Whether to add dashes to the generated key for improved readability.
28+
add_dashes: Whether to add dashes to the generated key for improved readability. Default False
29+
prefix: A string prefix for the API key. Followed by a '-'. Default None
2830
2931
Returns:
3032
A unique and secure API key.
@@ -57,22 +59,25 @@ async def generateApiKey(
5759
api_key = hmac.new(
5860
secret.encode(), combined_hash.encode(), hashlib.sha256
5961
).hexdigest()
60-
return str(uuid.uuid5(uuid.NAMESPACE_DNS, api_key))
62+
api_key = str(uuid.uuid5(uuid.NAMESPACE_DNS, api_key))
63+
else:
64+
salt = token_bytes(16)
65+
kdf = PBKDF2HMAC(
66+
algorithm=hashes.SHA256(),
67+
salt=salt,
68+
iterations=pbkdf2_iterations,
69+
length=32,
70+
)
71+
seed = f"{seed}{current_timestamp}{numeric_hash}".encode()
72+
if include:
73+
pos = random.randint(0, len(seed))
74+
seed = seed[:pos] + include.encode() + seed[pos:]
6175

62-
salt = token_bytes(16)
63-
kdf = PBKDF2HMAC(
64-
algorithm=hashes.SHA256(),
65-
salt=salt,
66-
iterations=pbkdf2_iterations,
67-
length=32,
68-
)
69-
seed = f"{seed}{current_timestamp}{numeric_hash}".encode()
70-
if include:
71-
pos = random.randint(0, len(seed))
72-
seed = seed[:pos] + include.encode() + seed[pos:]
76+
key_bytes = kdf.derive(seed)
77+
key_base64 = base64.urlsafe_b64encode(key_bytes).decode()
78+
api_key = re.sub(r"[^a-zA-Z0-9]", "", key_base64)
7379

74-
key_bytes = kdf.derive(seed)
75-
key_base64 = base64.urlsafe_b64encode(key_bytes).decode()
76-
api_key = re.sub(r"[^a-zA-Z0-9]", "", key_base64)
80+
if prefix:
81+
api_key = f"{prefix}-{api_key}"
7782

7883
return api_key

0 commit comments

Comments
 (0)