diff --git a/README.md b/README.md index f343fb19..462a03a0 100644 --- a/README.md +++ b/README.md @@ -22,18 +22,12 @@ Copy .env.example to .env and set variables. You can use https://www.grc.com/pas cp .env.example .env # Fill in the blanks go mod tidy CGO_ENABLED=0 go run cmd/go-scrobble/*.go - # In another terminal cp web/.env.example web/.env.development and set vars - cd web && npm install && npm start --env development -Access dev frontend @ http://127.0.0.1:3000 + API @ http://127.0.0.1:42069/api/v1 +Access API @ http://127.0.0.1:42069/api/v1 ## Prod deployment -We need to build NPM package, and then ship web/build with the binary. - cp .env.example .env # Fill in the blanks - cp web/.env.example web/.env.production - cd web npm install --production && npm run build --env production go build -o goscrobble cmd/go-scrobble/*.go ./goscrobble diff --git a/docs/api/build/index.html b/docs/api/build/index.html index 1caefa2c..36a5e6ae 100644 --- a/docs/api/build/index.html +++ b/docs/api/build/index.html @@ -327,13 +327,13 @@
Welcome to the GoScrobble API documentation.
The majority of these API endpoints are public with rate limiting and do not require authentication.
+ +Base URL for the API endpoints: https://goscrobble.com/api
There are 3 tiers of rate-limiting:
Light rate-limiting: 1 request per 4 seconds with a max burst of 2.
@@ -411,6 +413,276 @@ On the medium rate-limiter, you start with 5 requests available to you instantly
This endpoint is used to get server API version and registration status.
GET https://goscrobble.com/api/v1/serverstatus
++Fetch configuration values:
+
curl "https://goscrobble.com/api/v1/config" \
+ -H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"
+
++Response:
+
{
+ "SPOTIFY_API_ID": "abc",
+ "SPOTIFY_API_SECRET": "def",
+ "REGISTRATION_ENABLED": true
+}
+
Fetch instance configuration values.
+ + +GET https://goscrobble.com/api/v1/config
++Update a configuration parameter:
+
curl "https://goscrobble.com/api/v1/config" \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI" \
+ -X POST \
+ --data '{"SPOTIFY_API_ID":"notarealapikey","SPOTIFY_API_SECRET":"notarealsecret"}'
+
++Response:
+
{
+ "message": "Config updated successfully"
+}
+
Updates instance configuration values.
+ + +POST https://goscrobble.com/api/v1/config
Parameter | +Required | +Description | +
---|---|---|
key | +true | +Array of key/value pairs to update. See example. | +
++To obtain a JWT token (Replace default credentials):
+
curl "https://goscrobble.com/api/v1/login" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ --data '{"username":"abc","password":"def"}'
+
++Response:
+
{
+ "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"
+}
+
This endpoint is used to authenticate and retrieve a JWT token.
+ + +POST https://goscrobble.com/api/v1/login
Parameter | +Required | +Description | +
---|---|---|
username | +true | +Account username | +
password | +true | +Account password | +
++Create a new account (Replace default credentials):
+
curl "https://goscrobble.com/api/v1/register" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ --data '{"email": "test@test.com", "username":"abc","password":"def"}'
+
++Response:
+
{
+ "message": "User created succesfully. You may now login"
+}
+
If the server has REGISTRATION_ENABLED=true set, this endpoint will allow you to create a new account. Password must be at least 8 characters long.
+ + +POST https://goscrobble.com/api/v1/register
Parameter | +Required | +Description | +
---|---|---|
true | +Account email | +|
username | +true | +Account username | +
password | +true | +Account password | +
++Trigger a password reset email:
+
curl "https://goscrobble.com/api/v1/sendreset" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ --data '{"email":"test@test.com"}'
+
++Response:
+
{
+ "message": "Password reset email sent"
+}
+
This endpoint triggers a password reset email to be sent to the email on an account.
+ + +POST https://goscrobble.com/api/v1/sendreset
Parameter | +Required | +Description | +
---|---|---|
true | +Account username | +
++Trigger a password reset email:
+
curl "https://goscrobble.com/api/v1/resetpassword" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ --data '{"token":"abcdefghijklmnopqrstuvwxyz", "password": "Hunter1"}'
+
++Response:
+
{
+ "message": "Password updated successfully!"
+}
+
This endpoint confirms a password reset with a valid hash from the reset email. You must call v1/sendreset first and obtain the hash.
+ + +POST https://goscrobble.com/api/v1/resetpassword
Parameter | +Required | +Description | +
---|---|---|
token | +true | +Reset token from the password reset email | +
password | +true | +New account password | +
++Fetch a new JWT with a refresh token:
+
curl "https://goscrobble.com/api/v1/refresh" \
+ -H "Content-Type: application/json" \
+ -X POST \
+ --data '{"token":"abcdefghijklmnopqrstuvwxyz"}'
+
++Response:
+
{
+ "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"
+}
+
Returns a new JWT token by passing a refresh token.
+ + +POST https://goscrobble.com/api/v1/refresh
Parameter | +Required | +Description | +
---|---|---|
token | +true | +Refresh token from previously issued JWT | +
Spotify and Navidrome both work on a poll based system and do not require incoming webhooks/endpoints.
--To obtain a JWT token (Replace default credentials):
-
curl "https://goscrobble.com/api/v1/login" \
- -H "Content-Type: application/json" \
- -X POST \
- --data '{"username":"abc","password":"def"}'
-
--Response:
-
{
- "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"
-}
-
This endpoint is used to authenticate and retrieve a JWT token.
- - -POST https://goscrobble.com/api/v1/login
Parameter | -Required | -Description | -
---|---|---|
username | -true | -Account username | -
password | -true | -Account password | -
--Create a new account (Replace default credentials):
-
curl "https://goscrobble.com/api/v1/register" \
- -H "Content-Type: application/json" \
- -X POST \
- --data '{"email": "test@test.com", "username":"abc","password":"def"}'
-
--Response:
-
{
- "message": "User created succesfully. You may now login"
-}
-
If the server has REGISTRATION_ENABLED=true set, this endpoint will allow you to create a new account. Password must be at least 8 characters long.
- - -POST https://goscrobble.com/api/v1/register
Parameter | -Required | -Description | -
---|---|---|
true | -Account email | -|
username | -true | -Account username | -
password | -true | -Account password | -
--Trigger a password reset email:
-
curl "https://goscrobble.com/api/v1/sendreset" \
- -H "Content-Type: application/json" \
- -X POST \
- --data '{"email":"test@test.com"}'
-
--Response:
-
{
- "message": "Password reset email sent"
-}
-
This endpoint triggers a password reset email to be sent to the email on an account.
- - -POST https://goscrobble.com/api/v1/sendreset
Parameter | -Required | -Description | -
---|---|---|
true | -Account username | -
--Trigger a password reset email:
-
curl "https://goscrobble.com/api/v1/resetpassword" \
- -H "Content-Type: application/json" \
- -X POST \
- --data '{"token":"abcdefghijklmnopqrstuvwxyz", "password": "Hunter1"}'
-
--Response:
-
{
- "message": "Password updated successfully!"
-}
-
This endpoint confirms a password reset with a valid hash from the reset email. You must call v1/sendreset first and obtain the hash.
- - -POST https://goscrobble.com/api/v1/resetpassword
Parameter | -Required | -Description | -
---|---|---|
token | -true | -Reset token from the password reset email | -
password | -true | -New account password | -
--Fetch a new JWT with a refresh token:
-
curl "https://goscrobble.com/api/v1/refresh" \
- -H "Content-Type: application/json" \
- -X POST \
- --data '{"token":"abcdefghijklmnopqrstuvwxyz"}'
-
--Response:
-
{
- "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"
-}
-
Returns a new JWT token by passing a refresh token.
- - -POST https://goscrobble.com/api/v1/refresh
Parameter | -Required | -Description | -
---|---|---|
token | -true | -Refresh token from previously issued JWT | -
--Fetch configuration values:
-
curl "https://goscrobble.com/api/v1/config" \
- -H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"
-
--Response:
-
{
- "SPOTIFY_API_ID": "abc",
- "SPOTIFY_API_SECRET": "def",
- "REGISTRATION_ENABLED": true
-}
-
Fetch instance configuration values.
- - -GET https://goscrobble.com/api/v1/config
--Update a configuration parameter:
-
curl "https://goscrobble.com/api/v1/config" \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI" \
- -X POST \
- --data '{"SPOTIFY_API_ID":"notarealapikey","SPOTIFY_API_SECRET":"notarealsecret"}'
-
--Response:
-
{
- "message": "Config updated successfully"
-}
-
Updates instance configuration values.
- - -POST https://goscrobble.com/api/v1/config
Parameter | -Required | -Description | -
---|---|---|
key | -true | -Array of key/value pairs to update. See example. | -