Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thenextlvl-net/arkitektonika
A lightweight alternative to the original Arkitektonika but with more API routes
https://github.com/thenextlvl-net/arkitektonika
arkitektonika fastasyncworldedit fawe file-upload intellectualsites json minecraft nbt plotsquared rest-api
Last synced: about 2 months ago
JSON representation
A lightweight alternative to the original Arkitektonika but with more API routes
- Host: GitHub
- URL: https://github.com/thenextlvl-net/arkitektonika
- Owner: TheNextLvl-net
- License: gpl-3.0
- Created: 2024-01-09T15:21:33.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2024-10-24T05:24:34.000Z (2 months ago)
- Last Synced: 2024-10-24T23:24:34.558Z (2 months ago)
- Topics: arkitektonika, fastasyncworldedit, fawe, file-upload, intellectualsites, json, minecraft, nbt, plotsquared, rest-api
- Language: Java
- Homepage:
- Size: 256 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Arkitektonika
---
The original resource by IntellectualSites can be found [here](https://github.com/IntellectualSites/Arkitektonika)
Arkitektonika is a REST repository for NBT data. It accepts uploads of valid NBT data and stores them in a local folder
while accounting for its metadata in a local sqlite database. ~Optionally, uploaded files can be expired based on the
configurable age by running the prune script~. Files can always be deleted via their deletion key.## To Run
### With Docker
```sh
git clone https://github.com/TheNextLvl-net/Arkitektonika.git &&
cd Arkitektonika &&
docker compose up
```### From scratch
```sh
git clone https://github.com/TheNextLvl-net/Arkitektonika.git &&
cd Arkitektonika &&
./gradlew shadowJar &&
java -jar $(find build/libs/ -name "*.jar" -print -quit)
```## Configuration
```json
{
"port": 3000,
"prune": 1800000,
"maxSchematicSize": 1000000,
"allowedOrigin": "*",
"limiter": {
"windowMs": 60000,
"delayAfter": 30,
"delayMs": 500
}
}
```> [!WARNING]
> the `limiter` is not implemented yet| Config Key | Description |
|--------------------|----------------------------------------------------------------------------------------------------------------------------|
| port | on which port should the application bind |
| prune | defines how old records must be to be deleted by the prune script (in ms) |
| maxSchematicSize | maximum size of schematic files to be accepted (in bytes) |
| limiter.windowMs | the frame of the limiter (after what duration should the limit gets reset) |
| limiter.delayAfter | After how many requests during windowMs should delayMs be applied |
| limiter.delayMs | How many ms should the request take longer. Formula: `currentRequestDelay = (currentRequestAmount - delayAfter) * delayMs` |## File structure:
```
data
├── config.json
└── database.db
````config.json` holds the user configuration data
`database.db` holds the required data for each schematic
~~`schematics` holds all schematic file data~~### Routes
All routes will be available at the exposed port (e.g. `localhost:3000`).
### Get files as base64
**GET `INSTANCE_URL/base64/{download_key}`**: get the file bytes as base64 encoded string
```sh
curl --request GET 'http://localhost:3000/base64/db6186c8795740379d26fc61ecba1a24'
```
response:| Code | Meaning |
|------|------------------------------------|
| 200 | Success |
| 404 | File was not found in the database |
| 500 | A server error occurred |response body: `base64 string`
### Get file size
**GET `INSTANCE_URL/size/{download_key}`**: get the file size
```sh
curl --request GET 'http://localhost:3000/size/db6186c8795740379d26fc61ecba1a24'
```
response:| Code | Meaning |
|------|------------------------------------|
| 200 | Success |
| 404 | File was not found in the database |
| 500 | A server error occurred |success body: `43554` (in bytes)
### Get file expiration
**GET `INSTANCE_URL/expiration/{download_key}`**: get the file expiration date
```sh
curl --request GET 'http://localhost:3000/expiration/db6186c8795740379d26fc61ecba1a24'
```response:
| Code | Meaning |
|------|------------------------------------|
| 200 | Success |
| 404 | File was not found in the database |
| 500 | A server error occurred |success body: `2717940582741` (in millis)
### Set file expiration
**PUT `INSTANCE_URL/expiration/{delete_key}/{expiration}`**: set the file expiration date
```sh
curl --request PUT 'http://localhost:3000/expiration/11561161dffe4a1298992ce063be5ff9/2717940582741'
```response:
| Code | Meaning |
|------|------------------------------------|
| 200 | Expiration updated |
| 404 | File was not found in the database |
| 500 | A server error occurred |### Upload a file
**POST `INSTANCE_URL/upload`**: send your file as multipart/form-data; example:
```sh
curl --request POST 'http://localhost:3000/upload' --form 'schematic=@/path/to/plot.schem'
```response:
| Code | Meaning |
|------|-----------------------------------------------|
| 200 | File was of valid NBT format and was accepted |
| 400 | File was not of valid NBT format |
| 413 | File payload was too large and rejected |
| 500 | Upload failed |success body:
```json
{
"download_key": "db6186c8795740379d26fc61ecba1a24",
"delete_key": "11561161dffe4a1298992ce063be5ff9",
"expiration_date": 1717940582741
}
```The download key allows you to download the file, and the delete key lets you delete it. Share the `download_key`, but
not the `delete_key`.### Rename a file
**PUT `INSTANCE_URL/rename/{deletion_key}/{name}`**: rename a file with the given `deletion_key` ; example:
```sh
curl --request PUT 'http://localhost:3000/rename/11561161dffe4a1298992ce063be5ff9/renamed-plot.schem'
```response:
| Code | Meaning |
|------|------------------------------------|
| 200 | File was successfully renamed |
| 404 | File was not found in the database |### Download a file
**GET `INSTANCE_URL/download/{download_key}`**: download a file with the given `download_key`; example:
```sh
curl --request GET 'http://localhost:3000/download/db6186c8795740379d26fc61ecba1a24'
```The response for this is in the form of status codes only.
| Code | Meaning |
|------|----------------------------------------------------------------------------------------|
| 200 | File was found, prospective download would succeed |
| 404 | File was not found in the database |
| 410 | File metadata is in accounting table, but file is not on disk or already expired |
| 500 | An internal server error occurred due to corrupted metadata (missing data in database) |On success, the file is sent as an attachment for download to the browser / requester.
### Delete a file
**DELETE `PUBLIC_URL/delete/{delete_key}`**: delete a file with the given `delete_key`; example:
```sh
curl --request DELETE 'http://localhost:3000/delete/11561161dffe4a1298992ce063be5ff9'
```The response for this is in the form of status codes only.
| Code | Meaning |
|------|----------------------------------------------------------------------------------------|
| 200 | File was found, prospective deletion would succeed |
| 404 | File was not found in the database |
| 410 | File metadata is in accounting table, but file is not on disk or already expired |
| 500 | An internal server error occurred due to corrupted metadata (missing data in database) |On success, the file is deleted and the record is marked as expired in the database.