M1-PCA-Project/cli/role/admin/action/create/create_role/client/run.py

39 lines
1.3 KiB
Python

import argparse
from pathlib import Path
import bcrypt
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
def run(parser: argparse.ArgumentParser, arguments: argparse.Namespace):
# TODO(Faraphel): should NOT be named "client"
print("creating new client...")
directory_client = Path(f"./assets/client/{arguments.username}/")
if directory_client.exists():
raise ValueError("This client already exists !")
directory_client.mkdir(parents=True)
# Generate a private key
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend(),
)
(directory_client / "private.key").write_bytes(
private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.OpenSSH,
encryption_algorithm=serialization.BestAvailableEncryption(arguments.password.encode()),
)
)
(directory_client / "public.key").write_bytes(
private_key.public_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.OpenSSH,
)
)