diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 8605feaf35..3ce422eae5 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -156,6 +156,7 @@ const UserEdit = () => { (page.querySelector('.chkIsHidden') as HTMLInputElement).checked = !!user.Policy?.IsHidden; (page.querySelector('.chkEnableCollectionManagement') as HTMLInputElement).checked = !!user.Policy?.EnableCollectionManagement; (page.querySelector('.chkEnableSubtitleManagement') as HTMLInputElement).checked = !!user.Policy?.EnableSubtitleManagement; + (page.querySelector('.chkEnableNoPassword') as HTMLInputElement).checked = !!user.Policy?.EnableNoPassword; (page.querySelector('.chkRemoteControlSharedDevices') as HTMLInputElement).checked = !!user.Policy?.EnableSharedDeviceControl; (page.querySelector('.chkEnableRemoteControlOtherUsers') as HTMLInputElement).checked = !!user.Policy?.EnableRemoteControlOfOtherUsers; (page.querySelector('.chkEnableDownloading') as HTMLInputElement).checked = !!user.Policy?.EnableContentDownloading; @@ -213,6 +214,7 @@ const UserEdit = () => { user.Policy.EnablePlaybackRemuxing = (page.querySelector('.chkEnableVideoPlaybackRemuxing') as HTMLInputElement).checked; user.Policy.EnableCollectionManagement = (page.querySelector('.chkEnableCollectionManagement') as HTMLInputElement).checked; user.Policy.EnableSubtitleManagement = (page.querySelector('.chkEnableSubtitleManagement') as HTMLInputElement).checked; + user.Policy.EnableNoPassword = (page.querySelector('.chkEnableNoPassword') as HTMLInputElement).checked; user.Policy.ForceRemoteSourceTranscoding = (page.querySelector('.chkForceRemoteSourceTranscoding') as HTMLInputElement).checked; user.Policy.EnableContentDownloading = (page.querySelector('.chkEnableDownloading') as HTMLInputElement).checked; user.Policy.EnableRemoteAccess = (page.querySelector('.chkRemoteAccess') as HTMLInputElement).checked; @@ -506,6 +508,15 @@ const UserEdit = () => { {globalize.translate('OptionDisableUserHelp')} +
+ +
+ {globalize.translate('OptionEnableNoPasswordHelp')} +
+
= ({ userId }: IProps) => { const onSubmit = (e: Event) => { if ((page.querySelector('#txtNewPassword') as HTMLInputElement).value != (page.querySelector('#txtNewPasswordConfirm') as HTMLInputElement).value) { toast(globalize.translate('PasswordMatchError')); - } else if ((page.querySelector('#txtNewPassword') as HTMLInputElement).value == '' && user.current?.Policy?.IsAdministrator) { + } else if ((page.querySelector('#txtNewPassword') as HTMLInputElement).value == '' && (user.current?.Policy?.IsAdministrator || !user.current?.Policy?.EnableNoPassword)) { toast(globalize.translate('PasswordMissingSaveError')); } else { loading.show(); diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index db9ee47aa5..0301519c4b 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1096,6 +1096,7 @@ "Sports": "Sports", "OptionPlainStorageFolders": "Display all folders as plain storage folders", "OptionDisableUserHelp": "The server will not allow any connections from this user. Existing connections will be abruptly terminated.", + "OptionEnableNoPasswordHelp": "Will allow this user to set their password as empty when changing passwords.", "OptionDateAdded": "Date Added", "OptionDaily": "Daily", "OptionCommunityRating": "Community Rating", @@ -1836,6 +1837,7 @@ "LabelUseReplayGainTagsHelp": "Scan audio files for replaygain tags and use them instead of computing LUFS value. (Uses less computing power. Will override 'LUFS Scan' option)", "LabelUseReplayGainTags": "Use ReplayGain Tags", "AllowSubtitleManagement": "Allow this user to edit subtitles", + "AllowNoPassword": "Allow this user to have no password", "DlnaMovedMessage": "The DLNA functionality has moved to a plugin.", "EnableLibrary": "Enable the library", "EnableLibraryHelp": "Disabling the library will hide it from all user views.", diff --git a/src/strings/en-us.json b/src/strings/en-us.json index e6a73a0d60..02629f3aa2 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -26,6 +26,7 @@ "AllowCollectionManagement": "Allow this user to manage collections", "AllowContentWithTagsHelp": "Only show media with at least one of the specified tags.", "AllowSubtitleManagement": "Allow this user to edit subtitles", + "AllowNoPassword": "Allow this user to have no password", "AllowFfmpegThrottling": "Throttle Transcodes", "AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume fewer resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.", "AllowFmp4TranscodingContainerHelp": "Allow fMP4 transcoding container for this tuner to enable HEVC and HDR contents. Not all tuners are compatible with this container. Disable this if you experience playback issues.", @@ -1250,6 +1251,7 @@ "OptionDatePlayed": "Date Played", "OptionDisableUser": "Disable this user", "OptionDisableUserHelp": "The server will not allow any connections from this user. Existing connections will be abruptly ended.", + "OptionEnableNoPasswordHelp": "Will allow this user to set their password as empty when changing passwords.", "OptionDisplayFolderView": "Display a folder view to show plain media folders", "OptionDisplayFolderViewHelp": "Display folders alongside your other media libraries. This can be useful if you'd like to have a plain folder view.", "OptionDvd": "DVD", diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 1916c2d6af..ba9e123ad4 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -859,6 +859,7 @@ "OptionDatePlayed": "Data de Reprodução", "OptionDisableUser": "Desativar este usuário", "OptionDisableUserHelp": "O servidor não permitirá nenhuma conexão deste usuário. Conexões existentes serão encerradas imediatamente.", + "OptionEnableNoPasswordHelp": "Permitirá que este usuário defina sua senha como vazia ao alterar senhas.", "OptionDislikes": "Não Curtidos", "OptionDisplayFolderView": "Exibe uma visualização de pasta para exibir pastas de mídias", "OptionDisplayFolderViewHelp": "Exibe pastas ao lado de suas outras biblioteca de mídia. Isto pode ser útil se quiser uma visualização por pasta.", @@ -1812,6 +1813,7 @@ "PlaybackError.FATAL_HLS_ERROR": "Um erro fatal foi encontrado no fluxo HLS.", "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro ao decodificar a mídia.", "AllowSubtitleManagement": "Permitir que este usuário edite legendas", + "AllowNoPassword": "Permitir que este usuário possa não ter senha", "DeleteName": "Excluir {0}", "DeleteLyrics": "Excluir letras", "ErrorDeletingLyrics": "Ocorreu um erro ao excluir a letra do servidor. Verifique se o Jellyfin tem acesso de gravação à pasta de mídia e tente novamente.",