mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 14:35:41 +00:00
feat(servers/settings): magic string invites, Navidrome admin share, and add-user validation (#258)
* feat(servers): magic string invites and duplicate-aware labels Add psysonic1- share payloads (URL, Subsonic credentials, optional server name). Login and add-server forms decode on input and keep magic field below standard fields. Navidrome User Management generates strings after PUT password updates where required. Resolve duplicate display names as username@host in chrome, settings, and login. * feat(servers): tighten magic-string import and admin share flow After a decoded magic string, username is read-only and the password field shows a fixed-length mask so length is not inferred. Password reveal stays disabled until saved-server quick connect (login) or reopening the add- server form. Navidrome admin share UI persists the password via API before copy and adds a plaintext-handling disclaimer. Locales updated. * feat(settings): save new Navidrome user and copy magic string Add a non-admin "Save and get magic string" flow: create the user, assign libraries when needed, then encode credentials to the clipboard. Reuse the plaintext-handling disclaimer without the password-update hint meant for edits. Strings added for all locales. * fix(settings): tighten Navidrome add-user validation and submit feedback Require username, display name, and a non-empty password (trimmed) for new users; gate Save and “save and get magic string” on explicit checks with toast feedback. Show red borders only after a failed submit, and clear them when the user fills the fields. When editing, keep an empty password as “unchanged” and validate identity fields with a dedicated message. Strings: userMgmtValidationMissingIdentity across locales.
This commit is contained in:
@@ -370,6 +370,9 @@ export const ruTranslation = {
|
||||
urlRequired: 'Укажите адрес сервера.',
|
||||
savedServers: 'Сохранённые серверы',
|
||||
addNew: 'Или добавить новый сервер',
|
||||
orMagicString: 'Или magic string',
|
||||
magicStringPlaceholder: 'Вставьте строку приглашения (psysonic1-…)',
|
||||
magicStringInvalid: 'Неверная или нечитаемая magic string.',
|
||||
},
|
||||
connection: {
|
||||
connected: 'Подключено',
|
||||
@@ -522,6 +525,19 @@ export const ruTranslation = {
|
||||
userMgmtUpdated: 'Пользователь обновлён.',
|
||||
userMgmtDeleted: 'Пользователь удалён.',
|
||||
userMgmtValidationMissing: 'Требуются имя пользователя, отображаемое имя и пароль.',
|
||||
userMgmtValidationMissingIdentity: 'Укажите имя пользователя и отображаемое имя.',
|
||||
userMgmtMagicStringGenerate: 'Сгенерировать magic string',
|
||||
userMgmtSaveAndMagicString: 'Сохранить и получить magic string',
|
||||
userMgmtMagicStringPasswordNavHint:
|
||||
'Navidrome сохранит этот пароль для пользователя. Если он не совпадает с текущим, на сервере будет установлен новый пароль входа.',
|
||||
userMgmtMagicStringPlaintextWarning:
|
||||
'Передавайте magic string осторожно: в ней пароль в открытом виде (кодирование — не шифрование). У кого есть полная строка, тот может войти под этим пользователем.',
|
||||
userMgmtMagicStringCopied: 'Magic string скопирован в буфер обмена.',
|
||||
userMgmtMagicStringCopyFailed: 'Не удалось скопировать в буфер обмена.',
|
||||
userMgmtMagicStringLoginFailed: 'Пароль не подошёл — не удалось проверить учётные данные.',
|
||||
userMgmtMagicStringModalTitle: 'Сгенерировать magic string',
|
||||
userMgmtMagicStringModalDesc: 'Введите пароль Subsonic для «{{username}}» — он попадёт в копируемую magic string.',
|
||||
userMgmtMagicStringModalConfirm: 'Скопировать строку',
|
||||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||
audiomuseDesc:
|
||||
'Включите, если на этом сервере настроен <pluginLink>плагин AudioMuse-AI для Navidrome</pluginLink>. Появится Instant Mix для треков, а на странице исполнителя похожие будут браться с сервера вместо Last.fm.',
|
||||
|
||||
Reference in New Issue
Block a user