diff --git a/composer.lock b/composer.lock index 99eb39206..c5f3a2f37 100644 --- a/composer.lock +++ b/composer.lock @@ -9111,16 +9111,16 @@ }, { "name": "zircote/swagger-php", - "version": "3.2.1", + "version": "3.2.3", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "eef1dd98e6f6071573908fd7007270510051e5f9" + "reference": "41ed0eb1dacebe2c365623b3f9ab13d1531a03da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/eef1dd98e6f6071573908fd7007270510051e5f9", - "reference": "eef1dd98e6f6071573908fd7007270510051e5f9", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/41ed0eb1dacebe2c365623b3f9ab13d1531a03da", + "reference": "41ed0eb1dacebe2c365623b3f9ab13d1531a03da", "shasum": "" }, "require": { @@ -9131,7 +9131,7 @@ "symfony/yaml": ">=3.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", "phpunit/phpunit": ">=8" }, "bin": [ @@ -9176,9 +9176,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/3.2.1" + "source": "https://github.com/zircote/swagger-php/tree/3.2.3" }, - "time": "2021-05-20T21:46:24+00:00" + "time": "2021-06-25T04:08:57+00:00" } ], "packages-dev": [ diff --git a/src/Controller/Api/Stations/QueueController.php b/src/Controller/Api/Stations/QueueController.php index 31d908e25..de44cab7f 100644 --- a/src/Controller/Api/Stations/QueueController.php +++ b/src/Controller/Api/Stations/QueueController.php @@ -63,6 +63,7 @@ class QueueController extends AbstractStationApiCrudController * @OA\Get(path="/station/{station_id}/queue/{id}", * tags={"Stations: Queue"}, * description="Retrieve details of a single queued item.", + * @OA\Parameter(ref="#/components/parameters/station_id_required"), * @OA\Parameter( * name="id", * in="path", @@ -81,6 +82,7 @@ class QueueController extends AbstractStationApiCrudController * @OA\Delete(path="/station/{station_id}/queue/{id}", * tags={"Stations: Queue"}, * description="Delete a single queued item.", + * @OA\Parameter(ref="#/components/parameters/station_id_required"), * @OA\Parameter( * name="id", * in="path", diff --git a/src/Controller/Api/Stations/ServicesController.php b/src/Controller/Api/Stations/ServicesController.php index 73eed78de..415e03efb 100644 --- a/src/Controller/Api/Stations/ServicesController.php +++ b/src/Controller/Api/Stations/ServicesController.php @@ -83,10 +83,10 @@ class ServicesController * name="action", * description="The action to perform (start, stop, restart)", * in="path", - * content="restart", * required=false, * @OA\Schema( - * type="string" + * type="string", + * default="restart" * ) * ), * @OA\Response(response=200, description="Success", @OA\Schema(ref="#/components/schemas/Api_Status")), @@ -140,10 +140,10 @@ class ServicesController * name="action", * description="The action to perform (for all: start, stop, restart; for Liquidsoap only: skip, disconnect)", * in="path", - * content="restart", * required=false, * @OA\Schema( - * type="string" + * type="string", + * default="restart" * ) * ), * @OA\Response(response=200, description="Success", @OA\Schema(ref="#/components/schemas/Api_Status")), diff --git a/web/static/api/openapi.yml b/web/static/api/openapi.yml index 35934fb1f..a1db17875 100644 --- a/web/static/api/openapi.yml +++ b/web/static/api/openapi.yml @@ -137,7 +137,7 @@ paths: tags: - 'Administration: Roles' description: 'Return a list of all available permissions.' - operationId: 'App\Controller\Api\Admin\PermissionsController::__invoke' + operationId: d5b93c0462b0833fa0e840b1f5e346c3 responses: '200': description: Success @@ -151,7 +151,7 @@ paths: tags: - 'Administration: Relays' description: 'Returns all necessary information to relay all ''relayable'' stations.' - operationId: 'App\Controller\Api\Admin\RelaysController::__invoke' + operationId: 8a95959aa86cede6b49a943ea6744d46 parameters: [] responses: '200': @@ -167,7 +167,7 @@ paths: tags: - 'Administration: Roles' description: 'List all current roles in the system.' - operationId: 'App\Controller\Api\Admin\RolesController::fromArray' + operationId: b117c9dc01aa525d0ddd9344f4d30cac responses: '200': description: Success @@ -186,7 +186,7 @@ paths: tags: - 'Administration: Roles' description: 'Create a new role.' - operationId: 'App\Controller\Api\Admin\RolesController::fromArray' + operationId: b3ae4432841b4e93c412d12ec0c664a9 requestBody: content: application/json: @@ -209,7 +209,7 @@ paths: tags: - 'Administration: Roles' description: 'Retrieve details for a single current role.' - operationId: 'App\Controller\Api\Admin\RolesController::fromArray' + operationId: 353f4f6816f3ca15b207ccd360f743bf parameters: - name: id @@ -235,7 +235,7 @@ paths: tags: - 'Administration: Roles' description: 'Update details of a single role.' - operationId: 'App\Controller\Api\Admin\RolesController::fromArray' + operationId: 4337def90cce91c8c2d90f4dd44d74c6 parameters: - name: id @@ -266,7 +266,7 @@ paths: tags: - 'Administration: Roles' description: 'Delete a single role.' - operationId: 'App\Controller\Api\Admin\RolesController::fromArray' + operationId: c9f6273421106c4bc2542e8f624d6cfd parameters: - name: id @@ -293,7 +293,7 @@ paths: tags: - 'Administration: Settings' description: 'List the current values of all editable system settings.' - operationId: 'App\Controller\Api\Admin\SettingsController::listAction' + operationId: f6bfa4aab7bc91da0a78d9edbc4b449f responses: '200': description: Success @@ -310,7 +310,7 @@ paths: tags: - 'Administration: Settings' description: 'Update settings to modify any settings provided.' - operationId: 'App\Controller\Api\Admin\SettingsController::updateAction' + operationId: bd9bccac1cce3ba2951e4dfbf1ef8f6f requestBody: content: application/json: @@ -454,7 +454,7 @@ paths: tags: - 'Administration: Storage Locations' description: 'List all current storage locations in the system.' - operationId: 'App\Controller\Api\Admin\StorageLocationsController::listAction' + operationId: acdefb6bde5fef7807c9090a54ae35f4 responses: '200': description: Success @@ -473,7 +473,7 @@ paths: tags: - 'Administration: Storage Locations' description: 'Create a new storage location.' - operationId: 'App\Controller\Api\Admin\StorageLocationsController::listAction' + operationId: 690615420ccff1ff93dfc65d75a223a8 requestBody: content: application/json: @@ -496,7 +496,7 @@ paths: tags: - 'Administration: Storage Locations' description: 'Retrieve details for a single storage location.' - operationId: 'App\Controller\Api\Admin\StorageLocationsController::listAction' + operationId: 87704196f58bd67d40c31dd8facd1ac6 parameters: - name: id @@ -522,7 +522,7 @@ paths: tags: - 'Administration: Storage Locations' description: 'Update details of a single storage location.' - operationId: 'App\Controller\Api\Admin\StorageLocationsController::listAction' + operationId: 6182e6410f5b30e7de42de094be837f8 parameters: - name: id @@ -553,7 +553,7 @@ paths: tags: - 'Administration: Storage Locations' description: 'Delete a single storage location.' - operationId: 'App\Controller\Api\Admin\StorageLocationsController::listAction' + operationId: 54b173c6d3f00230c9bf903599106110 parameters: - name: id @@ -675,7 +675,7 @@ paths: tags: - 'Administration: Users' description: 'Delete a single user.' - operationId: 'App\Controller\Api\Admin\UsersController::deleteAction' + operationId: 45bfe78420f35ac6dd36a33efaecbdbe parameters: - name: id @@ -702,7 +702,7 @@ paths: tags: - Miscellaneous description: 'Returns an affirmative response if the API is active.' - operationId: 'App\Controller\Api\IndexController::statusAction' + operationId: bc32a129ca3e8ad2060b71bdd90da78d parameters: [] responses: '200': @@ -716,7 +716,7 @@ paths: tags: - Miscellaneous description: 'Returns the time (with formatting) in GMT and the user''s local time zone, if logged in.' - operationId: 'App\Controller\Api\IndexController::timeAction' + operationId: 3092a8238a915a0b6b324f2a90942a94 parameters: [] responses: '200': @@ -730,7 +730,7 @@ paths: tags: - 'Now Playing' description: 'Returns a full summary of all stations'' current state.' - operationId: 'App\Controller\Api\NowplayingController::__invoke' + operationId: fc7ba75e1ae504860545914b115414ad parameters: [] responses: '200': @@ -746,7 +746,7 @@ paths: tags: - 'Now Playing' description: 'Returns a full summary of the specified station''s current state.' - operationId: 'App\Controller\Api\NowplayingController::__invoke' + operationId: 96fc53c2baaace0eaec655bcfba86065 parameters: - $ref: '#/components/parameters/station_id_required' @@ -764,7 +764,7 @@ paths: tags: - 'Stations: Media' description: 'Returns the album art for a song, or a generic image.' - operationId: 'App\Controller\Api\Stations\Art\GetArtAction::__invoke' + operationId: 1b9853f0af3c8fbe4d3af9af0e6d1a45 parameters: - $ref: '#/components/parameters/station_id_required' @@ -918,7 +918,7 @@ paths: tags: - 'Stations: History' description: 'Return song playback history items for a given station.' - operationId: 'App\Controller\Api\Stations\HistoryController::__invoke' + operationId: fe481989a4419d377f2c698951d33cb9 parameters: - $ref: '#/components/parameters/station_id_required' @@ -957,7 +957,7 @@ paths: tags: - 'Stations: General' description: 'Returns a list of stations.' - operationId: 'App\Controller\Api\Stations\IndexController::listAction' + operationId: ad7bc9e8a7d8356cc3fda373eaa731db parameters: [] responses: '200': @@ -973,7 +973,7 @@ paths: tags: - 'Stations: General' description: 'Return information about a single station.' - operationId: 'App\Controller\Api\Stations\IndexController::indexAction' + operationId: dd934e9386f9fbd6ff1e3001f6b48da9 parameters: - $ref: '#/components/parameters/station_id_required' @@ -991,7 +991,7 @@ paths: tags: - 'Stations: Listeners' description: 'Return detailed information about current listeners.' - operationId: 'App\Controller\Api\Stations\ListenersAction::__invoke' + operationId: 55f8ec17b4cf8b8339589705a4d7da24 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1016,7 +1016,7 @@ paths: tags: - 'Stations: Mount Points' description: 'List all current mount points.' - operationId: 'App\Controller\Api\Stations\MountsController::viewRecord' + operationId: 146531e6ded994eeaa2a306d92d8b90e parameters: - $ref: '#/components/parameters/station_id_required' @@ -1038,7 +1038,7 @@ paths: tags: - 'Stations: Mount Points' description: 'Create a new mount point.' - operationId: 'App\Controller\Api\Stations\MountsController::viewRecord' + operationId: 8e558e6f9f222bee4ca2157ce699f097 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1064,7 +1064,7 @@ paths: tags: - 'Stations: Mount Points' description: 'Retrieve details for a single mount point.' - operationId: 'App\Controller\Api\Stations\MountsController::viewRecord' + operationId: 3d9eedb16ec362816994b6d8599f0727 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1092,7 +1092,7 @@ paths: tags: - 'Stations: Mount Points' description: 'Update details of a single mount point.' - operationId: 'App\Controller\Api\Stations\MountsController::viewRecord' + operationId: 738b845333262f4aac393c95f50aa1f8 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1125,7 +1125,7 @@ paths: tags: - 'Stations: Mount Points' description: 'Delete a single mount point.' - operationId: 'App\Controller\Api\Stations\MountsController::viewRecord' + operationId: 0b2bce55d0fa09ab6ad8142d84aabda0 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1582,7 +1582,7 @@ paths: tags: - 'Stations: Queue' description: 'Return information about the upcoming song playback queue.' - operationId: 'App\Controller\Api\Stations\QueueController::listAction' + operationId: 9ddb577c2cf0cd64ece8c75d8f524ddd parameters: - $ref: '#/components/parameters/station_id_required' @@ -1608,6 +1608,8 @@ paths: - 'Stations: Queue' description: 'Retrieve details of a single queued item.' parameters: + - + $ref: '#/components/parameters/station_id_required' - name: id in: path @@ -1635,6 +1637,8 @@ paths: - 'Stations: Queue' description: 'Delete a single queued item.' parameters: + - + $ref: '#/components/parameters/station_id_required' - name: id in: path @@ -1795,7 +1799,7 @@ paths: tags: - 'Stations: Song Requests' description: 'Return a list of requestable songs.' - operationId: 'App\Controller\Api\Stations\RequestsController::listAction' + operationId: d97d958c5c0c3daec1415a0070be0f2e parameters: - $ref: '#/components/parameters/station_id_required' @@ -1811,7 +1815,7 @@ paths: tags: - 'Stations: Song Requests' description: 'Submit a song request.' - operationId: 'App\Controller\Api\Stations\RequestsController::submitAction' + operationId: 3242e46d9bc44e60804789a12ad7f895 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1835,7 +1839,7 @@ paths: tags: - 'Stations: Schedules' description: 'Return upcoming and currently ongoing schedule entries.' - operationId: 'App\Controller\Api\Stations\ScheduleController::__invoke' + operationId: c4bd8a99f5774d5549127a5825745f05 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1871,7 +1875,7 @@ paths: tags: - 'Stations: Service Control' description: 'Retrieve the current status of all serivces associated with the radio broadcast.' - operationId: 'App\Controller\Api\Stations\ServicesController::statusAction' + operationId: 745ceb49eea34152e8178ea44199654e parameters: - $ref: '#/components/parameters/station_id_required' @@ -1888,7 +1892,7 @@ paths: tags: - 'Stations: Service Control' description: 'Restart all services associated with the radio broadcast.' - operationId: 'App\Controller\Api\Stations\ServicesController::restartAction' + operationId: 718d2799a60687f9e1a38378aca6a87e parameters: - $ref: '#/components/parameters/station_id_required' @@ -1905,7 +1909,7 @@ paths: tags: - 'Stations: Service Control' description: 'Perform service control actions on the radio frontend (Icecast, SHOUTcast, etc.)' - operationId: 'App\Controller\Api\Stations\ServicesController::frontendAction' + operationId: 1ef21fbec5e30787b422fc110218d607 parameters: - $ref: '#/components/parameters/station_id_required' @@ -1916,7 +1920,7 @@ paths: required: false schema: type: string - content: restart + default: restart responses: '200': description: Success @@ -1930,7 +1934,7 @@ paths: tags: - 'Stations: Service Control' description: 'Perform service control actions on the radio backend (Liquidsoap)' - operationId: 'App\Controller\Api\Stations\ServicesController::backendAction' + operationId: 996770a2522ed05a9f1e6540fd239fcc parameters: - $ref: '#/components/parameters/station_id_required' @@ -1941,7 +1945,7 @@ paths: required: false schema: type: string - content: restart + default: restart responses: '200': description: Success @@ -2233,20 +2237,20 @@ components: type: string example: azuratest_radio description: + nullable: true description: 'Station description' type: string example: 'An AzuraCast station!' - nullable: true url: + nullable: true description: 'Station homepage URL' type: string example: 'https://www.azuracast.com/' - nullable: true genre: + nullable: true description: 'The genre of the station' type: string example: Variety - nullable: true type: description: 'Which broadcasting software (frontend) the station uses' type: string @@ -2285,52 +2289,52 @@ components: type: string example: local path: + nullable: true type: string example: /var/azuracast/stations/azuratest_radio/media - nullable: true s3CredentialKey: + nullable: true type: string example: your-key-here - nullable: true s3CredentialSecret: + nullable: true type: string example: your-secret-here - nullable: true s3Region: + nullable: true type: string example: your-region - nullable: true s3Version: + nullable: true type: string example: latest - nullable: true s3Bucket: + nullable: true type: string example: your-bucket-name - nullable: true s3Endpoint: + nullable: true type: string example: 'https://your-region.digitaloceanspaces.com' - nullable: true storageQuota: + nullable: true type: string example: '50 GB' - nullable: true storageUsed: + nullable: true type: string example: '1 GB' - nullable: true uri: description: 'The URI associated with the storage location.' type: string example: /var/azuracast/www stations: + nullable: true description: 'The stations using this storage location, if any.' type: array items: type: string example: 'AzuraTest Radio' - nullable: true Api_DetailedSongHistory: allOf: - @@ -2361,10 +2365,10 @@ components: type: string example: 'Error description.' formatted_message: + nullable: true description: 'The HTML-formatted text description of the error.' type: string example: 'Error description.
Detailed error text.' - nullable: true extra_data: description: 'Stack traces and other supplemental data.' type: array @@ -2403,11 +2407,11 @@ components: connected_on: description: 'UNIX timestamp that the user first connected.' type: integer - example: 1623804005 + example: 1624884448 connected_until: description: 'UNIX timestamp that the user disconnected (or the latest timestamp if they are still connected).' type: integer - example: 1623804005 + example: 1624884448 connected_time: description: 'Number of seconds that the user has been connected.' type: integer @@ -2438,14 +2442,14 @@ components: live: $ref: '#/components/schemas/Api_NowPlayingLive' now_playing: - description: 'Current Song' nullable: true + description: 'Current Song' oneOf: - $ref: '#/components/schemas/Api_NowPlayingCurrentSong' playing_next: - description: 'Next Playing Song' nullable: true + description: 'Next Playing Song' oneOf: - $ref: '#/components/schemas/Api_StationQueue' @@ -2458,13 +2462,13 @@ components: type: boolean example: true cache: + nullable: true description: 'Debugging information about where the now playing data comes from.' type: string enum: - hit - database - station - nullable: true type: object Api_NowPlayingCurrentSong: allOf: @@ -2507,10 +2511,10 @@ components: type: string example: 'DJ Jazzy Jeff' broadcast_start: + nullable: true description: 'The start timestamp of the current broadcast, if one is available.' type: integer example: '1591548318' - nullable: true type: object Api_Podcast: type: object @@ -2520,28 +2524,28 @@ components: - properties: id: - type: string nullable: true + type: string storage_location_id: + nullable: true type: integer - nullable: true title: - type: string nullable: true + type: string link: - type: string nullable: true + type: string description: - type: string nullable: true + type: string language: - type: string nullable: true + type: string has_custom_art: type: boolean art: - type: string nullable: true + type: string art_updated_at: type: integer categories: @@ -2560,19 +2564,19 @@ components: - properties: id: - type: string nullable: true + type: string title: - type: string nullable: true + type: string description: - type: string nullable: true + type: string explicit: type: boolean publish_at: - type: integer nullable: true + type: integer has_media: type: boolean media: @@ -2580,27 +2584,27 @@ components: has_custom_art: type: boolean art: - type: string nullable: true + type: string art_updated_at: type: integer Api_PodcastMedia: properties: id: - type: string nullable: true + type: string original_name: - type: string nullable: true + type: string length: type: number format: float length_text: - type: string nullable: true + type: string path: - type: string nullable: true + type: string type: object Api_Song: properties: @@ -2649,21 +2653,21 @@ components: played_at: description: 'UNIX timestamp when playback started.' type: integer - example: 1623804005 + example: 1624884448 duration: description: 'Duration of the song in seconds' type: integer example: 180 playlist: + nullable: true description: 'Indicates the playlist that the song was played from, if available, or empty string if not.' type: string example: 'Top 100' - nullable: true streamer: + nullable: true description: 'Indicates the current streamer that was connected, if available, or empty string if not.' type: string example: 'Test DJ' - nullable: true is_request: description: 'Indicates whether the song is a listener request.' type: boolean @@ -2700,10 +2704,10 @@ components: description: 'The full URL to listen to the default mount of the station' example: 'http://localhost:8000/radio.mp3' url: + nullable: true description: 'The public URL of the station.' type: string example: 'https://example.com/' - nullable: true public_player_url: description: 'The public player URL for the station.' example: 'https://example.com/public/example_station' @@ -2759,10 +2763,10 @@ components: Api_StationPlaylistQueue: properties: spm_id: + nullable: true description: 'ID of the StationPlaylistMedia record associating this track with the playlist' type: integer example: 1 - nullable: true media_id: description: 'ID of the StationPlaylistMedia record associating this track with the playlist' type: integer @@ -2785,16 +2789,16 @@ components: cued_at: description: 'UNIX timestamp when playback is expected to start.' type: integer - example: 1623804005 + example: 1624884448 duration: description: 'Duration of the song in seconds' type: integer example: 180 playlist: + nullable: true description: 'Indicates the playlist that the song was played from, if available, or empty string if not.' type: string example: 'Top 100' - nullable: true is_request: description: 'Indicates whether the song is a listener request.' type: boolean @@ -2811,10 +2815,10 @@ components: - properties: autodj_custom_uri: + nullable: true description: 'Custom AutoDJ playback URI, if it exists.' type: string example: '' - nullable: true Api_StationRemote: properties: id: @@ -2829,15 +2833,15 @@ components: description: 'Full listening URL specific to this mount' example: 'http://localhost:8000/radio.mp3' bitrate: + nullable: true description: 'Bitrate (kbps) of the broadcasted audio (if known)' type: integer example: 128 - nullable: true format: + nullable: true description: 'Audio encoding format of broadcasted audio (if known)' type: string example: mp3 - nullable: true listeners: $ref: '#/components/schemas/Api_NowPlayingListeners' type: object @@ -2874,7 +2878,7 @@ components: start_timestamp: description: 'The start time of the schedule entry, in UNIX format.' type: integer - example: 1623804005 + example: 1624884448 start: description: 'The start time of the schedule entry, in ISO 8601 format.' type: string @@ -2882,7 +2886,7 @@ components: end_timestamp: description: 'The end time of the schedule entry, in UNIX format.' type: integer - example: 1623804005 + example: 1624884448 end: description: 'The start time of the schedule entry, in ISO 8601 format.' type: string @@ -2922,7 +2926,7 @@ components: timestamp: description: 'The current UNIX timestamp' type: integer - example: 1623804005 + example: 1624884448 type: object Api_Time: properties: @@ -2970,13 +2974,13 @@ components: name: type: string short_name: + nullable: true description: 'The programmatic name for the field. Can be auto-generated from the full name.' type: string - nullable: true auto_assign: + nullable: true description: 'An ID3v2 field to automatically assign to this value, if it exists in the media file.' type: string - nullable: true Relay: type: object allOf: @@ -2988,18 +2992,18 @@ components: type: string example: 'https://custom-url.example.com' name: + nullable: true type: string example: Relay - nullable: true is_visible_on_public_pages: type: boolean example: true created_at: type: integer - example: 1623804005 + example: 1624884448 updated_at: type: integer - example: 1623804005 + example: 1624884448 Role: type: object allOf: @@ -3018,15 +3022,15 @@ components: app_unique_identifier: type: string base_url: + nullable: true description: 'Site Base URL' type: string example: 'https://your.azuracast.site' - nullable: true instance_name: + nullable: true description: 'AzuraCast Instance Name' type: string example: 'My AzuraCast Instance' - nullable: true prefer_browser_url: description: 'Prefer Browser URL (If Available)' type: boolean @@ -3043,18 +3047,18 @@ components: type: boolean example: 'false' api_access_control: + nullable: true description: 'API ''Access-Control-Allow-Origin'' header' type: string example: '*' - nullable: true enable_websockets: description: 'Whether to use Websockets for Now Playing data updates.' type: boolean example: 'false' analytics: + nullable: true description: 'Listener Analytics Collection' type: string - nullable: true check_for_updates: description: 'Check for Updates and Announcements' type: boolean @@ -3065,26 +3069,26 @@ components: update_last_run: description: 'The UNIX timestamp when updates were last checked.' type: integer - example: 1623804005 + example: 1624884448 public_theme: + nullable: true description: 'Base Theme for Public Pages' type: string example: light - nullable: true hide_album_art: description: 'Hide Album Art on Public Pages' type: boolean example: 'false' homepage_redirect_url: + nullable: true description: 'Homepage Redirect URL' type: string example: 'https://example.com/' - nullable: true default_album_art_url: + nullable: true description: 'Default Album Art URL' type: string example: 'https://example.com/image.jpg' - nullable: true use_external_album_art_when_processing_media: description: 'Attempt to fetch album art from external sources when processing media.' type: boolean @@ -3094,38 +3098,38 @@ components: type: boolean example: 'false' last_fm_api_key: + nullable: true description: 'An API key to connect to Last.fm services, if provided.' type: string example: SAMPLE-API-KEY - nullable: true hide_product_name: description: 'Hide AzuraCast Branding on Public Pages' type: boolean example: 'false' public_custom_css: + nullable: true description: 'Custom CSS for Public Pages' type: string example: '' - nullable: true public_custom_js: + nullable: true description: 'Custom JS for Public Pages' type: string example: '' - nullable: true internal_custom_css: + nullable: true description: 'Custom CSS for Internal Pages' type: string example: '' - nullable: true backup_enabled: description: 'Whether backup is enabled.' type: boolean example: 'false' backup_time_code: + nullable: true description: 'The timecode (i.e. 400 for 4:00AM) when automated backups should run.' type: string example: 400 - nullable: true backup_exclude_media: description: 'Whether to exclude media in automated backups.' type: boolean @@ -3135,61 +3139,61 @@ components: type: integer example: 2 backup_storage_location: + nullable: true description: 'The storage location ID for automated backups.' type: integer example: 1 - nullable: true backup_last_run: description: 'The UNIX timestamp when automated backup was last run.' type: integer - example: 1623804005 + example: 1624884448 backup_last_result: + nullable: true description: 'The result of the latest automated backup task.' type: string example: '' - nullable: true backup_last_output: + nullable: true description: 'The output of the latest automated backup task.' type: string example: '' - nullable: true setup_complete_time: description: 'The UNIX timestamp when setup was last completed.' type: integer - example: 1623804005 + example: 1624884448 nowplaying: description: 'The current cached now playing data.' example: '' sync_nowplaying_last_run: description: 'The UNIX timestamp when the now playing sync task was last run.' type: integer - example: 1623804005 + example: 1624884448 sync_short_last_run: description: 'The UNIX timestamp when the 60-second ''short'' sync task was last run.' type: integer - example: 1623804005 + example: 1624884448 sync_medium_last_run: description: 'The UNIX timestamp when the 5-minute ''medium'' sync task was last run.' type: integer - example: 1623804005 + example: 1624884448 sync_long_last_run: description: 'The UNIX timestamp when the 1-hour ''long'' sync task was last run.' type: integer - example: 1623804005 + example: 1624884448 external_ip: + nullable: true description: 'This installation''s external IP.' type: string example: 192.168.1.1 - nullable: true geolite_license_key: + nullable: true description: 'The license key for the Maxmind Geolite download.' type: string example: '' - nullable: true geolite_last_run: description: 'The UNIX timestamp when the Maxmind Geolite was last downloaded.' type: integer - example: 1623804005 + example: 1624884448 enable_advanced_features: description: 'Whether to enable ''advanced'' functionality in the system that is intended for power users.' type: boolean @@ -3199,48 +3203,48 @@ components: type: boolean example: 'true' mail_sender_name: + nullable: true description: 'The name of the sender of system e-mails.' type: string example: AzuraCast - nullable: true mail_sender_email: + nullable: true description: 'The e-mail address of the sender of system e-mails.' type: string example: example@example.com - nullable: true mail_smtp_host: + nullable: true description: 'The host to send outbound SMTP mail.' type: string example: smtp.example.com - nullable: true mail_smtp_port: description: 'The port for sending outbound SMTP mail.' type: integer example: 465 mail_smtp_username: + nullable: true description: 'The username when connecting to SMTP mail.' type: string example: username - nullable: true mail_smtp_password: + nullable: true description: 'The password when connecting to SMTP mail.' type: string example: password - nullable: true mail_smtp_secure: description: 'Whether to use a secure (TLS) connection when sending SMTP mail.' type: boolean example: 'true' avatar_service: + nullable: true description: 'The external avatar service to use when fetching avatars.' type: string example: libravatar - nullable: true avatar_default_url: + nullable: true description: 'The default avatar URL.' type: string example: '' - nullable: true type: object Station: type: object @@ -3250,53 +3254,53 @@ components: - properties: name: + nullable: true description: 'The full display name of the station.' type: string example: 'AzuraTest Radio' - nullable: true short_name: + nullable: true description: 'The URL-friendly name for the station, typically auto-generated from the full station name.' type: string example: azuratest_radio - nullable: true is_enabled: description: 'If set to ''false'', prevents the station from broadcasting but leaves it in the database.' type: boolean example: true frontend_type: + nullable: true description: 'The frontend adapter (icecast,shoutcast,remote,etc)' type: string example: icecast - nullable: true frontend_config: description: 'An array containing station-specific frontend configuration' type: array items: { } backend_type: + nullable: true description: 'The backend adapter (liquidsoap,etc)' type: string example: liquidsoap - nullable: true backend_config: description: 'An array containing station-specific backend configuration' type: array items: { } description: + nullable: true type: string example: 'A sample radio station.' - nullable: true url: + nullable: true type: string example: 'https://demo.azuracast.com/' - nullable: true genre: + nullable: true type: string example: Various - nullable: true radio_base_dir: + nullable: true type: string example: /var/azuracast/stations/azuratest_radio - nullable: true automation_settings: type: array items: { } @@ -3305,17 +3309,17 @@ components: type: boolean example: true request_delay: + nullable: true type: integer example: 5 - nullable: true request_threshold: + nullable: true type: integer example: 15 - nullable: true disconnect_deactivate_streamer: + nullable: true type: integer example: 0 - nullable: true enable_streamers: description: 'Whether streamers are allowed to broadcast to this station at all.' type: boolean @@ -3341,15 +3345,15 @@ components: type: integer example: 5 timezone: + nullable: true description: 'The time zone that station operations should take place in.' type: string example: UTC - nullable: true default_album_art_url: + nullable: true description: 'The station-specific default album artwork URL.' type: string example: 'https://example.com/image.jpg' - nullable: true StationMedia: type: object allOf: @@ -3360,90 +3364,90 @@ components: - properties: unique_id: + nullable: true description: 'A unique identifier associated with this record.' type: string example: 69b536afc7ebbf16457b8645 - nullable: true album: + nullable: true description: 'The name of the media file''s album.' type: string example: 'Test Album' - nullable: true genre: + nullable: true description: 'The genre of the media file.' type: string example: Rock - nullable: true lyrics: + nullable: true description: 'Full lyrics of the track, if available.' type: string example: '...Never gonna give you up...' - nullable: true isrc: + nullable: true description: 'The track ISRC (International Standard Recording Code), used for licensing purposes.' type: string example: GBARL0600786 - nullable: true length: + nullable: true description: 'The song duration in seconds.' type: number format: float example: 240 - nullable: true length_text: + nullable: true description: 'The formatted song duration (in mm:ss format)' type: string example: '4:00' - nullable: true path: description: 'The relative path of the media file.' type: string example: test.mp3 mtime: + nullable: true description: 'The UNIX timestamp when the database was last modified.' type: integer - example: 1623804005 - nullable: true + example: 1624884448 amplify: + nullable: true description: 'The amount of amplification (in dB) to be applied to the radio source (liq_amplify)' type: number format: float example: -14 - nullable: true fade_overlap: + nullable: true description: 'The length of time (in seconds) before the next song starts in the fade (liq_start_next)' type: number format: float example: 2 - nullable: true fade_in: + nullable: true description: 'The length of time (in seconds) to fade in the next track (liq_fade_in)' type: number format: float example: 3 - nullable: true fade_out: + nullable: true description: 'The length of time (in seconds) to fade out the previous track (liq_fade_out)' type: number format: float example: 3 - nullable: true cue_in: + nullable: true description: 'The length of time (in seconds) from the start of the track to start playing (liq_cue_in)' type: number format: float example: 30 - nullable: true cue_out: + nullable: true description: 'The length of time (in seconds) from the CUE-IN of the track to stop playing (liq_cue_out)' type: number format: float example: 30 - nullable: true art_updated_at: description: 'The latest time (UNIX timestamp) when album art was updated.' type: integer - example: 1623804005 + example: 1624884448 playlists: type: array items: { } @@ -3458,9 +3462,9 @@ components: type: string example: /radio.mp3 display_name: + nullable: true type: string example: '128kbps MP3' - nullable: true is_visible_on_public_pages: type: boolean example: true @@ -3471,32 +3475,35 @@ components: type: boolean example: false fallback_mount: + nullable: true type: string example: /error.mp3 - nullable: true relay_url: + nullable: true type: string example: 'https://radio.example.com:8000/radio.mp3' - nullable: true authhash: + nullable: true type: string example: '' - nullable: true + max_listener_duration: + type: integer + example: 43200 enable_autodj: type: boolean example: true autodj_format: + nullable: true type: string example: mp3 - nullable: true autodj_bitrate: + nullable: true type: integer example: 128 - nullable: true custom_listen_url: + nullable: true type: string example: 'https://custom-listen-url.example.com/stream.mp3' - nullable: true frontend_config: type: array items: { } @@ -3528,13 +3535,13 @@ components: type: string example: shuffle remote_url: + nullable: true type: string example: 'https://remote-url.example.com/stream.mp3' - nullable: true remote_type: + nullable: true type: string example: stream - nullable: true remote_buffer: description: 'The total time (in seconds) that Liquidsoap should buffer remote URL streams.' type: integer @@ -3569,9 +3576,9 @@ components: type: boolean example: false backend_options: + nullable: true type: string example: 'interrupt,loop_once,single_track,merge' - nullable: true avoid_duplicates: type: boolean example: true @@ -3586,9 +3593,9 @@ components: - properties: display_name: + nullable: true type: string example: '128kbps MP3' - nullable: true is_visible_on_public_pages: type: boolean example: true @@ -3599,45 +3606,45 @@ components: type: boolean example: false autodj_format: + nullable: true type: string example: mp3 - nullable: true autodj_bitrate: + nullable: true type: integer example: 128 - nullable: true custom_listen_url: + nullable: true type: string example: 'https://custom-listen-url.example.com/stream.mp3' - nullable: true url: + nullable: true type: string example: 'https://custom-url.example.com' - nullable: true mount: + nullable: true type: string example: /stream.mp3 - nullable: true admin_password: + nullable: true type: string example: password - nullable: true source_port: + nullable: true type: integer example: 8000 - nullable: true source_mount: + nullable: true type: string example: / - nullable: true source_username: + nullable: true type: string example: source - nullable: true source_password: + nullable: true type: string example: password - nullable: true is_public: type: boolean example: false @@ -3663,10 +3670,10 @@ components: type: integer example: 2200 days: + nullable: true description: 'Array of ISO-8601 days (1 for Monday, 7 for Sunday)' type: string example: '0,1,2,3' - nullable: true StationStreamer: description: 'Station streamers (DJ accounts) allowed to broadcast to a station.' type: object @@ -3682,13 +3689,13 @@ components: type: string example: '' display_name: + nullable: true type: string example: 'Test DJ' - nullable: true comments: + nullable: true type: string example: 'This is a test DJ account.' - nullable: true is_active: type: boolean example: true @@ -3696,9 +3703,9 @@ components: type: boolean example: false reactivate_at: - type: integer - example: 1623804005 nullable: true + type: integer + example: 1624884448 schedule_items: type: array items: { } @@ -3716,10 +3723,10 @@ components: - properties: name: + nullable: true description: 'The nickname of the webhook connector.' type: string example: 'Twitter Post' - nullable: true type: description: 'The type of webhook connector to use.' type: string @@ -3742,28 +3749,28 @@ components: HasAutoIncrementId: properties: id: - type: integer nullable: true + type: integer type: object HasSongFields: properties: song_id: type: string text: - type: string nullable: true + type: string artist: - type: string nullable: true + type: string title: - type: string nullable: true + type: string type: object HasUniqueId: properties: id: - type: string nullable: true + type: string type: object User: type: object @@ -3773,35 +3780,35 @@ components: - properties: email: + nullable: true type: string example: demo@azuracast.com - nullable: true new_password: + nullable: true type: string example: '' - nullable: true name: + nullable: true type: string example: 'Demo Account' - nullable: true locale: + nullable: true type: string example: en_US - nullable: true theme: + nullable: true type: string example: dark - nullable: true two_factor_secret: + nullable: true type: string example: A1B2C3D4 - nullable: true created_at: type: integer - example: 1623804005 + example: 1624884448 updated_at: type: integer - example: 1623804005 + example: 1624884448 roles: type: array items: { }