adding README
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# mdhost
|
||||
|
||||
A simple, single-binary Go web application for hosting and sharing markdown files.
|
||||
|
||||
## Features
|
||||
|
||||
- **Create, view, edit, and delete** markdown files via web interface
|
||||
- **Stable file IDs** - unique identifiers don't change when files are edited
|
||||
- **Syntax highlighting** for code blocks (bash, go, python, etc.)
|
||||
- **Optional authentication** - anonymous users can create files, registered users can claim them
|
||||
- **Access control** - edit/delete only your own files, public/private visibility toggle
|
||||
- **Responsive UI** - mobile-friendly CSS layout
|
||||
- **Persistent storage** - all data (users, sessions, file metadata) survives server restarts
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
go build -o mdhost .
|
||||
```
|
||||
|
||||
### Run
|
||||
|
||||
```bash
|
||||
./mdhost
|
||||
```
|
||||
|
||||
The server will start on `http://localhost:8080`.
|
||||
|
||||
### Usage
|
||||
|
||||
1. **List files**: Visit `/` to see all public markdown files
|
||||
2. **Add a file**: Click "add" in the nav bar, enter title and content, submit
|
||||
3. **View a file**: Click any file name in the list
|
||||
4. **Edit a file**: Click the `[edit]` link next to a file, or visit `/edit?id=<file-id>`
|
||||
5. **Delete a file**: Click the `[delete]` button (only visible for files you own)
|
||||
|
||||
## Authentication
|
||||
|
||||
### Anonymous Use
|
||||
|
||||
You can create and edit files without an account. Files created anonymously are associated with your browser session (via cookie).
|
||||
|
||||
### Register
|
||||
|
||||
Click "register" in the nav bar to create an account. After registering:
|
||||
- Your existing anonymous files are automatically claimed and linked to your account
|
||||
- You can edit/delete all files created in your session
|
||||
|
||||
### Login/Logout
|
||||
|
||||
- Click "login" to authenticate with existing credentials
|
||||
- Click "logout" to end your session
|
||||
|
||||
### Claiming Files
|
||||
|
||||
Files created while anonymous are automatically claimed when you register or login from the same browser.
|
||||
|
||||
## File Visibility
|
||||
|
||||
- **Public files**: Appear in the public list, visible to all users
|
||||
- **Private files**: Only accessible via direct URL, don't appear in public list
|
||||
- Toggle visibility using the "Listed in public list" checkbox when editing
|
||||
|
||||
## Configuration
|
||||
|
||||
The following variables can be modified at the top of `main.go`:
|
||||
|
||||
```go
|
||||
var (
|
||||
postsDir = "./posts" // Directory for markdown files
|
||||
dataDir = "./data" // Directory for persistent data (data.json)
|
||||
port = ":8080" // Server port
|
||||
)
|
||||
|
||||
var ListFormat = "ul" // List rendering: "ul" (bullet), "ol" (numbered), "plain"
|
||||
```
|
||||
|
||||
## Data Storage
|
||||
|
||||
- **Markdown files**: Stored in `./posts/` directory
|
||||
- **Metadata**: Stored in `./data/data.json` (users, sessions, file metadata)
|
||||
- All data persists across server restarts
|
||||
|
||||
## ID Generation
|
||||
|
||||
File IDs are generated as the first 12 characters of a SHA1 hash:
|
||||
```
|
||||
SHA1(filename + creation_timestamp)[:12]
|
||||
```
|
||||
|
||||
The creation timestamp is stored in the file's `CreatedAt` field and persists across restarts, ensuring stable IDs.
|
||||
|
||||
## Security
|
||||
|
||||
- Passwords are hashed using bcrypt
|
||||
- Sessions use HTTP-only cookies with 1-year expiry
|
||||
- File ownership is enforced (users can only edit/delete their own files)
|
||||
- Private files are hidden from public listings but accessible via direct URL
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|------|-------------|
|
||||
| GET | `/` | List all public files |
|
||||
| GET | `/home` | Homepage with README |
|
||||
| GET | `/view/{id}` | View rendered markdown |
|
||||
| GET | `/add` | Form to create new file |
|
||||
| POST | `/create` | Create new file |
|
||||
| GET | `/edit` | Select file to edit |
|
||||
| GET | `/edit?id={id}` | Edit specific file |
|
||||
| POST | `/update` | Save file edits |
|
||||
| POST | `/delete` | Delete a file |
|
||||
| GET/POST | `/register` | Create user account |
|
||||
| GET/POST | `/login` | Authenticate |
|
||||
| GET | `/logout` | Clear session |
|
||||
| GET | `/claim` | Claim anonymous files (auto-handled in register) |
|
||||
|
||||
## Dependencies
|
||||
|
||||
- Go 1.26+
|
||||
- `github.com/yuin/goldmark` v1.8.2
|
||||
- `github.com/yuin/goldmark-highlighting` v0.0.0-20220208100518-594be1970594
|
||||
- `github.com/alecthomas/chroma/v2` v2.24.1
|
||||
- `golang.org/x/crypto/bcrypt` v0.50.0
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
Reference in New Issue
Block a user