Add Readme

This commit is contained in:
2026-01-05 13:18:04 +01:00
parent 7e95d1d3ea
commit 004cc3a3ee

113
README.md Normal file
View File

@@ -0,0 +1,113 @@
# 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.