More gui
This commit is contained in:
17 files changed
+1043
-31
No files matched your search
@@ -11,6 +11,7 @@ cargo run
|
||||
```
|
||||
|
||||
The server listens on `0.0.0.0:3000` and is available locally at `http://localhost:3000`.
|
||||
Set `PORT` to listen on another port.
|
||||
|
||||
On startup, the server creates the SQLite database and initializes its tables before accepting requests.
|
||||
The default database is `pastable.db` in the working directory. Set `DATABASE_URL` to use a different location:
|
||||
@@ -21,6 +22,16 @@ DATABASE_URL=sqlite://data.db cargo run
|
||||
|
||||
Route handlers can access the shared database pool with the `State(pool): State<SqlitePool>` extractor.
|
||||
|
||||
## Browser app
|
||||
|
||||
Open `/gui` for the browser workspace. Create text pastes, one-time secrets, and short links; choose custom IDs, languages, expiry, and view limits; and open shares with syntax highlighting or as plain text.
|
||||
|
||||
The language dropdown is populated from irosashi's supported grammars. The home page renders this README as HTML and shares the browser app's logo, navigation, and styling.
|
||||
|
||||
Sign in with HTTP Basic credentials to browse, filter, edit, and delete your own shares. A new username creates an account. Credentials stay in page memory and are cleared on sign-out or reload. The app uses the existing API without page reloads.
|
||||
|
||||
Opening a paste or following a short link counts as a view. Listing records and loading them into the editor do not. Updates preserve omitted options and view counters.
|
||||
|
||||
## Features
|
||||
|
||||
- Share text and code, with optional syntax highlighting.
|
||||
@@ -47,7 +58,7 @@ All paths are relative to the server URL. `{id}` is a path parameter containing
|
||||
| Form parameter | Type | Required | Default | Description |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `content` | String | Yes | — | Text or code to store. For raw text requests, the entire body supplies this value. |
|
||||
| `language` | String | No | Not set | Language for syntax highlighting. |
|
||||
| `language` | String | No | Auto detect | Language for syntax highlighting. When omitted, irosashi detects from the first line (for example a shebang), then from a requested custom ID such as `main.rs`. Without a match, the paste stays plain text. Use `text` to force plain text. |
|
||||
| `expires` | Integer | No | No expiration | Lifetime in seconds from the request; `0` expires immediately. Must be nonnegative. |
|
||||
| `max_views` | Integer | No | Unlimited views | Positive maximum number of views before self-destruction. The `/once` routes force this to `1`. |
|
||||
|
||||
@@ -55,7 +66,7 @@ All paths are relative to the server URL. `{id}` is a path parameter containing
|
||||
|
||||
**Returns:** the assigned ID as plain text. This is an ID, not a full URL. Always use the returned ID, since a requested custom ID may already be taken.
|
||||
|
||||
IDs are shared by pastes and short links. Reserved route names (`list`, `once`, `to`, and `static`) and IDs containing `/` are unavailable as custom IDs; these also receive a generated ID.
|
||||
Generated IDs contain exactly 8 alphanumeric characters, generated in Rust with `rand`. Confusing characters (`0`, `1`, `I`, `L`, `O`, `i`, `l`, `o`) are excluded. IDs are shared by pastes and short links. Reserved route names (`gui`, `list`, `once`, `to`, and `static`) and IDs containing `/` are unavailable as custom IDs; these also receive a generated ID.
|
||||
|
||||
Create a paste from raw text:
|
||||
|
||||
@@ -93,6 +104,8 @@ curl --request POST 'http://localhost:3000/once/my-secret' \
|
||||
|
||||
**Returns:** the paste as HTML or plain text, based on the `Accept` header. The default is plain text. HTML uses the stored language for syntax highlighting, falling back to plain text for missing or unknown languages.
|
||||
|
||||
HTML and GUI previews show the view counter, including the current read, and the maximum when set. Both representations include `X-Paste-Views` and, when limited, `X-Paste-Max-Views` response headers, so displaying the counter does not require another read.
|
||||
|
||||
Each successful read increments `views`. The final permitted read returns the content and deletes the paste. Missing, expired, and exhausted pastes return `404`. Expired and exhausted records are also cleaned up in the background every minute.
|
||||
|
||||
```sh
|
||||
@@ -175,6 +188,8 @@ curl --request PUT --user 'alice:example-password' 'http://localhost:3000/to/my-
|
||||
|
||||
With `Accept: text/html`, the response is an HTML table containing IDs, types, content, languages, view counts and limits, creation and update times, and expiration times. Dates are displayed in the browser's local timezone.
|
||||
|
||||
With `Accept: application/json`, the response is an array of full `Paste` records, including `id`, `paste_type` (`TextV1` or `UrlV1`), `content`, `language`, `expiration`, `max_views`, `views`, `created_at`, `updated_at`, and `owner`. Timestamps are Unix seconds; unset optional values are `null`.
|
||||
|
||||
```sh
|
||||
curl --user 'alice:example-password' 'http://localhost:3000/list'
|
||||
```
|
||||
|
||||
Reference in new issue
Block a user