import click from browser_cli.commands import client_from_ctx, handle_errors from rich.console import Console from rich.table import Table console = Console() @click.group("cookies") def cookies_group(): """Manage browser cookies.""" @cookies_group.command("list") @click.option("--url", default=None, help="Filter by URL") @click.option("--domain", default=None, help="Filter by domain") @click.option("--name", default=None, help="Filter by cookie name") @handle_errors def cookies_list(url, domain, name): """List cookies, optionally filtered by URL, domain, or name.""" cookies = client_from_ctx().cookies.list(url=url, domain=domain, name=name) if not cookies: console.print("[yellow]No cookies found[/yellow]") return table = Table(show_header=True, header_style="bold cyan") table.add_column("Name") table.add_column("Value") table.add_column("Domain") table.add_column("Path") table.add_column("Secure", width=7) table.add_column("HttpOnly", width=9) for c in cookies: table.add_row( c.get("name", ""), (c.get("value") or "")[:60], c.get("domain", ""), c.get("path", ""), "[green]✓[/green]" if c.get("secure") else "", "[green]✓[/green]" if c.get("httpOnly") else "", ) console.print(table) @cookies_group.command("get") @click.argument("url") @click.argument("name") @handle_errors def cookies_get(url, name): """Get the value of a single cookie by URL and NAME.""" cookie = client_from_ctx().cookies.get(url, name) if cookie is None: console.print(f"[yellow]Cookie '{name}' not found for {url}[/yellow]") raise SystemExit(1) console.print(cookie.get("value", "")) @cookies_group.command("set") @click.argument("url") @click.argument("name") @click.argument("value") @click.option("--domain", default=None) @click.option("--path", default=None) @click.option("--secure", is_flag=True) @click.option("--http-only", "http_only", is_flag=True) @click.option("--expires", "expiration_date", type=float, default=None, help="Unix timestamp") @click.option("--same-site", type=click.Choice(["no_restriction", "lax", "strict"]), default=None) @handle_errors def cookies_set(url, name, value, domain, path, secure, http_only, expiration_date, same_site): """Set a cookie on URL.""" client_from_ctx().cookies.set( url, name, value, domain=domain, path=path, secure=secure or None, http_only=http_only or None, expiration_date=expiration_date, same_site=same_site, ) console.print(f"[green]Set cookie:[/green] {name}={value!r} on {url}")