mirror of
https://github.com/kaaninchen/Laterna.git
synced 2026-09-17 19:12:48 +00:00
📚 feat(docs): expand README
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
# 🛋️ Laterna (Server)
|
# 🛋️ Laterna (Server)
|
||||||
|
|
||||||
Laterna is a lightweight REST api for sharing HEX color codes between 2 (or more) lamps with simple HTTP requests, written in go.
|
**Laterna** is a lightweight REST API for sharing HEX color codes between 2 (or more) lamps, written in go.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This project was developed with my own use case in mind.
|
> This project was developed with my own use case in mind.
|
||||||
> Expect bugs and weird annoyances/limitations, as this is my first REST api and my first time using go
|
> This is my first time building a REST API and my first time utilizing the go language.
|
||||||
|
> Expect bugs and weird annoyances/limitations
|
||||||
|
|
||||||
## Setup
|
## ⚙️ Setup
|
||||||
|
|
||||||
### 1. Clone the repository
|
### 1. Clone the repository
|
||||||
|
|
||||||
@@ -17,56 +18,67 @@ cd laterna
|
|||||||
|
|
||||||
### 2. Configure the server
|
### 2. Configure the server
|
||||||
|
|
||||||
Laterna requires a config.json in it's root directory. An [example config](https://github.com/siestaw/Laterna/blob/main/config.json.example) is provided
|
Laterna requires a config.json file in the root directory. A [example config](https://github.com/siestaw/Laterna/blob/main/config.json.example) is provided
|
||||||
|
|
||||||
`$ mv config.json.example config.json`
|
```sh
|
||||||
|
cp config.json.example config.json
|
||||||
|
```
|
||||||
|
|
||||||
You can leave the json as it is or configure it to your liking, although some configuration options (e.g. `verboseLogging`) aren't fully implemented yet.
|
You can leave the json as it is or configure it to your liking, although some configuration options (e.g. `verboseLogging`) aren't fully implemented yet.
|
||||||
|
|
||||||
### 3. Run
|
### 3. Run
|
||||||
|
|
||||||
Make sure that go is installed. The server was tested with go 1.24.5 on linux.
|
Make sure that go is installed (tested with Go 1.24.5 on Linux)
|
||||||
|
|
||||||
run using the makefile
|
```sh
|
||||||
`$ make run`
|
make run
|
||||||
|
```
|
||||||
|
|
||||||
for further makefile usage, see
|
For advanced Makefile options:
|
||||||
`$ make help`
|
|
||||||
|
```sh
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
## 🛜 API Documentation
|
## 🛜 API Documentation
|
||||||
|
|
||||||
<details><summary>Docs</summary>
|
### 🔑 Authentication
|
||||||
|
|
||||||
### Base URL
|
All requests require the **admin token** via the Authorization header:
|
||||||
|
|
||||||
`http://your-server.com/api/v1`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Authentification
|
|
||||||
|
|
||||||
The admin token will be displayed once while starting for the first time. To generate a new one, run with the `--resetAdminToken` flag.
|
|
||||||
|
|
||||||
All endpoints require the admin token in the header of the request:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
Authorization: <token>
|
Authorization: <token>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The token is shown once on the first startup. To regenerate it, run the server with:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./laterna --resetAdminToken
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Routes
|
### 📦️ Endpoints
|
||||||
|
|
||||||
#### Controller
|
#### 🎛️ Controllers
|
||||||
|
|
||||||
| Method | Route | Description | Request Body |
|
| Method | Route | Description | Request Body |
|
||||||
| ------ | -------------- | ----------------------------- | ------------- |
|
| ------ | -------------- | ----------------------------- | ------------- |
|
||||||
| POST | `/controllers` | Create a new controller | — |
|
| POST | `/controllers` | Create a new controller | — |
|
||||||
| DELETE | `/controllers` | Delete an existing controller | `{ "ID": 1 }` |
|
| DELETE | `/controllers` | Delete an existing controller | `{ "ID": 1 }` |
|
||||||
|
|
||||||
---
|
<details> <summary>🔧 Example Payload</summary>
|
||||||
|
|
||||||
#### Colors
|
```jsonc
|
||||||
|
// DELETE /controllers
|
||||||
|
{
|
||||||
|
"ID": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
#### 🎨 Colors
|
||||||
|
|
||||||
| Method | Route | Description | Request Body |
|
| Method | Route | Description | Request Body |
|
||||||
| ------ | -------------- | -------------------------------------------------- | ------------------------ |
|
| ------ | -------------- | -------------------------------------------------- | ------------------------ |
|
||||||
@@ -74,9 +86,20 @@ Authorization: <token>
|
|||||||
| GET | `/colors/{id}` | Get the current color of a specific controller | — |
|
| GET | `/colors/{id}` | Get the current color of a specific controller | — |
|
||||||
| PUT | `/colors/{id}` | Set the color of a controller | `{ "color": "#FF0000" }` |
|
| PUT | `/colors/{id}` | Set the color of a controller | `{ "color": "#FF0000" }` |
|
||||||
|
|
||||||
|
<details> <summary>🔧 Example Payload</summary>
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
// PUT /colors/1
|
||||||
|
{
|
||||||
|
"Color": "#5398B7"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### cURL examples
|
### 📥️ cURL examples
|
||||||
|
|
||||||
#### Create a new controller
|
#### Create a new controller
|
||||||
|
|
||||||
@@ -85,8 +108,6 @@ $ curl -X POST http://your-server.com/api/v1/controllers \
|
|||||||
-H "Authorization: $TOKEN"
|
-H "Authorization: $TOKEN"
|
||||||
```
|
```
|
||||||
|
|
||||||
ℹ️ Response with the newly assigned ID. The ID will always be the next available one
|
|
||||||
|
|
||||||
#### Delete a controller
|
#### Delete a controller
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -95,21 +116,21 @@ $ curl -X DELETE localhost:8080/api/v1/controllers \
|
|||||||
-d '{"ID": 1}'
|
-d '{"ID": 1}'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Get the current color of all controllers
|
#### Get every controllers colors
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ curl -X GET localhost:8080/api/v1/colors/ \
|
$ curl -X GET localhost:8080/api/v1/colors/ \
|
||||||
-H "Authorization: $TOKEN"
|
-H "Authorization: $TOKEN"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Get the current color of a specific controller
|
#### Get a specific controllers's color
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ curl -X GET localhost:8080/api/v1/colors/1 \
|
$ curl -X GET localhost:8080/api/v1/colors/1 \
|
||||||
-H "Authorization: $TOKEN"
|
-H "Authorization: $TOKEN"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Set the color of a controller
|
#### Set a controller's color
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ curl -X PUT localhost:8080/api/v1/colors/1 \
|
$ curl -X PUT localhost:8080/api/v1/colors/1 \
|
||||||
@@ -117,4 +138,32 @@ $ curl -X PUT localhost:8080/api/v1/colors/1 \
|
|||||||
-d '{"Color": "#C2C342"}'
|
-d '{"Color": "#C2C342"}'
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
---
|
||||||
|
|
||||||
|
### 📤️ Response Format
|
||||||
|
|
||||||
|
All responses follow this format:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"color": "#C16A31",
|
||||||
|
"id": 1,
|
||||||
|
"updated_at": "2025-07-28T19:47:46Z"
|
||||||
|
},
|
||||||
|
"status": 200,
|
||||||
|
"success": true,
|
||||||
|
"timestamp": "2025-07-28T20:40:58Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In case of an error:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": "Invalid token",
|
||||||
|
"status": 401,
|
||||||
|
"success": false,
|
||||||
|
"timestamp": "2025-07-28T20:41:54Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"fileLogging": false,
|
"fileLogging": false,
|
||||||
"verboseLogging": true,
|
"verboseLogging": false,
|
||||||
"http": {
|
"http": {
|
||||||
"port": 8080,
|
"port": 8080,
|
||||||
"cooldown": 5
|
"cooldown": 5
|
||||||
|
|||||||
Reference in New Issue
Block a user