Add env_pro command modules
This commit is contained in:
65
app/env_pro/commands/encrypt_cmds.py
Normal file
65
app/env_pro/commands/encrypt_cmds.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
"""Encryption commands for env-pro."""
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def generate():
|
||||||
|
"""Generate a new encryption key."""
|
||||||
|
from env_pro.core.encryption import generate_key, store_key_in_keyring
|
||||||
|
|
||||||
|
key = generate_key()
|
||||||
|
store_key_in_keyring(key)
|
||||||
|
click.echo("Generated new encryption key and stored in keyring")
|
||||||
|
click.echo("Keep this key safe - it's stored in your system keyring")
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def rotate():
|
||||||
|
"""Rotate (regenerate) the encryption key."""
|
||||||
|
from env_pro.core.encryption import (
|
||||||
|
generate_key, store_key_in_keyring,
|
||||||
|
get_key_from_keyring, encrypt_value
|
||||||
|
)
|
||||||
|
from env_pro.core.profile import get_active_profile, get_profile_vars, set_profile_var
|
||||||
|
|
||||||
|
old_key = get_key_from_keyring()
|
||||||
|
if old_key is None:
|
||||||
|
click.echo("No existing key found. Generating new key.")
|
||||||
|
generate()
|
||||||
|
return
|
||||||
|
|
||||||
|
new_key = generate_key()
|
||||||
|
store_key_in_keyring(new_key)
|
||||||
|
|
||||||
|
profile = get_active_profile() or "default"
|
||||||
|
vars = get_profile_vars(profile)
|
||||||
|
|
||||||
|
reencrypted = 0
|
||||||
|
for key_name, value in vars.items():
|
||||||
|
try:
|
||||||
|
decrypted = decrypt_value(value, old_key)
|
||||||
|
encrypted = encrypt_value(decrypted, new_key)
|
||||||
|
set_profile_var(profile, key_name, encrypted)
|
||||||
|
reencrypted += 1
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
click.echo(f"Generated new key and re-encrypted {reencrypted} values")
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def show():
|
||||||
|
"""Show key status."""
|
||||||
|
from env_pro.core.encryption import get_key_from_keyring
|
||||||
|
|
||||||
|
key = get_key_from_keyring()
|
||||||
|
if key:
|
||||||
|
click.echo("Encryption key is set and stored in keyring")
|
||||||
|
else:
|
||||||
|
click.echo("No encryption key found. Run 'env-pro key generate' to create one.")
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt_value(value, key):
|
||||||
|
from env_pro.core.encryption import decrypt_value as _decrypt
|
||||||
|
return _decrypt(value, key)
|
||||||
Reference in New Issue
Block a user