diff --git a/.clang-tidy b/.clang-tidy
index 1eaf7039..aca1b6d3 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -2,7 +2,6 @@
Checks: '-*,bugprone-*,concurrency-*,cppcoreguidelines-*,misc-*,-misc-include-cleaner,-misc-no-recursion,performance*,portability-*,readability-*,-readability-braces-around-statements,-readability-identifier-length,-readability-implicit-bool-conversion'
WarningsAsErrors: ''
HeaderFilterRegex: ''
-AnalyzeTemporaryDtors: false
FormatStyle: none
User: ''
CheckOptions:
diff --git a/Dockerfile-release b/Dockerfile-release
index 4dc15e78..8dd54d03 100644
--- a/Dockerfile-release
+++ b/Dockerfile-release
@@ -2,7 +2,7 @@ FROM alpine:3.19 AS build
WORKDIR /tmp/workdir
-ARG PREFIX="/tmp/install"
+ENV PREFIX="/tmp/install"
ARG BUILD_PACKAGES=" \
ca-certificates \
@@ -118,7 +118,7 @@ COPY . /tmp/lms/
RUN \
DIR=/tmp/lms/build && mkdir -p ${DIR} && cd ${DIR} && \
PKG_CONFIG_PATH=/tmp/install/lib/pkgconfig CXXFLAGS="-I${PREFIX}/include" LDFLAGS="-L${PREFIX}/lib -Wl,--rpath-link=${PREFIX}/lib" cmake /tmp/lms/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_PREFIX_PATH=${PREFIX} && \
- LD_LIBRARY_PATH=${PREFIX}/lib VERBOSE=1 make -j$(nproc) && \
+ LD_LIBRARY_PATH=${PREFIX}/lib make -j$(nproc) && \
LD_LIBRARY_PATH=${PREFIX}/lib make test && \
make install && \
mkdir -p ${PREFIX}/etc/ && \
diff --git a/SUBSONIC.md b/SUBSONIC.md
index a4bcefb6..9948280e 100644
--- a/SUBSONIC.md
+++ b/SUBSONIC.md
@@ -1,16 +1,24 @@
# Subsonic API
-The API version implemented is 1.16.0 and has been tested on _Android_ using _Subsonic Player_, _Ultrasonic_, _Symfonium_, and _DSub_.
+The API version implemented is 1.16.0 and has been tested on _Android_ using _DSub_, _Subsonic Player_, _Symfonium_, _Tempo_ and _Ultrasonic_.
Folder navigation commands are supported. However, since _LMS_ does not store information for each folder, it is not possible to star/unstar folders considered as artists.
Given the API limitations of folder navigation commands, it is recommended to place all tracks of an album in the same folder and not to mix multiple albums in the same folder.
The Subsonic API is enabled by default.
-__Note__: since _LMS_ may store hashed and salted passwords or may forward authentication requests to external services, it cannot handle the __token authentication__ method. You may need to check your client to make sure to use the __password__ authentication method. Since logins/passwords are passed in plain text through URLs, it is highly recommended to use a unique password when using the Subsonic API. Note that this may affect the use of authentication via PAM. In any case, ensure the web server logs (and proxy logs, if applicable) are properly secured.
-
# OpenSubsonic API
OpenSubsonic is an initiative to patch and extend the legacy Subsonic API. You'll find more details in the [official documentation](https://opensubsonic.netlify.app/)
+## Authentication
+_LMS_ supports the [API Key Authentication](https://opensubsonic.netlify.app/docs/extensions/apikeyauth/) method. Each user has to generate their own API key on the settings page to use the Subsonic API.
+
+By default, API keys can also be used as passwords, provided the `user` parameter matches the API key owner. To disable this fallback authentication method, set the following in `lms.conf`:
+```
+api-subsonic-support-user-password-auth = false;
+```
+
+__Note__: the token+salt authentication method is not supported.
+
## Extra fields
The following extra fields are implemented:
* `Album` response:
@@ -50,5 +58,7 @@ The following extra fields are implemented:
* `roles`
## Supported extensions
+* [API Key Authentication](https://opensubsonic.netlify.app/docs/extensions/apikeyauth/)
+* [HTTP form POST](https://opensubsonic.netlify.app/docs/extensions/formpost/)
* [Transcode offset](https://opensubsonic.netlify.app/docs/extensions/transcodeoffset/)
* [Song Lyrics](https://opensubsonic.netlify.app/docs/extensions/songlyrics/)
diff --git a/approot/messages.xml b/approot/messages.xml
index e34e36cf..ffee2275 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -289,7 +289,7 @@
Method to sort artist's albumsAudio
-These audio settings are local to your browser!
+These audio settings are local to your browserInternalListenBrainzListenBrainz API token
@@ -307,6 +307,7 @@
Original Release Date (Descending)Bad passwordOld password must be filled in
+GenerateReplayGain modeNo ReplayGainAuto
@@ -317,13 +318,19 @@
ScrobblingServicesSettings
+New settings saved!Artist list modeAll artistsAlbum artistsTrack artistsSubsonic API
-User Interface
+OpenSubsonic API key
+Use this API key as the password for clients that do not support the 'API Key Authentication' extensionTranscoding
+Enable transcoding
+Always
+Only when format is not supported by the browser
+NeverTranscoding output bitrateTranscoding output formatMatroska/Opus
@@ -331,10 +338,6 @@
Ogg/OpusOgg/VorbisWebM/Vorbis
-Enable transcoding
-Always
-Only when format is not supported by the browser
-Never
-New settings saved!
+User Interface
diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml
index 99291866..4a7e576c 100644
--- a/approot/messages_fr.xml
+++ b/approot/messages_fr.xml
@@ -289,7 +289,7 @@
Méthode pour trier les albums de l'artisteAudio
-Ces paramètres audio sont locaux à votre navigateur !
+Ces paramètres audio sont locaux à votre navigateurInterneListenBrainzJeton d'API ListenBrainz
@@ -307,6 +307,7 @@
Date de sortie originale (Décroissant)Mauvais mot de passeL'ancien mot de passe doit être renseigné
+RegénérerMode ReplayGainPas de ReplayGainAutomatique
@@ -317,13 +318,19 @@
ScrobblingServicesParamètres
+Paramètres sauvegardés !Mode de listage des artistesTous les artistesTous les artistes d'albumTous les artistes de pisteAPI Subsonic
-Interface utilisateur
+Clef pour l'API OpenSubsonic
+Utilisez cette clé d'API comme mot de passe pour les clients qui ne prennent pas en charge l'extension 'API Key Authentication'Transcodage
+Appliquer le transcodage
+Toujours
+Seulement lorsque le format n'est pas pris en charge par votre navigateur
+JamaisBitrate du transcodageFormat du transcodageMatroska/Opus
@@ -331,11 +338,7 @@
Ogg/OpusOgg/VorbisWebM/Vorbis
-Appliquer le transcodage
-Toujours
-Seulement lorsque le format n'est pas pris en charge par votre navigateur
-Jamais
-Paramètres sauvegardés !
+Interface utilisateurmoins d'une seconde
diff --git a/approot/messages_it.xml b/approot/messages_it.xml
index 749ca015..478c0dc4 100644
--- a/approot/messages_it.xml
+++ b/approot/messages_it.xml
@@ -46,7 +46,7 @@
C'è stato un errore!Ritorna alla homeAlbum non trovato
-
+Playlist non trovataNon sei autorizzato ad eseguire questa operazioneUtente non trovato
@@ -289,7 +289,7 @@
Metodo per ordinare gli album dell'artistaAudio
-Queste impostazioni sono salvate localmente su questo dispositivo!
+Queste impostazioni sono salvate localmente su questo dispositivoInternoListenBrainzToken API ListenBrainz
@@ -307,6 +307,7 @@
Data di uscita originale (Decrescente)Password errataDevi inserire la password attuale
+GeneraModalità ReplayGainNo ReplayGainAutomatica
@@ -317,13 +318,19 @@
ScrobblingServiziImpostazioni
+Nuove impostazioni salvate!Modalità di elencazione artistiTutti gli artistiArtisti albumArtisti tracce
-Subsonic API
-Interfaccia utente
+API Subsonic
+Chiave API OpenSubsonic
+Utilizza questa chiave API come password per i client che non supportano l'estensione 'Autenticazione con chiave API'Transcodifica
+Abilita transcodifica
+Sempre
+Quando il formato non è supportato
+MaiBitrate transcodificaFormato di transcodificaMatroska/Opus
@@ -331,11 +338,7 @@
Ogg/OpusOgg/VorbisWebM/Vorbis
-Abilita transcodifica
-Sempre
-Quando il formato non è supportato
-Mai
-Nuove impostazioni salvate!
+Interfaccia utentemeno di un secondo
diff --git a/approot/messages_pl.xml b/approot/messages_pl.xml
index ae9bf9c4..b0945b64 100644
--- a/approot/messages_pl.xml
+++ b/approot/messages_pl.xml
@@ -315,7 +315,7 @@
Metoda sortowania albumów artystyDźwięk
-Te ustawienia dotyczą wyłącznie tej przeglądarki!
+Te ustawienia dotyczą wyłącznie tej przeglądarkiWewnętrznyListenBrainzListenBrainz API token
@@ -333,6 +333,7 @@
Oryginalna data wydania (Malejąco)Błędne hasłoNależy podać stare hasło
+GenerujTryb ReplayGainBez ReplayGainAuto
@@ -343,13 +344,19 @@
ScrobblingUsługiUstawienia
+Ustawienia zapisane!Tryb listy artystówWszyscy artyściArtyści z albumówArtyści ze ścieżek
-Subsonic API
-Interfejs użytkownika
+API Subsonic
+Klucz API OpenSubsonic
+Użyj tego klucza API jako hasła dla klientów, którzy nie obsługują rozszerzenia 'Uwierzytelnianie za pomocą klucza API'Transkodowanie
+Aktywuj transkodowanie
+Zawsze
+Tylko gdy przeglądarka nie wspiera formatu
+NigdyPrzepływność transkodowaniaFormat wyjściowy transkodowaniaMatroska/Opus
@@ -357,11 +364,7 @@
Ogg/OpusOgg/VorbisWebM/Vorbis
-Aktywuj transkodowanie
-Zawsze
-Tylko gdy przeglądarka nie wspiera formatu
-Nigdy
-Ustawienia zapisane!
+Interfejs użytkownikamniej niż sekunda
diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml
index 7b44aa1e..1a127517 100644
--- a/approot/messages_zh.xml
+++ b/approot/messages_zh.xml
@@ -289,7 +289,7 @@
音频
-这些音频设置仅保存在您的本地浏览器!
+这些音频设置仅保存在您的本地浏览器
@@ -307,6 +307,7 @@
无效密码必须填写旧密码
+
ReplayGain 模式没有 ReplayGain自动模式
@@ -317,13 +318,19 @@
+新设置已保存!歌手列表模式所有歌手专辑歌手音轨歌手Subsonic 应用程序接口
+
转码
+启动转码
+总是
+仅当格式不支持时使用
+从不转码比特率转码格式Matroska/Opus
@@ -331,11 +338,6 @@
Ogg/OpusOgg/VorbisWebM/Vorbis
-启动转码
-总是
-仅当格式不支持时使用
-从不
-新设置已保存!是
diff --git a/approot/misc.xml b/approot/misc.xml
index 528c6685..78ebf5b2 100644
--- a/approot/misc.xml
+++ b/approot/misc.xml
@@ -19,5 +19,6 @@
+
diff --git a/approot/settings.xml b/approot/settings.xml
index 1ee166e7..e839a8e1 100644
--- a/approot/settings.xml
+++ b/approot/settings.xml
@@ -85,6 +85,25 @@
${}
+