<commit_before># Rolling Release Changes

These changes have not yet been incorporated into a stable release, but if you are on the latest version of the rolling release channel, you can take advantage of these new features and fixes.

This release includes many contributions from members of our community as part of the annual Hacktoberfest event, where we selected a number of items that our core developer team, along with the community submitting pull requests, could work on during the month. 

## New Features/Changes

- **Media storage overhaul**: The way media is stored and managed has been completely changed:
  - Station media, live recordings, and backups have "Storage Locations" that you can manage via System Administration.
  - Storage locations can either be local to the server or using a remote storage location that uses the Amazon S3 protocol (S3, DigitalOcean Spaces, Wasabi, etc)
  - Existing stations have automatically been migrated to Storage Locations.
  - If more than one station shares a storage location, media is only processed once for all of the stations, instead of being processed separately.

- Statistics now include the total _unique_ listeners for a given station in a given day. On the dashboard, you can switch from the average listener statistics to the unique listener totals from a new tab selector above the charts.

- There is a new, much friendlier animation that displays when Docker installations of AzuraCast are waiting for their dependent services to be fully ready. This avoids showing the previous messages, which often looked like errors, even though they weren't.

- The global "Administer Users" and "Administer Permissions" permissions have been *removed* from the system. In both cases, users who had this permission could effectively make themselves a super administrator user, so user and permission management is now only accessible by users with the "Administer All" permission. 

## Code Quality/Technical Changes

- **Removal of InfluxDB**: Despite the ever-increasing complexity of AzuraCast, sometimes we review our dependencies to ensure if the additional load and maintenance overhead they cause is worth the benefit to our system. In the case of our InfluxDB time series database, we decided that this dependency was no longer needed, and its purposes could be fully handled by our existing MariaDB database. This decision was also motivated by Influxdata releasing a non-backwards-compatible new version of the software, which would present a very challenging migration to our users. Instead, we have removed the dependency entirely. 

- **Multiple code quality improvements**: We have incorporated stricter code standards checking into our continuous integration (CI) process and updated our code accordingly, so any code that publishes to stations will meet a stringent set of code style, standards, static analysis and pass our normal test suites.

- **Songs table overhaul**: A `Songs` table has existed for the entirety of AzuraCast's existence as the authoritative source of spelling and capitalization for all song titles, artists, etc. This solution was not scalable to large stations and there was no effective way to clean up this table once it became vastly oversized. This update removes the `Songs` table entirely and relocates its attributes to the various tables that used it before (song history, request queue, etc). 

- **File Operations API Changes**: In order to clarify the meaning of parameters, the `file` parameter for the following API endpoints has been changed to `current_directory`:
  - `/api/station/{id}/files/list`
  - `/api/station/{id}/files/directories`
  - `/api/station/{id}/files/batch`<commit_msg>Add security updates to changelog.<commit_after># Rolling Release Changes

These changes have not yet been incorporated into a stable release, but if you are on the latest version of the rolling release channel, you can take advantage of these new features and fixes.

This release includes many contributions from members of our community as part of the annual Hacktoberfest event, where we selected a number of items that our core developer team, along with the community submitting pull requests, could work on during the month. 

## New Features/Changes

- **Media storage overhaul**: The way media is stored and managed has been completely changed:
  - Station media, live recordings, and backups have "Storage Locations" that you can manage via System Administration.
  - Storage locations can either be local to the server or using a remote storage location that uses the Amazon S3 protocol (S3, DigitalOcean Spaces, Wasabi, etc)
  - Existing stations have automatically been migrated to Storage Locations.
  - If more than one station shares a storage location, media is only processed once for all of the stations, instead of being processed separately.

- Statistics now include the total _unique_ listeners for a given station in a given day. On the dashboard, you can switch from the average listener statistics to the unique listener totals from a new tab selector above the charts.

- There is a new, much friendlier animation that displays when Docker installations of AzuraCast are waiting for their dependent services to be fully ready. This avoids showing the previous messages, which often looked like errors, even though they weren't.

- **Security Update:** The global "Administer Users" and "Administer Permissions" permissions have been *removed* from the system. In both cases, users who had this permission could effectively make themselves a super administrator user, so user and permission management is now only accessible by users with the "Administer All" permission. 

- **Security Update:** A possible arbitrary code execution issue with Liquidsoap DJ authentication is resolved by changing the way input is escaped. (#3465)

## Code Quality/Technical Changes

- **Removal of InfluxDB**: Despite the ever-increasing complexity of AzuraCast, sometimes we review our dependencies to ensure if the additional load and maintenance overhead they cause is worth the benefit to our system. In the case of our InfluxDB time series database, we decided that this dependency was no longer needed, and its purposes could be fully handled by our existing MariaDB database. This decision was also motivated by Influxdata releasing a non-backwards-compatible new version of the software, which would present a very challenging migration to our users. Instead, we have removed the dependency entirely. 

- **Multiple code quality improvements**: We have incorporated stricter code standards checking into our continuous integration (CI) process and updated our code accordingly, so any code that publishes to stations will meet a stringent set of code style, standards, static analysis and pass our normal test suites.

- **Songs table overhaul**: A `Songs` table has existed for the entirety of AzuraCast's existence as the authoritative source of spelling and capitalization for all song titles, artists, etc. This solution was not scalable to large stations and there was no effective way to clean up this table once it became vastly oversized. This update removes the `Songs` table entirely and relocates its attributes to the various tables that used it before (song history, request queue, etc). 

- **File Operations API Changes**: In order to clarify the meaning of parameters, the `file` parameter for the following API endpoints has been changed to `current_directory`:
  - `/api/station/{id}/files/list`
  - `/api/station/{id}/files/directories`
  - `/api/station/{id}/files/batch`
{'fraction_non_alphanumeric': 0.04358099238645314, 'fraction_numerical': 0.0010501443948542925, 'mean_word_length': 4.78072837632777, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6663513', 'n_tokens_mistral': 1698, 'n_tokens_neox': 1604, 'n_words': 1111}