Skip to content
This repository has been archived by the owner on Oct 28, 2023. It is now read-only.

BjoernPetersen/MusicBot-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

OpenAPI specification of the MusicBot REST-API

Resources

License

Stars

Watchers

Forks

Packages

No packages published