feat(auth): Add OAuth2 authentication
This commit is contained in:
114
secnex/app/config.py
Normal file
114
secnex/app/config.py
Normal file
@@ -0,0 +1,114 @@
|
||||
import typer
|
||||
from typing import Optional
|
||||
|
||||
from rich.console import Console
|
||||
from rich.table import Table
|
||||
from rich.prompt import Prompt
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
console = Console()
|
||||
|
||||
config_app = typer.Typer()
|
||||
|
||||
@config_app.command()
|
||||
def create(
|
||||
name: Optional[str] = typer.Option(None, "--name", "-n", help="The name of the config"),
|
||||
client_id: Optional[str] = typer.Option(None, "--client-id", "-c", help="The ID of the client"),
|
||||
client_secret: Optional[str] = typer.Option(None, "--client-secret", "-s", help="The secret of the client"),
|
||||
tenant_id: Optional[str] = typer.Option(None, "--tenant-id", "-t", help="The ID of the tenant"),
|
||||
ui: Optional[str] = typer.Option(None, "--ui", "-u", help="The UI to use"),
|
||||
host: Optional[str] = typer.Option(None, "--host", "-h", help="The host of the SecNex API"),
|
||||
):
|
||||
"""Create a new config"""
|
||||
if name is None:
|
||||
name = "default"
|
||||
if host is None:
|
||||
host = Prompt.ask("Enter the host of the SecNex API", default="http://localhost:3003")
|
||||
if ui is None:
|
||||
ui = Prompt.ask("Enter the UI to use", default="http://localhost:3000")
|
||||
if client_id is None:
|
||||
client_id = Prompt.ask("Enter the ID of the client")
|
||||
if client_secret is None:
|
||||
client_secret = Prompt.ask("Enter the secret of the client")
|
||||
if tenant_id is None:
|
||||
tenant_id = Prompt.ask("Enter the ID of the tenant")
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"))):
|
||||
os.makedirs(os.path.join(os.path.expanduser("~/.secnex")))
|
||||
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json")):
|
||||
with open(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json"), "w") as f:
|
||||
json.dump({}, f)
|
||||
else:
|
||||
typer.echo(f"Config {name} already exists!", err=True, color=True)
|
||||
return
|
||||
|
||||
with open(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json"), "w") as f:
|
||||
json.dump({
|
||||
"host": host,
|
||||
"ui": ui,
|
||||
"client": {
|
||||
"id": client_id,
|
||||
"secret": client_secret,
|
||||
"tenant": tenant_id,
|
||||
}
|
||||
}, f)
|
||||
|
||||
typer.echo(f"Config {name} created successfully!", color=True)
|
||||
|
||||
@config_app.command(name="show", help="Show a config")
|
||||
def show(name: Optional[str] = typer.Option(None, "--name", "-n", help="The name of the config")):
|
||||
"""Show a config"""
|
||||
if name is None:
|
||||
name = "default"
|
||||
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json")):
|
||||
typer.echo(f"Config {name} does not exist!", err=True, color=True)
|
||||
return
|
||||
|
||||
with open(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json"), "r") as f:
|
||||
config = json.load(f)
|
||||
console.print(f"Config {name}: {config}", style="dim")
|
||||
|
||||
@config_app.command(name="ls", help="List all configs")
|
||||
def ls():
|
||||
"""List all configs"""
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"))):
|
||||
typer.echo("No configs found!", err=True, color=True)
|
||||
return
|
||||
|
||||
table = Table(title="Configs")
|
||||
table.add_column("Name", style="bold green")
|
||||
table.add_column("Path", style="bold yellow")
|
||||
|
||||
for file in os.listdir(os.path.join(os.path.expanduser("~/.secnex"))):
|
||||
if file.endswith(".json"):
|
||||
table.add_row(file.replace(".json", ""), os.path.join(os.path.expanduser("~/.secnex"), file))
|
||||
|
||||
console.print(table)
|
||||
|
||||
@config_app.command(name="rm", help="Remove a config")
|
||||
def rm(name: Optional[str] = typer.Option(None, "--name", "-n", help="The name of the config")):
|
||||
"""Remove a config"""
|
||||
if name is None:
|
||||
name = "default"
|
||||
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json")):
|
||||
typer.echo(f"Config {name} does not exist!", err=True, color=True)
|
||||
return
|
||||
|
||||
os.remove(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json"))
|
||||
typer.echo(f"Config {name} removed successfully!", color=True)
|
||||
|
||||
@config_app.command(name="path", help="Get the path of a config")
|
||||
def path(name: Optional[str] = typer.Option(None, "--name", "-n", help="The name of the config")):
|
||||
"""Get the path of a config"""
|
||||
if name is None:
|
||||
name = "default"
|
||||
|
||||
if not os.path.exists(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json")):
|
||||
typer.echo(f"Config {name} does not exist!", err=True, color=True)
|
||||
return
|
||||
|
||||
typer.echo(os.path.join(os.path.expanduser("~/.secnex"), f"{name}.json"), color=True)
|
||||
Reference in New Issue
Block a user