Browse Source

fix: Markdown lint fixes

Owen Diffey 1 year ago
parent
commit
6b1dbef8b1
11 changed files with 365 additions and 219 deletions
  1. 7 0
      .markdownlint.json
  2. 4 2
      .wiki/Backend_Commands.md
  3. 125 116
      .wiki/Configuration.md
  4. 60 22
      .wiki/Installation.md
  5. 10 3
      .wiki/Technical_Overview.md
  6. 25 13
      .wiki/Upgrading.md
  7. 8 3
      .wiki/Utility_Script.md
  8. 12 5
      .wiki/Value_Formats.md
  9. 99 48
      CHANGELOG.md
  10. 8 4
      README.md
  11. 7 3
      SECURITY.md

+ 7 - 0
.markdownlint.json

@@ -0,0 +1,7 @@
+{
+    "MD013": {
+        "tables": false
+    },
+    "MD024": false,
+    "MD041": false 
+}

+ 4 - 2
.wiki/Backend_Commands.md

@@ -1,6 +1,7 @@
 # Backend Commands
 
-Backend commands are inputted via STDIN or if using the Utility Script by using `./musare.sh attach backend`.
+Backend commands are inputted via STDIN or if using the Utility Script by using
+`./musare.sh attach backend`.
 
 ## Commands
 
@@ -20,7 +21,8 @@ Backend commands are inputted via STDIN or if using the Utility Script by using
 
 ## Modules
 
-When specifying a module please use all lowercase. The available modules are as follows:
+When specifying a module please use all lowercase.
+The available modules are as follows:
 
 - Cache
 - DB

+ 125 - 116
.wiki/Configuration.md

@@ -4,94 +4,94 @@
 
 Location: `backend/config/default.json`
 
-| Property                                           | Description                                                                                                                                                                                                          |
-| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `mode`                                             | Should be either `development` or `production`.                                                                                                                                                                      |
-| `migration`                                        | Should be set to `true` if you need to update MongoDB documents to a newer version after an update. Should be false at all other times.                                                                              |
-| `secret`                                           | Set to something unique and secure - used by express's session module.                                                                                                                                               |
-| `domain`                                           | Should be the url where the site will be accessible from, usually `http://localhost` for non-Docker.                                                                                                                 |
-| `serverDomain`                                     | Should be the url where the backend will be accessible from, usually `http://localhost/backend` for docker or `http://localhost:8080` for non-Docker.                                                                |
-| `serverPort`                                       | Should be the port where the backend will listen on, should always be `8080` for Docker, and is recommended for non-Docker.                                                                                          |
-| `registrationDisabled`                             | If set to true, users can't register accounts.                                                                                                                                                                       |
-| `sendDataRequestEmails`                            | If `true` all admin users will be sent an email if a data request is received.                                                                                                                                       |
-| `apis.youtube.key`                                 | YouTube Data API v3 key, obtained from [here](https://developers.google.com/youtube/v3/getting-started).                                                                                                             |
-| `apis.youtube.rateLimit`                           | Minimum interval between YouTube API requests in milliseconds.                                                                                                                                                       |
-| `apis.youtube.requestTimeout`                      | YouTube API requests timeout in milliseconds.                                                                                                                                                                        |
-| `apis.youtube.retryAmount`                         | The amount of retries to perform of a failed YouTube API request.                                                                                                                                                    |
-| `apis.youtube.quotas`                              | Array of YouTube API quotas.                                                                                                                                                                                         |
-| `apis.youtube.quotas.type`                         | YouTube API quota type, should be one of `QUERIES_PER_DAY`, `QUERIES_PER_MINUTE` or `QUERIES_PER_100_SECONDS`.                                                                                                       |
-| `apis.youtube.quotas.title`                        | YouTube API quota title.                                                                                                                                                                                             |
-| `apis.youtube.quotas.limit`                        | YouTube API quota limit.                                                                                                                                                                                             |
-| `apis.recaptcha.secret`                            | ReCaptcha Site v3 secret, obtained from [here](https://www.google.com/recaptcha/admin).                                                                                                                              |
-| `apis.recaptcha.enabled`                           | Whether to enable ReCaptcha at email registration.                                                                                                                                                                   |
-| `apis.github.client`                               | GitHub OAuth Application client, obtained from [here](https://github.com/settings/developers).                                                                                                                       |
-| `apis.github.secret`                               | GitHub OAuth Application secret, obtained with client.                                                                                                                                                               |
-| `apis.github.redirect_uri`                         | The authorization callback url is the backend url with `/auth/github/authorize/callback` appended, for example `http://localhost/backend/auth/github/authorize/callback`.                                            |
-| `apis.discogs.client`                              | Discogs Application client, obtained from [here](https://www.discogs.com/settings/developers).                                                                                                                       |
-| `apis.discogs.secret`                              | Discogs Application secret, obtained with client.                                                                                                                                                                    |
-| `apis.discogs.enabled`                             | Whether to enable Discogs API usage.                                                                                                                                                                                 |
-| `cors.origin`                                      | Array of allowed request origin urls, for example `http://localhost`.                                                                                                                                                |
-| `smtp.host`                                        | SMTP Host                                                                                                                                                                                                            |
-| `smtp.port`                                        | SMTP Port                                                                                                                                                                                                            |
-| `smtp.auth.user`                                   | SMTP Username                                                                                                                                                                                                        |
-| `smtp.auth.pass`                                   | SMTP Password                                                                                                                                                                                                        |
-| `smtp.secure`                                      | Whether SMTP is secured.                                                                                                                                                                                             |
-| `smtp.enabled`                                     | Whether SMTP and sending emails is enabled.                                                                                                                                                                          |
-| `mail.from`                                        | The from field for mails sent from backend.                                                                                                                                                                          |
-| `redis.url`                                        | Should be left as default for Docker installations, else changed to `redis://localhost:6379/0`.                                                                                                                      |
-| `redis.password`                                   | Redis password.                                                                                                                                                                                                      |
-| `mongo.url`                                        | For Docker replace temporary MongoDB musare user password with one specified in `.env`, and for non-Docker replace `@musare:27017` with `@localhost:27017`.                                                          |
-| `cookie.domain`                                    | The ip or address you use to access the site, without protocols (http/https), so for example `localhost`.                                                                                                            |
-| `cookie.secure`                                    | Should be `true` for SSL connections, and `false` for normal http connections.                                                                                                                                       |
-| `cookie.SIDname`                                   | Name of the cookie stored for sessions.                                                                                                                                                                              |
-| `blacklistedCommunityStationNames`                | Array of blacklisted community station names.                                                                                                                                                                        |
-| `featuredPlaylists`                               | Array of featured playlist id's. Playlist privacy must be public.                                                                                                                                                    |
-| `skipConfigVersionCheck`                           | Skips checking if the config version is outdated or not. Should almost always be set to false.                                                                                                                       |
-| `skipDbDocumentsVersionCheck`                      | Skips checking if there are any DB documents outdated or not. Should almost always be set to false.                                                                                                                  |
-| `debug.stationIssue`                               | If set to `true` it will enable the `/debug_station` API endpoint on the backend, which provides information useful to debugging stations not skipping, as well as capure all jobs specified in `debug.captureJobs`. |
-| `debug.traceUnhandledPromises`                     | Enables the trace-unhandled package, which provides detailed information when a promise is unhandled.                                                                                                                |
-| `debug.captureJobs`                                | Array of jobs to capture for `debug.stationIssue`.                                                                                                                                                                   |
-| `defaultLogging.hideType`                          | Filters out specified message types from log, for example `INFO`, `SUCCESS`, `ERROR` and `STATION_ISSUE`.                                                                                                            |
-| `defaultLogging.blacklistedTerms`                  | Filters out messages containing specified terms from log, for example `success`.                                                                                                                                     |
-| `customLoggingPerModule.[module].hideType`         | Where `[module]` is a module name specify hideType as you would `defaultLogging.hideType` to overwrite default.                                                                                                      |
-| `customLoggingPerModule.[module].blacklistedTerms` | Where `[module]` is a module name specify blacklistedTerms as you would `defaultLogging.blacklistedTerms` to overwrite default.                                                                                      |
-| `configVersion`                                    | Version of the config. Every time the template changes, you should change your config accordingly and update the configVersion.                                                                                      |
+| Property | Description |
+| --- | --- |
+| `mode` | Should be either `development` or `production`. |
+| `migration` | Should be set to `true` if you need to update MongoDB documents to a newer version after an update. Should be false at all other times. |
+| `secret` | Set to something unique and secure - used by express's session module. |
+| `domain` | Should be the url where the site will be accessible from, usually `http://localhost` for non-Docker. |
+| `serverDomain` | Should be the url where the backend will be accessible from, usually `http://localhost/backend` for docker or `http://localhost:8080` for non-Docker. |
+| `serverPort` | Should be the port where the backend will listen on, should always be `8080` for Docker, and is recommended for non-Docker. |
+| `registrationDisabled` | If set to true, users can't register accounts. |
+| `sendDataRequestEmails` | If `true` all admin users will be sent an email if a data request is received. |
+| `apis.youtube.key` | YouTube Data API v3 key, obtained from [here](https://developers.google.com/youtube/v3/getting-started). |
+| `apis.youtube.rateLimit` | Minimum interval between YouTube API requests in milliseconds. |
+| `apis.youtube.requestTimeout` | YouTube API requests timeout in milliseconds. |
+| `apis.youtube.retryAmount` | The amount of retries to perform of a failed YouTube API request. |
+| `apis.youtube.quotas` | Array of YouTube API quotas. |
+| `apis.youtube.quotas.type` | YouTube API quota type, should be one of `QUERIES_PER_DAY`, `QUERIES_PER_MINUTE` or `QUERIES_PER_100_SECONDS`. |
+| `apis.youtube.quotas.title` | YouTube API quota title. |
+| `apis.youtube.quotas.limit` | YouTube API quota limit. |
+| `apis.recaptcha.secret` | ReCaptcha Site v3 secret, obtained from [here](https://www.google.com/recaptcha/admin). |
+| `apis.recaptcha.enabled` | Whether to enable ReCaptcha at email registration. |
+| `apis.github.client` | GitHub OAuth Application client, obtained from [here](https://github.com/settings/developers). |
+| `apis.github.secret` | GitHub OAuth Application secret, obtained with client. |
+| `apis.github.redirect_uri` | The authorization callback url is the backend url with `/auth/github/authorize/callback` appended, for example `http://localhost/backend/auth/github/authorize/callback`. |
+| `apis.discogs.client` | Discogs Application client, obtained from [here](https://www.discogs.com/settings/developers). |
+| `apis.discogs.secret` | Discogs Application secret, obtained with client. |
+| `apis.discogs.enabled` | Whether to enable Discogs API usage. |
+| `cors.origin` | Array of allowed request origin urls, for example `http://localhost`. |
+| `smtp.host` | SMTP Host |
+| `smtp.port` | SMTP Port |
+| `smtp.auth.user` | SMTP Username |
+| `smtp.auth.pass` | SMTP Password |
+| `smtp.secure` | Whether SMTP is secured. |
+| `smtp.enabled` | Whether SMTP and sending emails is enabled. |
+| `mail.from` | The from field for mails sent from backend. |
+| `redis.url` | Should be left as default for Docker installations, else changed to `redis://localhost:6379/0`. |
+| `redis.password` | Redis password. |
+| `mongo.url` | For Docker replace temporary MongoDB musare user password with one specified in `.env`, and for non-Docker replace `@musare:27017` with `@localhost:27017`. |
+| `cookie.domain` | The ip or address you use to access the site, without protocols (http/https), so for example `localhost`. |
+| `cookie.secure` | Should be `true` for SSL connections, and `false` for normal http connections. |
+| `cookie.SIDname` | Name of the cookie stored for sessions. |
+| `blacklistedCommunityStationNames` | Array of blacklisted community station names. |
+| `featuredPlaylists` | Array of featured playlist id's. Playlist privacy must be public. |
+| `skipConfigVersionCheck` | Skips checking if the config version is outdated or not. Should almost always be set to false. |
+| `skipDbDocumentsVersionCheck` | Skips checking if there are any DB documents outdated or not. Should almost always be set to false. |
+| `debug.stationIssue` | If set to `true` it will enable the `/debug_station` API endpoint on the backend, which provides information useful to debugging stations not skipping, as well as capure all jobs specified in `debug.captureJobs`.
+| `debug.traceUnhandledPromises` | Enables the trace-unhandled package, which provides detailed information when a promise is unhandled. |
+| `debug.captureJobs` | Array of jobs to capture for `debug.stationIssue`. |
+| `defaultLogging.hideType` | Filters out specified message types from log, for example `INFO`, `SUCCESS`, `ERROR` and `STATION_ISSUE`. |
+| `defaultLogging.blacklistedTerms` | Filters out messages containing specified terms from log, for example `success`. |
+| `customLoggingPerModule.[module].hideType` | Where `[module]` is a module name specify hideType as you would `defaultLogging.hideType` to overwrite default. |
+| `customLoggingPerModule.[module].blacklistedTerms` | Where `[module]` is a module name specify blacklistedTerms as you would `defaultLogging.blacklistedTerms` to overwrite default. |
+| `configVersion` | Version of the config. Every time the template changes, you should change your config accordingly and update the configVersion. |
 
 ## Frontend
 
 Location: `frontend/dist/config/default.json`
 
-| Property                            | Description                                                                                                                                                                                                                                |
-| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `mode`                              | Should be either `development` or `production`.                                                                                                                                                                                            |
-| `backend.apiDomain`                 | Should be the url where the backend will be accessible from, usually `http://localhost/backend` for docker or `http://localhost:8080` for non-Docker.                                                                                      |
-| `backend.websocketsDomain`          | Should be the same as the `apiDomain`, except using the `ws://` protocol instead of `http://` and with `/ws` at the end.                                                                                                                   |
-| `devServer.hmrClientPort`           | Should be the port on which the frontend will be accessible from, usually port `80`, or `443` if using SSL. Only used when running in dev mode.                                                                                            |
-| `devServer.port`                    | Should be the port where Vite's dev server will be accessible from, should always be port `81` for Docker since nginx listens on port 80, and is recommended to be port `80` for non-Docker. Only used when running in dev mode.           |
-| `frontendDomain`                    | Should be the url where the frontend will be accessible from, usually `http://localhost` for docker or `http://localhost:80` for non-Docker.                                                                                               |
-| `recaptcha.key`                     | ReCaptcha Site v3 key, obtained from [here](https://www.google.com/recaptcha/admin).                                                                                                                                                       |
-| `recaptcha.enabled`                 | Whether to enable ReCaptcha at email registration.                                                                                                                                                                                         |
-| `cookie.domain`                     | Should be the ip or address you use to access the site, without protocols (http/https), so for example `localhost`.                                                                                                                        |
-| `cookie.secure`                     | Should be `true` for SSL connections, and `false` for normal http connections.                                                                                                                                                             |
-| `cookie.SIDname`                    | Name of the cookie stored for sessions.                                                                                                                                                                                                    |
-| `siteSettings.logo_white`           | Path to the white logo image, by default it is `/assets/white_wordmark.png`.                                                                                                                                                               |
-| `siteSettings.logo_blue`            | Path to the blue logo image, by default it is `/assets/blue_wordmark.png`.                                                                                                                                                                 |
-| `siteSettings.logo_small`           | Path to the small white logo image, by default it is `/assets/favicon/mstile-144x144.png`.                                                                                                                                                 |
-| `siteSettings.sitename`             | Should be the name of the site.                                                                                                                                                                                                            |
-| `siteSettings.footerLinks`          | Add custom links to footer by specifying `"title": "url"`, e.g. `"GitHub": "https://github.com/Musare/Musare"`. You can disable about, team and news links (but not the pages themselves) by setting them to false, e.g. `"about": false`. |
-| `siteSettings.mediasession`         | Whether to enable mediasession functionality.                                                                                                                                                                                              |
-| `siteSettings.christmas`            | Whether to enable christmas theming.                                                                                                                                                                                                       |
-| `siteSettings.registrationDisabled` | If set to true, users can't register accounts.                                                                                                                                                                                             |
-| `messages.accountRemoval`           | Message to return to users on account removal.                                                                                                                                                                                             |
-| `shortcutOverrides`                 | Overwrite keyboard shortcuts, for example `"editSong.useAllDiscogs": { "keyCode": 68, "ctrl": true, "alt": true, "shift": false, "preventDefault": true }`.                                                                                |
-| `debug.git.remote`                  | Allow the website/users to view the current Git repository's remote. [^1]                                                                                                                                                                  |
-| `debug.git.remoteUrl`               | Allow the website/users to view the current Git repository's remote URL. [^1]                                                                                                                                                              |
-| `debug.git.branch`                  | Allow the website/users to view the current Git repository's branch. [^1]                                                                                                                                                                  |
-| `debug.git.latestCommit`            | Allow the website/users to view the current Git repository's latest commit hash. [^1]                                                                                                                                                      |
-| `debug.git.latestCommitShort`       | Allow the website/users to view the current Git repository's latest commit hash (short). [^1]                                                                                                                                              |
-| `debug.version`                     | Allow the website/users to view the current package.json version. [^1]                                                                                                                                                                     |
-| `skipConfigVersionCheck`            | Skips checking if the config version is outdated or not. Should almost always be set to false.                                                                                                                                             |
-| `configVersion`                     | Version of the config. Every time the template changes, you should change your config accordingly and update the configVersion.                                                                                                            |
+| Property | Description |
+| --- | --- |
+| `mode` | Should be either `development` or `production`. |
+| `backend.apiDomain` | Should be the url where the backend will be accessible from, usually `http://localhost/backend` for docker or `http://localhost:8080` for non-Docker. |
+| `backend.websocketsDomain` | Should be the same as the `apiDomain`, except using the `ws://` protocol instead of `http://` and with `/ws` at the end. |
+| `devServer.hmrClientPort` | Should be the port on which the frontend will be accessible from, usually port `80`, or `443` if using SSL. Only used when running in dev mode. |
+| `devServer.port` | Should be the port where Vite's dev server will be accessible from, should always be port `81` for Docker since nginx listens on port 80, and is recommended to be port `80` for non-Docker. Only used when running in dev mode. |
+| `frontendDomain` | Should be the url where the frontend will be accessible from, usually `http://localhost` for docker or `http://localhost:80` for non-Docker. |
+| `recaptcha.key` | ReCaptcha Site v3 key, obtained from [here](https://www.google.com/recaptcha/admin). |
+| `recaptcha.enabled` | Whether to enable ReCaptcha at email registration. |
+| `cookie.domain` | Should be the ip or address you use to access the site, without protocols (http/https), so for example `localhost`. |
+| `cookie.secure` | Should be `true` for SSL connections, and `false` for normal http connections. |
+| `cookie.SIDname` | Name of the cookie stored for sessions. |
+| `siteSettings.logo_white` | Path to the white logo image, by default it is `/assets/white_wordmark.png`. |
+| `siteSettings.logo_blue` | Path to the blue logo image, by default it is `/assets/blue_wordmark.png`. |
+| `siteSettings.logo_small` | Path to the small white logo image, by default it is `/assets/favicon/mstile-144x144.png`. |
+| `siteSettings.sitename` | Should be the name of the site. |
+| `siteSettings.footerLinks` | Add custom links to footer by specifying `"title": "url"`, e.g. `"GitHub": "https://github.com/Musare/Musare"`. You can disable about, team and news links (but not the pages themselves) by setting them to false, e.g. `"about": false`. |
+| `siteSettings.mediasession` | Whether to enable mediasession functionality. |
+| `siteSettings.christmas` | Whether to enable christmas theming. |
+| `siteSettings.registrationDisabled` | If set to true, users can't register accounts. |
+| `messages.accountRemoval` | Message to return to users on account removal. |
+| `shortcutOverrides` | Overwrite keyboard shortcuts, for example `"editSong.useAllDiscogs": { "keyCode": 68, "ctrl": true, "alt": true, "shift": false, "preventDefault": true }`. |
+| `debug.git.remote` | Allow the website/users to view the current Git repository's remote. [^1] |
+| `debug.git.remoteUrl` | Allow the website/users to view the current Git repository's remote URL. [^1] |
+| `debug.git.branch` | Allow the website/users to view the current Git repository's branch. [^1] |
+| `debug.git.latestCommit` | Allow the website/users to view the current Git repository's latest commit hash. [^1] |
+| `debug.git.latestCommitShort` | Allow the website/users to view the current Git repository's latest commit hash (short). [^1] |
+| `debug.version` | Allow the website/users to view the current package.json version. [^1] |
+| `skipConfigVersionCheck` | Skips checking if the config version is outdated or not. Should almost always be set to false. |
+| `configVersion` | Version of the config. Every time the template changes, you should change your config accordingly and update the configVersion. |
 
 [^1]: Requires a frontend restart to update. The data will be available from the frontend console and by the frontend code.
 
@@ -99,48 +99,57 @@ Location: `frontend/dist/config/default.json`
 
 Location: `.env`
 
-In the table below the container host refers to the IP address that the docker container listens on, setting this to `127.0.0.1` for example will only expose the configured port to localhost, whereas setting to `0.0.0.0` will expose the port on all interfaces.
-
-The container port refers to the external docker container port, used to access services within the container. Changing this does not require any changes to configuration within container. For example setting the `MONGO_PORT` to `21018` will allow you to access the mongo service through that port, even though the application within the container is listening on `21017`.
-
-| Property               | Description                                                                                                                                   |
-| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
-| `COMPOSE_PROJECT_NAME` | Should be a unique name for this installation, especially if you have multiple instances of Musare on the same machine.                       |
-| `RESTART_POLICY`       | Restart policy for docker containers, values can be found [here](https://docs.docker.com/config/containers/start-containers-automatically/).  |
-| `CONTAINER_MODE`       | Should be either `prod` or `dev`.                                                                                                             |
-| `DOCKER_COMMAND`       | Should be either `docker` or `podman`.                                                                                                        |
-| `BACKEND_HOST`         | Backend container host.                                                                                                                       |
-| `BACKEND_PORT`         | Backend container port.                                                                                                                       |
-| `FRONTEND_HOST`        | Frontend container host.                                                                                                                      |
-| `FRONTEND_PORT`        | Frontend container port.                                                                                                                      |
-| `FRONTEND_MODE`        | Should be either `prod` or `dev`.                                                                                                             |
-| `MONGO_HOST`           | Mongo container host.                                                                                                                         |
-| `MONGO_PORT`           | Mongo container port.                                                                                                                         |
-| `MONGO_ROOT_PASSWORD`  | Password of the root/admin user for MongoDB.                                                                                                  |
-| `MONGO_USER_USERNAME`  | Application username for MongoDB.                                                                                                             |
-| `MONGO_USER_PASSWORD`  | Application password for MongoDB.                                                                                                             |
-| `MONGO_DATA_LOCATION`  | The location where MongoDB stores its data. Usually the `.db` folder inside the `Musare` folder.                                              |
-| `MONGO_VERSION`        | The MongoDB version to use for scripts and docker-compose. Must be numerical. Currently supported MongoDB versions are 4.0, 4.2, 4.4 and 5.0. |
-| `REDIS_HOST`           | Redis container host.                                                                                                                         |
-| `REDIS_PORT`           | Redis container port.                                                                                                                         |
-| `REDIS_PASSWORD`       | Redis password.                                                                                                                               |
-| `REDIS_DATA_LOCATION`  | The location where Redis stores its data. Usually the `.redis` folder inside the `Musare` folder.                                             |
-| `BACKUP_LOCATION`      | Directory to store musare.sh backups. Defaults to `/backups` in script location.                                                              |
-| `BACKUP_NAME`          | Name of musare.sh backup files. Defaults to `musare-$(date +"%Y-%m-%d-%s").dump`.                                                             |
+In the table below the container host refers to the IP address that the docker
+container listens on, setting this to `127.0.0.1` for example will only expose
+the configured port to localhost, whereas setting to `0.0.0.0` will expose the
+port on all interfaces.
+
+The container port refers to the external docker container port, used to access
+services within the container. Changing this does not require any changes to
+configuration within container. For example setting the `MONGO_PORT` to `21018`
+will allow you to access the mongo service through that port, even though the
+application within the container is listening on `21017`.
+
+| Property | Description |
+| --- | --- |
+| `COMPOSE_PROJECT_NAME` | Should be a unique name for this installation, especially if you have multiple instances of Musare on the same machine. |
+| `RESTART_POLICY` | Restart policy for docker containers, values can be found [here](https://docs.docker.com/config/containers/start-containers-automatically/). |
+| `CONTAINER_MODE` | Should be either `prod` or `dev`.  |
+| `DOCKER_COMMAND` | Should be either `docker` or `podman`.  |
+| `BACKEND_HOST` | Backend container host. |
+| `BACKEND_PORT` | Backend container port. |
+| `FRONTEND_HOST` | Frontend container host. |
+| `FRONTEND_PORT` | Frontend container port. |
+| `FRONTEND_MODE` | Should be either `prod` or `dev`. |
+| `MONGO_HOST` | Mongo container host. |
+| `MONGO_PORT` | Mongo container port. |
+| `MONGO_ROOT_PASSWORD` | Password of the root/admin user for MongoDB. |
+| `MONGO_USER_USERNAME` | Application username for MongoDB. |
+| `MONGO_USER_PASSWORD` | Application password for MongoDB. |
+| `MONGO_DATA_LOCATION` | The location where MongoDB stores its data. Usually the `.db` folder inside the `Musare` folder. |
+| `MONGO_VERSION` | The MongoDB version to use for scripts and docker-compose. Must be numerical. Currently supported MongoDB versions are 4.0, 4.2, 4.4 and 5.0. |
+| `REDIS_HOST` | Redis container host. |
+| `REDIS_PORT` | Redis container port. |
+| `REDIS_PASSWORD` | Redis password. |
+| `REDIS_DATA_LOCATION` | The location where Redis stores its data. Usually the `.redis` folder inside the `Musare` folder. |
+| `BACKUP_LOCATION` | Directory to store musare.sh backups. Defaults to `/backups` in script location. |
+| `BACKUP_NAME` | Name of musare.sh backup files. Defaults to `musare-$(date +"%Y-%m-%d-%s").dump`. |
 
 ## Docker-compose override
 
-You may want to override the docker-compose files in some specific cases. For this, you can create a `docker-compose.override.yml` file.
+You may want to override the docker-compose files in some specific cases.
+For this, you can create a `docker-compose.override.yml` file.  
 
 ### Run backend on its own domain
 
-One example usecase for the override is to expose the backend port so you can run it separately from the frontend. An example file for this is as follows:
+One example usecase for the override is to expose the backend port so you can
+run it separately from the frontend. An example file for this is as follows:
 
 ```yml
 services:
-    backend:
-        ports:
-            - "${BACKEND_HOST}:${BACKEND_PORT}:8080"
+  backend:
+    ports:
+      - "${BACKEND_HOST}:${BACKEND_PORT}:8080"
 ```
 
 This assumes that you have also set `BACKEND_PORT` inside your `.env` file.

+ 60 - 22
.wiki/Installation.md

@@ -1,6 +1,7 @@
 # Installation
 
-Musare can be installed with Docker (recommended) or without, guides for both installations can be found below.
+Musare can be installed with Docker (recommended) or without, guides for both
+installations can be found below.
 
 To update an existing installation please see [Upgrading](./Upgrading.md).
 
@@ -16,22 +17,28 @@ To update an existing installation please see [Upgrading](./Upgrading.md).
 
 1. `git clone https://github.com/Musare/Musare.git`
 2. `cd Musare`
-3. `cp backend/config/template.json backend/config/default.json` and configure as per [Configuration](./Configuration.md#Backend)
-4. `cp frontend/dist/config/template.json frontend/dist/config/default.json` and configure as per [Configuration](./Configuration.md#Frontend)
-5. `cp .env.example .env` and configure as per [Configuration](./Configuration.md#Docker-Environment).
+3. `cp backend/config/template.json backend/config/default.json` and configure
+as per [Configuration](./Configuration.md#Backend)
+4. `cp frontend/dist/config/template.json frontend/dist/config/default.json`
+and configure as per [Configuration](./Configuration.md#Frontend)
+5. `cp .env.example .env` and configure as per
+[Configuration](./Configuration.md#Docker-Environment).
 6. `./musare.sh build`
 7. `./musare.sh start`
-8. **(optional)** Register a new user on the website and grant the admin role by running `./musare.sh admin add USERNAME`.
+8. **(optional)** Register a new user on the website and grant the admin role
+by running `./musare.sh admin add USERNAME`.
 
 ### Fixing the "couldn't connect to docker daemon" error
 
-**Windows Only**
+- **Windows Only**
 
-Some people have had issues while trying to execute the `docker-compose` command.
-To fix this, you will have to run `docker-machine env default`.
-This command will print various variables.
-At the bottom, it will say something similar to `@FOR /f "tokens=*" %i IN ('docker-machine env default') DO @%i`.
-Run this command in your shell. You will have to do this command for every shell you want to run `docker-compose` in (every session).
+    Some people have had issues while trying to execute the `docker-compose` command.
+    To fix this, you will have to run `docker-machine env default`.
+    This command will print various variables.
+    At the bottom, it will say something similar to
+    `@FOR /f "tokens=*" %i IN ('docker-machine env default') DO @%i`.
+    Run this command in your shell. You will have to do this command for every
+    shell you want to run `docker-compose` in (every session).
 
 ---
 
@@ -52,20 +59,26 @@ Run this command in your shell. You will have to do this command for every shell
 2. `cd Musare`
 3. [Setup MongoDB](#Setting-up-MongoDB)
 4. [Setup Redis](#Setting-up-Redis)
-5. `cp backend/config/template.json backend/config/default.json` and configure as per [Configuration](./Configuration.md#Backend)
-6. `cp frontend/dist/config/template.json frontend/dist/config/default.json` and configure as per [Configuration](./Configuration.md#Frontend)
+5. `cp backend/config/template.json backend/config/default.json` and configure
+as per [Configuration](./Configuration.md#Backend)
+6. `cp frontend/dist/config/template.json frontend/dist/config/default.json`
+and configure as per [Configuration](./Configuration.md#Frontend)
 7. `cd frontend && npm install && cd ..`
 8. `cd backend && npm install && cd ..`
 9. Start services
     - **Linux**
         1. Execute `systemctl start redis mongod`
-        2. Execute `cd frontend && npm run dev` and `cd backend && npm run dev` separately.
+        2. Execute `cd frontend && npm run dev` and
+        `cd backend && npm run dev` separately.
     - **Windows**
-        - **Automatic** Run `windows-start.cmd` or just double click the `windows-start.cmd` file and all servers will automatically start up.
+        - **Automatic** Run `windows-start.cmd` or just double click the
+        `windows-start.cmd` file and all servers will automatically start up.
         - **Manual**
             1. Run `startRedis.cmd` and `startMongo.cmd` to start Redis and Mongo.
-            2. Execute `cd frontend && npm run dev` and `cd backend && npm run dev` separately.
-10. **(optional)** Register a new user on the website and grant the admin role by running the following in the mongodb shell.
+            2. Execute `cd frontend && npm run dev` and
+            `cd backend && npm run dev` separately.
+10. **(optional)** Register a new user on the website and grant the admin role
+by running the following in the mongodb shell.
 
     ```bash
     use musare
@@ -97,7 +110,18 @@ Run this command in your shell. You will have to do this command for every shell
 
     3. Create an admin user
 
-        `db.createUser({user: 'admin', pwd: 'PASSWORD_HERE', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})`
+        ```javascript
+        db.createUser({
+            user: "admin",
+            pwd: "PASSWORD_HERE",
+            roles: [
+                {
+                    role: "userAdminAnyDatabase",
+                    db: "admin"
+                }
+            ]
+        })
+        ```
 
     4. Connect to the Musare database
 
@@ -105,7 +129,18 @@ Run this command in your shell. You will have to do this command for every shell
 
     5. Create the "musare" user
 
-        `db.createUser({user: 'musare', pwd: 'OTHER_PASSWORD_HERE', roles: [{role: 'readWrite', db: 'musare'}]})`
+        ```javascript
+        db.createUser({
+            user: "musare",
+            pwd: "OTHER_PASSWORD_HERE",
+            roles: [
+                {
+                    role: "readWrite",
+                    db: "musare"
+                }
+            ]
+        })
+        ```
 
     6. Exit
 
@@ -132,12 +167,15 @@ Run this command in your shell. You will have to do this command for every shell
 
     2. Create a file called `startRedis.cmd` in the main folder with the contents:
 
-        `"C:\Path\To\Redis\redis-server.exe" "C:\Path\To\Redis\redis.windows.conf" "--requirepass" "PASSWORD"`
+        `"C:\Path\To\Redis\redis-server.exe" "C:\Path\To\Redis\redis.windows.conf"
+        "--requirepass" "PASSWORD"`
 
-        And again, make sure that the paths lead to the proper config and executable. Replace `PASSWORD` with your Redis password.
+        And again, make sure that the paths lead to the proper config and
+        executable. Replace `PASSWORD` with your Redis password.
 
 - **Linux**
     1. In `/etc/redis/redis.conf`
         1. Uncomment `notify-keyspace-events` and set its value to `Ex`.
-        2. Uncomment `requirepass foobared` and replace foobared with your Redis password.
+        2. Uncomment `requirepass foobared` and replace foobared with your
+        Redis password.
     2. Restart Redis `systemctl restart redis`

+ 10 - 3
.wiki/Technical_Overview.md

@@ -10,10 +10,17 @@
 
 ### Frontend
 
-The frontend is a [vue-cli](https://github.com/vuejs/vue-cli) generated, [vue-loader](https://github.com/vuejs/vue-loader) single page app, that's served over Nginx or Express. The Nginx server not only serves the frontend, but can also serve as a load balancer for requests going to the backend.
+The frontend is a [vue-cli](https://github.com/vuejs/vue-cli) generated,
+[vue-loader](https://github.com/vuejs/vue-loader) single page app, that's
+served over Nginx or Express. The Nginx server not only serves the frontend,
+but can also serve as a load balancer for requests going to the backend.
 
 ### Backend
 
-The backend is a scalable NodeJS / Redis / MongoDB app. User sessions are stored in a central Redis server. All data is stored in a central MongoDB server. The Redis and MongoDB servers are replicated to several secondary nodes, which can become the primary node if the current primary node goes down.
+The backend is a scalable NodeJS / Redis / MongoDB app. User sessions are stored
+in a central Redis server. All data is stored in a central MongoDB server.
+TheRedis and MongoDB servers are replicated to several secondary nodes, which
+can become the primary node if the current primary node goes down.
 
-We currently only utilize 1 backend, 1 MongoDB server and 1 Redis server running for production, though it is relatively easy to expand.
+We currently only utilize 1 backend, 1 MongoDB server and 1 Redis server running
+for production, though it is relatively easy to expand.

+ 25 - 13
.wiki/Upgrading.md

@@ -9,16 +9,23 @@ To install a new instance please see [Installation](./Installation.md).
 ### Instructions
 
 1. Make a backup! `./musare.sh backup`
-2. Execute `./musare.sh update`. If an update requires any configuration changes or database migrations, you will be notified.
-    - To update configuration compare example configs against your own and add/update/remove any properties as needed. For more information on properties see [Configuration](./Configuration.md). Frontend and backend configuration updates always update the `configVersion` property.
-        - Backend, compare `backend/config/template.json` against `backend/config/default.json`.
-        - Frontend, compare `frontend/dist/config/template.json` against `frontend/dist/config/default.json`.
+2. Execute `./musare.sh update`. If an update requires any configuration changes
+or database migrations, you will be notified.
+    - To update configuration compare example configs against your own and
+    add/update/remove any properties as needed. For more information on
+    properties see [Configuration](./Configuration.md). Frontend and backend
+    configuration updates always update the `configVersion` property.
+        - Backend, compare `backend/config/template.json` against
+        `backend/config/default.json`.
+        - Frontend, compare `frontend/dist/config/template.json` against
+        `frontend/dist/config/default.json`.
         - Environment, compare `.env.example` against `.env`.
     - To migrate database;
         - `./musare.sh stop backend`
         - Set `migration` to `true` in  `backend/config/default.json`
         - `./musare.sh start backend`.
-        - Follow backend logs and await migration completion notice `./musare.sh attach backend`.
+        - Follow backend logs and await migration completion notice
+        `./musare.sh attach backend`.
         - `./musare.sh stop backend`
         - Set `migration` to `false` in  `backend/config/default.json`
         - `./musare.sh start backend`.
@@ -34,7 +41,9 @@ To install a new instance please see [Installation](./Installation.md).
 3. `git pull`
 4. `cd frontend && npm install`
 5. `cd ../backend && npm install`
-6. Compare example configs against your own and add/update/remove any properties as needed. For more information on properties see [Configuration](./Configuration.md). Frontend and backend configuration updates always update the `configVersion` property.
+6. Compare example configs against your own and add/update/remove any properties
+as needed. For more information on properties see [Configuration](./Configuration.md).
+Frontend and backend configuration updates always update the `configVersion` property.
     - Backend, compare `backend/config/template.json` against `backend/config/default.json`.
     - Frontend, compare `frontend/dist/config/template.json` against `frontend/dist/config/default.json`.
 7. Start MongoDB and Redis services.
@@ -46,26 +55,29 @@ To install a new instance please see [Installation](./Installation.md).
     - Set `migration` to `false` in  `backend/config/default.json`
 9. Start backend and frontend services.
 
-# Upgrade/downgrade MongoDB
+## Upgrade/downgrade MongoDB
 
-Make sure to always look at the upgrade/downgrade instructions in the [MongoDB release notes](https://docs.mongodb.com/manual/release-notes) before, and always make a full backup of your data before proceeding.
+Make sure to always look at the upgrade/downgrade instructions in the
+[MongoDB release notes](https://docs.mongodb.com/manual/release-notes) before,
+and always make a full backup of your data before proceeding.
 
-## Docker
+### Docker
 
-### Instructions
+#### Instructions
 
 1. Stop the backend (`./musare.sh stop backend`)
 2. Make a backup of MongoDB (`./musare.sh backup`)
-3. Stop and reset the mongo container and delete the database folder (`./musare.sh reset mongo`)
+3. Stop and reset the mongo container and delete the database folder
+(`./musare.sh reset mongo`)
 4. Change the MongoDB version inside your .env file.
 5. Start the mongo container (`./musare.sh start mongo`)
 6. Import your backup of MongoDB (`./musare.sh restore`)
     - Note: backups are stored inside the backups folder by default.
 7. Start the backend (`./musare.sh start backend`)
 
-## Non-Docker
+### Non-Docker
 
-### Instructions
+#### Instructions
 
 1. Stop your backend
 2. Make a backup of MongoDB

+ 8 - 3
.wiki/Utility_Script.md

@@ -1,8 +1,10 @@
 # Utility Script
 
-The utility script is a tool that allows for the simple management of a Musare Docker instance.
+The utility script is a tool that allows for the simple management of a Musare
+Docker instance.
 
-Please follow the [Docker Installation Guide](./Installation.md#Docker) before using this script.
+Please follow the [Docker Installation Guide](./Installation.md#Docker) before
+using this script.
 
 ## Usage
 
@@ -32,4 +34,7 @@ Linux (Bash):
 
 ### Services
 
-There are currently 4 services; frontend, backend, redis and mongo. Where services is a parameter you can specify any of these, or multiple seperated by spaces, for example `./musare.sh restart frontend backend` to restart the frontend and backend. If no services are specified all will be selected.
+There are currently 4 services; frontend, backend, redis and mongo. Where
+services is a parameter you can specify any of these, or multiple seperated by
+spaces, for example `./musare.sh restart frontend backend` to restart the
+frontend and backend. If no services are specified all will be selected.

+ 12 - 5
.wiki/Value_Formats.md

@@ -4,11 +4,13 @@ Every input needs validation, below is the required formatting of each value.
 
 - **User**
   - Username
-    - Description: Any letter from a-z in any case, numbers, underscores and dashes. Must contain at least 1 letter or number.
+    - Description: Any letter from a-z in any case, numbers, underscores and
+    dashes. Must contain at least 1 letter or number.
     - Length: From 2 to 32 characters.
     - Regex: ```/^[A-Za-z0-9_]+$/```
   - Name
-    - Description: Any letter from any language in any case, numbers, underscores, dashes, periods, apostrophes and spaces. Must contain at least 1 letter or number.
+    - Description: Any letter from any language in any case, numbers, underscores,
+    dashes, periods, apostrophes and spaces. Must contain at least 1 letter or number.
     - Length: From 2 to 64 characters.
     - Regex: ```/^[\p{L}0-9 .'_-]+$/u```
   - Email
@@ -16,7 +18,8 @@ Every input needs validation, below is the required formatting of each value.
     - Length: From 3 to 254 characters.
     - Regex: ```/^[\x00-\x7F]+@[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)?$/```
   - Password
-    - Description: Must include at least one lowercase letter, one uppercase letter, one number and one special character.
+    - Description: Must include at least one lowercase letter, one uppercase
+    letter, one number and one special character.
     - Length: From 6 to 200 characters.
     - Regex: ```/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])[A-Za-z\d!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/```
   - Ban Reason
@@ -55,8 +58,12 @@ Every input needs validation, below is the required formatting of each value.
     - Quantity: Min 1, max 16.
     - Regex: ```/^[\x00-\x7F]+$/```
   - Tags
-    - Description: Any letter, numbers and underscores. Can be with out without data in square brackets. The base tag and data between brackets follow the same styling. If there's no data in between square brackets, there are no square brackets.
-    - Length: From 1 to 64 characters for the base part, 1 to 64 characters for data in square brackets.
+    - Description: Any letter, numbers and underscores. Can be with out without
+    data in square brackets. The base tag and data between brackets follow the
+    same styling. If there's no data in between square brackets, there are no
+    square brackets.
+    - Length: From 1 to 64 characters for the base part, 1 to 64 characters for
+    data in square brackets.
     - Regex: ```/^[a-zA-Z0-9_]{1,64}$|^[a-zA-Z0-9_]{1,64}\[[a-zA-Z0-9_]{1,64}\]$/```
   - Thumbnail
     - Description: Valid url. If site is secure only https prepended urls are valid.

+ 99 - 48
CHANGELOG.md

@@ -2,7 +2,8 @@
 
 ## [v3.6.0] - 2022-06-12
 
-This release includes all changes from v3.6.0-rc1, in addition to the following. Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
+This release includes all changes from v3.6.0-rc1, in addition to the following.
+Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
 
 ### Fixed
 
@@ -29,22 +30,29 @@ Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
 
 ### Changed
 
-- refactor: Display user display names instead of usernames in links and station user list
+- refactor: Display user display names instead of usernames in links and station
+user list
 - refactor: Use YouTube thumbnail as a fallback to song thumbnails
-- refactor: Use song thumbnail component in Edit Song modal, with fallback disabled
+- refactor: Use song thumbnail component in Edit Song modal, with fallback
+disabled
 - refactor: Edit Song positioning and styling tweaks
 - refactor: Moved vote skip processing to dedicated job
 - refactor: Prevent auto vote to skip if locally paused
 - refactor: Added info header card to admin pages
-- refactor: Allowed for song style usage of YouTube videos in playlists and station queues
-- refactor: Moved ratings to dedicated model within media module, with YouTube video support
-- refactor: Replace songs with YouTube videos in playlists, station queues and ratings on removal
+- refactor: Allowed for song style usage of YouTube videos in playlists and
+station queues
+- refactor: Moved ratings to dedicated model within media module, with YouTube
+video support
+- refactor: Replace songs with YouTube videos in playlists, station queues and
+ratings on removal
 - refactor: Moved drag box handling to mixin
 - refactor: Floating box logic and styling improvements
-- refactor: Added support for creation of songs from YouTube videos in Edit Song(s) modals
+- refactor: Added support for creation of songs from YouTube videos in
+Edit Song(s) modals
 - refactor: Compile production frontend as part of docker image build
 - refactor: Changed default frontend docker mode to prod
-- refactor: Import Album can now use a selection of songs or YouTube videos in addition to YouTube playlist importing.
+- refactor: Import Album can now use a selection of songs or YouTube videos in
+addition to YouTube playlist importing.
 
 ### Fixed
 
@@ -84,7 +92,8 @@ Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
 
 ## [v3.5.0] - 2022-04-28
 
-This release includes all changes from v3.5.0-rc1 and v3.5.0-rc2, in addition to the following. Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
+This release includes all changes from v3.5.0-rc1 and v3.5.0-rc2, in addition to
+the following. Upgrade instructions can be found at [.wiki/Upgrading](.wiki/Upgrading.md).
 
 ### Changed
 
@@ -128,18 +137,23 @@ This release includes all changes from v3.5.0-rc1, in addition to the following.
 
 ### Changed
 
-- refactor: No longer showing unlisted stations on homepage if not owned by user unless toggled by admin
+- refactor: No longer showing unlisted stations on homepage if not owned by user
+unless toggled by admin
 - refactor: Renamed station excludedPlaylists to blacklist
 - refactor: Unified station update functions and events
 - refactor: Replaced Manage Station settings dropdowns with select elements
 - refactor: Use a local object to edit stations before saving
-- refactor: Replace station modes with 2 modules which are independently toggleable and configurable on every station
-  - Requests: Replaces party mode, users can request songs or auto request from playlists
-  - Autofill: Replaces playlist mode, owners select songs to autofill queue. Also includes old playMode and includedPlaylist functionality
+- refactor: Replace station modes with 2 modules which are independently
+toggleable and configurable on every station
+  - Requests: Replaces party mode, users can request songs or auto request from
+  playlists
+  - Autofill: Replaces playlist mode, owners select songs to autofill queue.
+  Also includes old playMode and includedPlaylist functionality
 - refactor: Update active team
 - refactor: Separate docker container modes
 - refactor: Improve musare.sh exit code usage and other tweaks
-- refactor: Made Main Header/Footer, Modal, QuickConfirm and UserIdToUsername global components
+- refactor: Made Main Header/Footer, Modal, QuickConfirm and UserIdToUsername
+global components
 - refactor: Use crypto random values instead of math.random to create UUID
 - refactor: Added trailing slash to URL startsWith check
 - chore: Updated frontend package-lock.json version from 1 to 2
@@ -160,14 +174,18 @@ This release includes all changes from v3.5.0-rc1, in addition to the following.
 
 ### **Breaking Changes**
 
-This release makes the MongoDB version configurable in the .env file. Prior to this release, the MongoDB version was 4.0. We recommend upgrading to 5.0 or 4.4. Upgrade instructions can be found in [.wiki/Upgrading](.wiki/Upgrading.md#Upgrade/downgradeMongoDB).
+This release makes the MongoDB version configurable in the .env file. Prior to
+this release, the MongoDB version was 4.0. We recommend upgrading to 5.0 or 4.4.
+Upgrade instructions can be found in [.wiki/Upgrading](.wiki/Upgrading.md#Upgrade/downgradeMongoDB).
 
-Please run the Update All Songs job after upgrading to ensure playlist and station song data accuracy.
+Please run the Update All Songs job after upgrading to ensure playlist and
+station song data accuracy.
 
 ### Added
 
 - feat: Scroll to next song item in Edit Songs queue
-- feat: Reset Advanced Table bulk actions popup position on screen resize if in initial position
+- feat: Reset Advanced Table bulk actions popup position on screen resize if in
+initial position
 - feat: Global LESS variables
 - refactor: Configurable Main Footer links
 - feat: Configurable Docker container restart policy
@@ -193,9 +211,12 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 - refactor: Replaced night mode toggle slider in Main Header with day/night icons
 - refactor: Replaced SASS/SCCS with LESS
-- refactor: Hide registration buttons and prevent opening register modal if registration is disabled
-- refactor: Trim certain user modifiable strings in playlists, songs, reports and stations
-- refactor: Allow title to wrap to a 2nd line if no there are no artists in Song Item
+- refactor: Hide registration buttons and prevent opening register modal if
+registration is disabled
+- refactor: Trim certain user modifiable strings in playlists, songs, reports
+and stations
+- refactor: Allow title to wrap to a 2nd line if no there are no artists in
+Song Item
 - refactor: Consistent border-radius
 - refactor: Consistent box-shadow
 - refactor: Replace deprecated /deep/ selector with :deep()
@@ -215,14 +236,17 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 ### Fixed
 
-- fix: Relative homepage header height causing overlay of content on non-standard resolutions
+- fix: Relative homepage header height causing overlay of content on
+non-standard resolutions
 - fix: Unable to toggle nightmode on mobile logged out on homepage
 - fix: Station card top row should not wrap
 - fix: Advanced Table CTRL/SHIFT select rows does not work
-- fix: Station not automatically removed from favorite stations on homepage on deletion
+- fix: Station not automatically removed from favorite stations on homepage on
+deletion
 - fix: Playlist songs do not contain verified attribute
 - fix: Newest news should only fetch published items
-- fix: Deleting a song as an admin adds activity item that you deleted a song from genre playlists
+- fix: Deleting a song as an admin adds activity item that you deleted a song
+from genre playlists
 - fix: News item divider has no top/bottom margin
 - fix: Edit Song failing to fetch song reports
 - fix: Station refill can include current song
@@ -237,7 +261,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 - fix: Playlists could sometimes not be created due to restrictive MongoDB index
 - fix: Add tags to songs doesn't give any feedback to the user
 - fix: AdvancedTable checkboxes overlay mobile navbar dropdown
-- fix: Nightmode -> EditSong -> Discogs API Result release on hover style is messed up
+- fix: Nightmode -> EditSong -> Discogs API Result release on hover style is
+messed up
 - fix: Station creation validation always failing
 - fix: Station info display name and description overflow horizontally
 - fix: Volume slider incorrect sensitivity
@@ -273,14 +298,18 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 ### **Breaking Changes**
 
-This release makes the MongoDB version configurable in the .env file. Prior to this release, the MongoDB version was 4.0. We recommend upgrading to 5.0 or 4.4. Upgrade instructions can be found in [.wiki/Upgrading](.wiki/Upgrading.md#Upgrade/downgradeMongoDB).
+This release makes the MongoDB version configurable in the .env file. Prior to
+this release, the MongoDB version was 4.0. We recommend upgrading to 5.0 or 4.4.
+Upgrade instructions can be found in [.wiki/Upgrading](.wiki/Upgrading.md#Upgrade/downgradeMongoDB).
 
-Please run the Update All Songs job after upgrading to ensure playlist and station song data accuracy.
+Please run the Update All Songs job after upgrading to ensure playlist and
+station song data accuracy.
 
 ### Added
 
 - feat: Scroll to next song item in Edit Songs queue
-- feat: Reset Advanced Table bulk actions popup position on screen resize if in initial position
+- feat: Reset Advanced Table bulk actions popup position on screen resize if in
+initial position
 - feat: Global LESS variables
 - refactor: Configurable Main Footer links
 - feat: Configurable Docker container restart policy
@@ -306,9 +335,12 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 - refactor: Replaced night mode toggle slider in Main Header with day/night icons
 - refactor: Replaced SASS/SCCS with LESS
-- refactor: Hide registration buttons and prevent opening register modal if registration is disabled
-- refactor: Trim certain user modifiable strings in playlists, songs, reports and stations
-- refactor: Allow title to wrap to a 2nd line if no there are no artists in Song Item
+- refactor: Hide registration buttons and prevent opening register modal if
+registration is disabled
+- refactor: Trim certain user modifiable strings in playlists, songs, reports
+and stations
+- refactor: Allow title to wrap to a 2nd line if no there are no artists in
+Song Item
 - refactor: Consistent border-radius
 - refactor: Consistent box-shadow
 - refactor: Replace deprecated /deep/ selector with :deep()
@@ -327,14 +359,17 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 ### Fixed
 
-- fix: Relative homepage header height causing overlay of content on non-standard resolutions
+- fix: Relative homepage header height causing overlay of content on
+non-standard resolutions
 - fix: Unable to toggle nightmode on mobile logged out on homepage
 - fix: Station card top row should not wrap
 - fix: Advanced Table CTRL/SHIFT select rows does not work
-- fix: Station not automatically removed from favorite stations on homepage on deletion
+- fix: Station not automatically removed from favorite stations on homepage on
+deletion
 - fix: Playlist songs do not contain verified attribute
 - fix: Newest news should only fetch published items
-- fix: Deleting a song as an admin adds activity item that you deleted a song from genre playlists
+- fix: Deleting a song as an admin adds activity item that you deleted a song
+from genre playlists
 - fix: News item divider has no top/bottom margin
 - fix: Edit Song failing to fetch song reports
 - fix: Station refill can include current song
@@ -349,7 +384,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 - fix: Playlists could sometimes not be created due to restrictive MongoDB index
 - fix: Add tags to songs doesn't give any feedback to the user
 - fix: AdvancedTable checkboxes overlay mobile navbar dropdown
-- fix: Nightmode -> EditSong -> Discogs API Result release on hover style is messed up
+- fix: Nightmode -> EditSong -> Discogs API Result release on hover style is
+messed up
 - fix: Station creation validation always failing
 - fix: Station info display name and description overflow horizontally
 - fix: Volume slider incorrect sensitivity
@@ -373,7 +409,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 ### Added
 
 - feat: Admin ability to edit another users playlist
-- feat: Admin/Users ability to delete user, resend verify email and resend reset password email
+- feat: Admin/Users ability to delete user, resend verify email and resend reset
+password email
 - feat: Bulk Actions modal for admin/songs bulk editing tags, genres and artists.
 - feat: Button and job to recalculate all song likes and dislikes
 - feat: Confirm modal, for more detailed confirmation of actions
@@ -384,7 +421,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 - feat: MediaSession controls (experimental)
 - feat: New admin area advanced table
   - Advanced filter/search functionality with autocomplete for certain attributes
-  - Bulk update actions popup for songs. Ability to bulk edit, verify, unverify, delete, update tags, genres and artists.
+  - Bulk update actions popup for songs. Ability to bulk edit, verify, unverify,
+  delete, update tags, genres and artists.
   - Hide columns
   - Keyboard shortcuts
   - Local and query storage of table configuration
@@ -400,7 +438,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 - feat: Redirect /admin to tab route
 - feat: Run jobs dropdown in admin area pages to replace buttons
 - feat: Song tagging
-- feat: Store the latest admin tab in localStorage and reopen that tab next time you go to admin
+- feat: Store the latest admin tab in localStorage and reopen that tab next time
+you go to admin
 - feat: View Musare version and Git info from backend/frontend
 - chore: Security.md file
 
@@ -408,8 +447,10 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 - refactor: Auto suggest component
 - refactor: Renamed confirm component to quick confirm
-- refactor: Song status is now a verified boolean, with hidden songs migrated to unverified with a hidden tag
-- refactor: Treat liked/disliked playlists more like normal user playlists, except the ability to rename and delete
+- refactor: Song status is now a verified boolean, with hidden songs migrated to
+unverified with a hidden tag
+- refactor: Treat liked/disliked playlists more like normal user playlists,
+except the ability to rename and delete
 - refactor: Unify song update socket events
 - refactor: web-kit scrollbars and support Firefox scrollbar styling
 - chore: Update material icons font
@@ -419,14 +460,18 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 - fix: Any logged in user can perform certain actions on any playlist
 - fix: Changing your username does not update your username stored locally
-- fix: Clicking outside of the edit song modal whilst its loading, or attempt to close in any other way, will prevent you from closing the modal
+- fix: Clicking outside of the edit song modal whilst its loading, or attempt to
+close in any other way, will prevent you from closing the modal
 - fix: Data request emails are always sent from musare.com
-- fix: Frontend ws.js, when onConnect is called right after the socket connects (within 150ms), the onConnect callback is called twice
+- fix: Frontend ws.js, when onConnect is called right after the socket connects
+(within 150ms), the onConnect callback is called twice
 - fix: Header logo and modal close icon does not have user-select: none;
 - fix: Home header min-height not set
 - fix: Importing YouTube playlist has errors
 - fix: Indexing reports prints "string" in backend logs
-- fix: Memory leak on the frontend, where every time the backend restarts the homepage tries to index the stations X times the server has restarted whilst the homepage has been active
+- fix: Memory leak on the frontend, where every time the backend restarts the
+homepage tries to index the stations X times the server has restarted whilst the
+homepage has been active
 - fix: Modal footer overflow cropped
 - fix: Move song to bottom of queue does not work on occasion
 - fix: News items on news page overflow horizontally on mobile
@@ -448,7 +493,8 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 ### Fixed
 
 - fix: Jumpy candy cane seeker bar
-- fix: Christmas lights on home header when logged out and on mobile aren't on bottom of element
+- fix: Christmas lights on home header when logged out and on mobile aren't on
+bottom of element
 - fix: Christmas lights hover just below main header
 - fix: Christmas lights box shadow cropped
 
@@ -463,12 +509,14 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
   - Santa on sleigh seeker icon
   - Christmas lights below main and modal header
   - Snow falling in the background
-- feat: Added new featured playlist feature to manage station, specify with backend config option
+- feat: Added new featured playlist feature to manage station, specify with
+backend config option
 - feat: Added red station theme
 
 ### Changed
 
-- refactor: Replaced standard red with darker red, except for christmas and red station themes.
+- refactor: Replaced standard red with darker red, except for christmas and red
+station themes.
 
 ## [v3.1.1] - 2021-11-15
 
@@ -487,8 +535,10 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 - refactor: Removed bulma dependency
 - refactor: Patched missing styling after removing bulma
-- refactor: Refactored createStation modal to allow for official station creation from admin area
-- refactor: Refactored login and register modals to open on top of homepage from route
+- refactor: Refactored createStation modal to allow for official station
+creation from admin area
+- refactor: Refactored login and register modals to open on top of homepage from
+route
 
 ### Fixed
 
@@ -496,4 +546,5 @@ Please run the Update All Songs job after upgrading to ensure playlist and stati
 
 ## [v3.0.0] - 2021-10-31
 
-Major update including feature changes, improvements and bug fixes. Changelog not completed for this release.
+Major update including feature changes, improvements and bug fixes.
+Changelog not completed for this release.

+ 8 - 4
README.md

@@ -2,7 +2,8 @@
 
 # Musare
 
-Musare is an open-source collaborative music listening and catalogue curation application. Currently supporting YouTube based content.
+Musare is an open-source collaborative music listening and catalogue curation
+application. Currently supporting YouTube based content.
 
 A production demonstration instance of Musare can be found at [demo.musare.com](https://demo.musare.com).
 
@@ -35,9 +36,11 @@ A production demonstration instance of Musare can be found at [demo.musare.com](
     - Configurable access level and per user request limit
     - Automatically request songs from selected playlists
     - Ability to search for songs from verified catalogue or YouTube videos
-  - Autofill - Toggleable module to allow owners to configure automatic filling of the queue from selected playlists
+  - Autofill - Toggleable module to allow owners to configure automatic filling
+  of the queue from selected playlists
     - Configurable song limit
-    - Play mode option to randomly play many playlists, or sequentially play one playlist
+    - Play mode option to randomly play many playlists, or sequentially play one
+    playlist
     - Ability to search for playlists on Musare
   - Ability to blacklist playlists to prevent songs within from playing
   - Themes
@@ -50,7 +53,8 @@ A production demonstration instance of Musare can be found at [demo.musare.com](
   - Vote to skip songs
   - Force skipping song by admins or owners
 - **Song Management**
-  - Verify songs to allow them to be searched for and added to automatically generated genre playlists
+  - Verify songs to allow them to be searched for and added to automatically
+  generated genre playlists
   - Discogs integration to import metadata
   - Ability for users to report issues with songs and admins to resolve
   - Configurable skip duration and song duration to cut intros and outros

+ 7 - 3
SECURITY.md

@@ -6,8 +6,12 @@ Only the latest published production version is supported.
 
 ## Reporting a Vulnerability
 
-To report a vulnerability with a supported version please get in touch with us via email at [core@musare.com](mailto:core@musare.com).
+To report a vulnerability with a supported version please get in touch with us
+via email at [core@musare.com](mailto:core@musare.com).
 
-We endeavour to respond to reports as soon as possible, this may however take a few days. Please refrain from reporting security issues in public forums such as GitHub issues.
+We endeavour to respond to reports as soon as possible, this may however take a
+few days. Please refrain from reporting security issues in public forums such as
+GitHub issues.
 
-Reports will be disclosed via a security advisory once fixes are included in a production release.
+Reports will be disclosed via a security advisory once fixes are included in a
+production release.