MusicBot-API
The OpenAPI specification for the MusicBot.
The latest documentation, automatically generated from the specification, can be found here: documentation.
Auth
This is a difficult subject as MusicBot instances are deployed in the local network. While a solution for automatic HTTPS has been found, end users still have to trust the server owner not to misuse their data, including their passwords. Of course official servers salt and hash user passwords to increase security, but a server owner may still make modifications to the code and gain access to clear-text passwords.
To minimize the trust required from end users to use the MusicBot, users may create a Guest
account, which doesn't require a manually set password, is not persisted, and is limited to the default set of permissions. For user convenience and especially for user awareness of the option to omit the password, clients should not ask the user for a password in the login/registration process. A user may only be asked for their password at login if the server responded to the Guest
login attempt with an AuthExpectation
object requesting a password.
If a user wishes to set a password after logging in, for example to receive additional permissions or to be able to access the account from multiple devices, he may do so and by that will be upgraded to a Full
user.
Note that clients should combine the login and registration process in order to make onboarding as simple as possible. The process should work as follows:
- Ask the user for his name (username).
- Try to register the user.
- If successful -> done
- Try to log in as a Guest user (see Users section).
- If successful -> done
- Otherwise, if the AuthExpectation indicates a Guest user exists with different credentials, tell the user that their username is already taken. For Full users continue with the next step.
- Show a password field in addition to the username field and tell the user to enter their password.
- Try to login in as a Full user.
- If successful -> done
- The user may retry logging in with different passwords or enter a different username.
- If the username is changed, hide and clear the password field and return to step 2.
Tokens
Most endpoints require a bearer token for authentication/authorization. Issued tokens are JWT tokens with a JSON payload.
The payload has a at least a permissions
array claim containing the permissions of the user. The possible permissions are defined in the MusicBot
library: Permission.kt.
{
"permissions": [
"pause",
"skip"
]
}
Users
Users are generally identified by their name (case-insensitive).
There are two types of users: Guest
users and Full
users.
Guest
users:
- are only temporarily stored by the server (in memory)
- have an automatically generated password, for example an Android instance ID
- only have the default set of permissions
Full
users:
- are permanently stored by the server (in a database)
- have an actual password chosen by the user
- can have additional permissions
When registering a new user, first a Guest
user is created. That user can then be converted to a Full
user by setting a password (see OpenAPI docs under changePassword
).
Log in
All users log in using the same HTTP operation. The user name and password are supplied as HTTP Basic Authentication, please bear in mind that the USERNAME:PASSWORD
string should be Base64-encoded using UTF-8. In case of Guest
users, the "password" should be automatically generated by the client.