Metadata-Version: 2.4
Name: urlwall
Version: 0.1.2
Summary: Interceptive browser for macOS — confirms unknown domains before opening
Author-email: Jens Svalgaard <github@svalgaard.net>
License: Apache-2.0
Project-URL: Homepage, https://github.com/svalgaard/urlwall
Project-URL: Repository, https://github.com/svalgaard/urlwall
Project-URL: Issues, https://github.com/svalgaard/urlwall/issues
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: MacOS X
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Security
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: lint
Requires-Dist: ruff; extra == "lint"
Dynamic: license-file

# URL-Wall — Interceptive Browser for macOS

Add a confirmation step when you click an http, https, or ftp
URL *outside your browser* to ensure you reach the domain you expect.

Known domains go directly. Unknown domains show a warning page where you
can acknowledge and proceed.

## Installation

```bash
# Build the .app bundle
python -m urlwall --install ~/Applications/URL-Wall.app

# Set as macOS default browser
python -m urlwall --use-as-default
# Then run: killall Finder
```

## CLI Usage

```bash
# Open a URL through the gate
python -m urlwall https://example.com

# Add a domain to the allow list
python -m urlwall --allow-host-add example.com

# Add with subdomain support
python -m urlwall --allow-host-add example.com --also-subdomains

# Remove from allow list
python -m urlwall --allow-host-remove example.com

# Set the browser used after URL-Wall
python -m urlwall --set-browser "Google Chrome.app"

# Set URL-Wall as macOS default browser
python -m urlwall --use-as-default

# View current config
python -m urlwall
```

## How It Works

1. The `install` command compiles an AppleScript handler into a `.app` bundle
2. The `.app` is patched with URL scheme handlers (http, https, ftp)
3. When macOS routes a URL to URL-Wall, the AppleScript calls `python -m urlwall <url>`
4. The Python handler checks if the domain is allowed — if so, opens it directly
5. If not, shows a warning page with the full redirect chain and a "Proceed" button

## Configuration

Config is stored in `~/.urlwall/setup.plist`:

- `defaultBrowser` — app name (e.g., `Safari.app`)
- `hostsAllowed` — domains that open directly
- `hostWithSubdomainsAllowed` — domains + all subdomains
