feat(auth): Add OAuth2 authentication

This commit is contained in:
Björn Benouarets
2026-01-27 16:35:46 +01:00
commit 50c85e9b7f
36 changed files with 1599 additions and 0 deletions

65
secnex/app/application.py Normal file
View File

@@ -0,0 +1,65 @@
import typer
from typing import Optional
from rich.console import Console
from rich.table import Table
from rich.prompt import Prompt
import secnex.utils as utils
from secnex.kit.auth.auth import Auth
from secnex.kit.config.config import Config
from secnex.kit.clients.application import ApplicationClient
console = Console()
application_app = typer.Typer()
@application_app.command(name="create", help="Create a new application")
def create(
name: Optional[str] = typer.Option(None, "--name", "-n", help="The name of the application"),
tenant: Optional[str] = typer.Option(None, "--tenant", "-t", help="The tenant to set for the application"),
):
"""Create a new application"""
if name is None:
name = Prompt.ask("Enter the name of the application")
if tenant is None:
tenant = Prompt.ask("Enter the ID of the tenant")
config = Config("default")
application_client = ApplicationClient(config)
secret = utils.generate_secret()
app_id, status_code, success = application_client.create(name, tenant, secret)
if not success:
console.print(f"Failed to create application! Please check the logs for more information.", style="bold red")
return
console.print(f"Application created successfully!", style="bold green")
console.print(f"Application ID: {app_id}", style="bold green")
console.print(f"Secret: {secret}", style="bold green")
@application_app.command(name="ls", help="List all applications")
def ls():
"""List all applications"""
config = Config("default")
application_client = ApplicationClient(config)
applications, status_code, success = application_client.get_all()
if applications is None:
console.print(f"No applications found!", style="bold red")
return
count_applications = len(applications)
console.print(f"Found {count_applications} applications")
table = Table(title="Applications")
table.add_column("ID", style="bold green")
table.add_column("Name", style="bold yellow")
table.add_column("Tenant ID", style="bold purple")
for app in applications:
table.add_row(app.id, app.name, app.tenant_id)
console.print(table)
@application_app.command(name="rm", help="Remove an application")
def rm(id: str):
"""Remove an application"""
config = Config("default")
application_client = ApplicationClient(config)
application_client.remove(id)
console.print(f"Application {id} removed successfully!")