Files
luxtools-client/README.md
2026-01-05 13:18:04 +01:00

114 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# luxtools-client
Small local HTTP helper that lets the Dokuwiki plugin `luxtools` open folders on the same machine.
This program runs on the users machine and listens on a loopback address only (defaults to `127.0.0.1:8765`). The plugin calls it to open a folder in the OS file manager.
## What it does
- Exposes `GET /health` for a simple health check.
- Exposes `GET /open?path=...` and `POST /open` to open a folder.
- Normalizes and validates the requested path:
- Accepts absolute paths only.
- If a file path is provided, it opens the containing directory.
- Accepts `file://...` URLs (handy when the caller passes a file URL).
- Optionally restricts which folders can be opened via `-allow` prefixes.
## Build
Requires Go 1.22+.
```bash
go build -o luxtools-client .
```
## Run
```bash
./luxtools-client
```
On startup, if you dont pass `-token`, the server generates a random token and prints it to the logs. Put that token into the Dokuwiki plugin configuration.
### Flags
- `-listen` (default `127.0.0.1:8765`): listen address (`host:port`). Must be loopback.
- `-token` (default empty): shared secret token. If empty, a token is generated and logged at startup.
- `-allow` (repeatable): allowed path prefix. If you specify one or more, the requested path must start with one of them.
Examples:
```bash
# Listen on a different local port
./luxtools-client -listen 127.0.0.1:9000
# Use an explicit token (recommended for stable config)
./luxtools-client -token "your-shared-secret"
# Restrict opens to your home directory (repeat -allow as needed)
./luxtools-client -allow "$HOME"
```
## API
### Auth
Requests must include the token using the `X-Filetools-Token` header.
- Header: `X-Filetools-Token: <token>`
- For `GET /open`, a `token=...` query parameter is also accepted as a fallback.
### `GET /health`
Returns JSON:
```json
{"ok": true, "time": "2026-01-05T12:34:56Z"}
```
### `POST /open`
Request body:
```json
{"path": "/absolute/path"}
```
Response:
```json
{"ok": true, "message": "opened"}
```
Example:
```bash
curl -sS -X POST \
-H 'Content-Type: application/json' \
-H 'X-Filetools-Token: your-shared-secret' \
--data '{"path":"/tmp"}' \
http://127.0.0.1:8765/open
```
### `GET /open?path=...`
For GET callers, success returns `204 No Content` (to reduce console noise in certain callers).
Example:
```bash
curl -i \
-H 'X-Filetools-Token: your-shared-secret' \
'http://127.0.0.1:8765/open?path=/tmp'
```
## OS support
- Linux: uses `xdg-open`.
- Windows: uses `explorer.exe`.
## Notes / security
- The server refuses to bind to non-loopback addresses.
- Use `-allow` to prevent opening arbitrary folders if other local processes can reach the port.