diff options
65 files changed, 328 insertions, 381 deletions
diff --git a/apps/provisioning_api/l10n/sl.js b/apps/provisioning_api/l10n/sl.js index bd3e5387a9c..96bf5c7e3b2 100644 --- a/apps/provisioning_api/l10n/sl.js +++ b/apps/provisioning_api/l10n/sl.js @@ -5,8 +5,8 @@ OC.L10N.register( "Email confirmation" : "Potrditev elektronskega naslova", "Confirm" : "Potrdi", "Email confirmation successful" : "Potrditev elektronskega naslov je uspela.", - "Provisioning API" : "Vmesnik API za zagotavljanje povezovanja", + "Provisioning API" : "Vmesnik API za povezovanje", "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Program omogoča nastavitev vmesnikov API, ki jih zunanji sistemi lahko uporabijo za upravljanje uporabnikov, skupin in programov.", - "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih zunanji sistemi lahko uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tsrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na deljavo.\n\t\tKo je program enkrat omogočen, je mogoče pošiljati zahteve prek osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri skicev in odzivov strežnika." + "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih lahko zunanji sistemi uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tskrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na daljavo.\n\t\tKo je program enkrat zagnan, je mogoče pošiljati zahteve za izvajanje osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri sklicev in odzivov strežnika." }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/provisioning_api/l10n/sl.json b/apps/provisioning_api/l10n/sl.json index 0bba3949099..44572066c09 100644 --- a/apps/provisioning_api/l10n/sl.json +++ b/apps/provisioning_api/l10n/sl.json @@ -3,8 +3,8 @@ "Email confirmation" : "Potrditev elektronskega naslova", "Confirm" : "Potrdi", "Email confirmation successful" : "Potrditev elektronskega naslov je uspela.", - "Provisioning API" : "Vmesnik API za zagotavljanje povezovanja", + "Provisioning API" : "Vmesnik API za povezovanje", "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Program omogoča nastavitev vmesnikov API, ki jih zunanji sistemi lahko uporabijo za upravljanje uporabnikov, skupin in programov.", - "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih zunanji sistemi lahko uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tsrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na deljavo.\n\t\tKo je program enkrat omogočen, je mogoče pošiljati zahteve prek osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri skicev in odzivov strežnika." + "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih lahko zunanji sistemi uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tskrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na daljavo.\n\t\tKo je program enkrat zagnan, je mogoče pošiljati zahteve za izvajanje osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri sklicev in odzivov strežnika." },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js index f72315c8495..a6d265e843d 100644 --- a/apps/settings/l10n/ar.js +++ b/apps/settings/l10n/ar.js @@ -18,6 +18,7 @@ OC.L10N.register( "Strong password" : "كلمة السر قوية", "Groups" : "مجموعات", "Group list is empty" : "قائمة المجموعة فارغة", + "Unable to retrieve the group list" : "تعذر استرداد قائمة المجموعة", "{actor} changed your password" : "{actor} قام بتغيير كلمتك السرية", "You changed your password" : "لقد قمت بتعديل كلمة مرورك", "Your password was reset by an administrator" : "قام أحد المدراء بإعادة تعيين كلمة مرورك", @@ -36,6 +37,7 @@ OC.L10N.register( "Please provide an admin recovery password; otherwise, all user data will be lost." : "يرجى تقديم كلمة مرور استرداد المسؤول؛ وإلا ستفقد كافة بيانات المستخدم.", "Wrong admin recovery password. Please check the password and try again." : "خطا في كلمة مرور الاستعادة الخاصة بالمسؤول, يرجى التاكد من كلمة المرور والمحاولة مرة اخرى.", "Federated Cloud Sharing" : "المشاركة السحابية الموحّدة", + "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "برنامج كرل \"cURL\" يستخدم نسخة%1$sقديمة (%2$s).يرجي تحديث نظام التشغيل الخاص بك أو أن الخصائص مثل%3$s لن تعمل بشكل موثوق.", "Administrator documentation" : "دليل المدير", "User documentation" : "دليل المستخدم", "Invalid SMTP password." : "كلمة مرور SMTP خاطئة.", @@ -71,6 +73,7 @@ OC.L10N.register( "Set your password" : "قم بإدخال كلمتك السرية", "Go to %s" : "الإنتقال إلى %s", "Install Client" : "تنصيب العميل", + "Logged in user must be a subadmin" : "يجب أن يكون المستخدم الذي قام بتسجيل الدخول مسئولا فرعيًا", "Settings" : "الإعدادات", "Personal" : "شخصي", "Administration" : "الإدارة", @@ -159,6 +162,8 @@ OC.L10N.register( "No encryption module loaded, please enable an encryption module in the app menu." : "لم يتم تحميل حزمة التشفير، يرجى تفعيل حزمة التشفير من قائمة التطبيق.", "Select default encryption module:" : "اختر حزمة التشفير الافتراضية:", "Remove group" : "حذف الفريق", + "You are about to remove the group {group}. The users will NOT be deleted." : "أنت على وشك نقل المجموعة {المجموعة}. لن يتم حذف المستخدمين.", + "Please confirm the group removal " : "يرجى تأكيد نقل المجموعة", "Current password" : "كلمات السر الحالية", "New password" : "كلمات سر جديدة", "Change password" : "عدل كلمة السر", @@ -183,6 +188,8 @@ OC.L10N.register( "Last login" : "آخِر تسجيل للدخول", "Default quota" : "الحصة الافتراضية", "Default language" : "اللغة الافتراضية", + "Common languages" : "اللغات الشائعة", + "Password change is disabled because the master key is disabled" : "تم تعطيل تغيير كلمة المرور لأن المفتاح الرئيسي معطل", "New user" : "مستخدم جديد", "Either password or email is required" : "مطلوب كلمة المرور أو البريد الإلكتروني", "Password (required)" : "كلمة المرور (مطلوبة)", @@ -197,7 +204,11 @@ OC.L10N.register( "Add new user" : "إضافة مستخدِم جديد", "Username will be autogenerated" : "يتم توليد وإنشاء اسم المستخدم تلقائيا", "Username (required)" : "اسم المستخدم (مطلوب)", + "You do not have permissions to see the details of this user" : "ليس لديك أذونات لمشاهدة بيانات هذا المستخدم", "Delete user" : "احذف المستخدم", + "Disable user" : "تعطيل المستخدم", + "Enable user" : "تمكين المستخدم", + "Resend welcome email" : "إعادة إرسال رسالة بريد الإلكتروني ترحيبية", "Wiped {userid}'s devices" : "تم محو أجهزة {معرفالمستخدم}", "Update of user manager was failed" : "فشل تحديث مدير المستخدم", "Account deletion" : "حذف حساب", @@ -210,6 +221,7 @@ OC.L10N.register( "Name your device" : "اسم جهازك", "Your browser does not support WebAuthn." : "متصفحك لا يدعم WebAuthn.", "Your apps" : "تطبيقاتك", + "{license}-licensed" : "{الترخيص} - مرخص", "Changelog" : "سجل التغييرات", "Add group" : "إضافة فريق", "Active users" : "المستخدمون النشطون", @@ -238,6 +250,7 @@ OC.L10N.register( "App bundles" : "حُزَم التطبيقات", "Featured apps" : "تطبيقات مُميّزة", "Hide" : "إخفاء", + "Download and enable" : "تنزيل وتمكين", "Never" : "أبدا", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "تم تمكين التطبيق ولكنه يحتاج إلى التحديث. ستتم إعادة توجيهك إلى صفحة التحديث خلال 5 ثوانٍ.", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "يوجد طلبات أقصى من الحد المسموح به في الشبكة. أعد المحاولة أو اتصل بمسؤول النظام.", @@ -265,6 +278,7 @@ OC.L10N.register( "There are some errors regarding your setup." : "هناك بعض الأخطاء بخصوص الإعداد الخاص بك.", "There are some warnings regarding your setup." : "هناك بعض التحذيرات بخصوص الإعداد الخاص بك.", "Checking for system and security issues." : "التحقق من مشاكل النظام والأمان.", + "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%1$s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%2$s\">log</a>." : "يرجى إعادة التحقق مرة أخرى من<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%1$s\"> أدلة تثبيت ↗</a>، والتحقق من وجود أية أخطاء أو تحذيرات في <a href=\"%2$s\">السجل</a>.", "Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "تحقق من أمان نكست كلود الخاص بك من خلال <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">فحص الأمان لدينا ↗</a>.", "Version" : "إصدار", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "يمكنك بصفتك مسئولا ضبط وضع المشاركة. يرجى الاطلاع على التوثيق لمزيد من المعلومات.", diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json index 98c05abe560..b719a71931b 100644 --- a/apps/settings/l10n/ar.json +++ b/apps/settings/l10n/ar.json @@ -16,6 +16,7 @@ "Strong password" : "كلمة السر قوية", "Groups" : "مجموعات", "Group list is empty" : "قائمة المجموعة فارغة", + "Unable to retrieve the group list" : "تعذر استرداد قائمة المجموعة", "{actor} changed your password" : "{actor} قام بتغيير كلمتك السرية", "You changed your password" : "لقد قمت بتعديل كلمة مرورك", "Your password was reset by an administrator" : "قام أحد المدراء بإعادة تعيين كلمة مرورك", @@ -34,6 +35,7 @@ "Please provide an admin recovery password; otherwise, all user data will be lost." : "يرجى تقديم كلمة مرور استرداد المسؤول؛ وإلا ستفقد كافة بيانات المستخدم.", "Wrong admin recovery password. Please check the password and try again." : "خطا في كلمة مرور الاستعادة الخاصة بالمسؤول, يرجى التاكد من كلمة المرور والمحاولة مرة اخرى.", "Federated Cloud Sharing" : "المشاركة السحابية الموحّدة", + "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "برنامج كرل \"cURL\" يستخدم نسخة%1$sقديمة (%2$s).يرجي تحديث نظام التشغيل الخاص بك أو أن الخصائص مثل%3$s لن تعمل بشكل موثوق.", "Administrator documentation" : "دليل المدير", "User documentation" : "دليل المستخدم", "Invalid SMTP password." : "كلمة مرور SMTP خاطئة.", @@ -69,6 +71,7 @@ "Set your password" : "قم بإدخال كلمتك السرية", "Go to %s" : "الإنتقال إلى %s", "Install Client" : "تنصيب العميل", + "Logged in user must be a subadmin" : "يجب أن يكون المستخدم الذي قام بتسجيل الدخول مسئولا فرعيًا", "Settings" : "الإعدادات", "Personal" : "شخصي", "Administration" : "الإدارة", @@ -157,6 +160,8 @@ "No encryption module loaded, please enable an encryption module in the app menu." : "لم يتم تحميل حزمة التشفير، يرجى تفعيل حزمة التشفير من قائمة التطبيق.", "Select default encryption module:" : "اختر حزمة التشفير الافتراضية:", "Remove group" : "حذف الفريق", + "You are about to remove the group {group}. The users will NOT be deleted." : "أنت على وشك نقل المجموعة {المجموعة}. لن يتم حذف المستخدمين.", + "Please confirm the group removal " : "يرجى تأكيد نقل المجموعة", "Current password" : "كلمات السر الحالية", "New password" : "كلمات سر جديدة", "Change password" : "عدل كلمة السر", @@ -181,6 +186,8 @@ "Last login" : "آخِر تسجيل للدخول", "Default quota" : "الحصة الافتراضية", "Default language" : "اللغة الافتراضية", + "Common languages" : "اللغات الشائعة", + "Password change is disabled because the master key is disabled" : "تم تعطيل تغيير كلمة المرور لأن المفتاح الرئيسي معطل", "New user" : "مستخدم جديد", "Either password or email is required" : "مطلوب كلمة المرور أو البريد الإلكتروني", "Password (required)" : "كلمة المرور (مطلوبة)", @@ -195,7 +202,11 @@ "Add new user" : "إضافة مستخدِم جديد", "Username will be autogenerated" : "يتم توليد وإنشاء اسم المستخدم تلقائيا", "Username (required)" : "اسم المستخدم (مطلوب)", + "You do not have permissions to see the details of this user" : "ليس لديك أذونات لمشاهدة بيانات هذا المستخدم", "Delete user" : "احذف المستخدم", + "Disable user" : "تعطيل المستخدم", + "Enable user" : "تمكين المستخدم", + "Resend welcome email" : "إعادة إرسال رسالة بريد الإلكتروني ترحيبية", "Wiped {userid}'s devices" : "تم محو أجهزة {معرفالمستخدم}", "Update of user manager was failed" : "فشل تحديث مدير المستخدم", "Account deletion" : "حذف حساب", @@ -208,6 +219,7 @@ "Name your device" : "اسم جهازك", "Your browser does not support WebAuthn." : "متصفحك لا يدعم WebAuthn.", "Your apps" : "تطبيقاتك", + "{license}-licensed" : "{الترخيص} - مرخص", "Changelog" : "سجل التغييرات", "Add group" : "إضافة فريق", "Active users" : "المستخدمون النشطون", @@ -236,6 +248,7 @@ "App bundles" : "حُزَم التطبيقات", "Featured apps" : "تطبيقات مُميّزة", "Hide" : "إخفاء", + "Download and enable" : "تنزيل وتمكين", "Never" : "أبدا", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "تم تمكين التطبيق ولكنه يحتاج إلى التحديث. ستتم إعادة توجيهك إلى صفحة التحديث خلال 5 ثوانٍ.", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "يوجد طلبات أقصى من الحد المسموح به في الشبكة. أعد المحاولة أو اتصل بمسؤول النظام.", @@ -263,6 +276,7 @@ "There are some errors regarding your setup." : "هناك بعض الأخطاء بخصوص الإعداد الخاص بك.", "There are some warnings regarding your setup." : "هناك بعض التحذيرات بخصوص الإعداد الخاص بك.", "Checking for system and security issues." : "التحقق من مشاكل النظام والأمان.", + "Please double check the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%1$s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%2$s\">log</a>." : "يرجى إعادة التحقق مرة أخرى من<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%1$s\"> أدلة تثبيت ↗</a>، والتحقق من وجود أية أخطاء أو تحذيرات في <a href=\"%2$s\">السجل</a>.", "Check the security of your Nextcloud over <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">our security scan ↗</a>." : "تحقق من أمان نكست كلود الخاص بك من خلال <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">فحص الأمان لدينا ↗</a>.", "Version" : "إصدار", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "يمكنك بصفتك مسئولا ضبط وضع المشاركة. يرجى الاطلاع على التوثيق لمزيد من المعلومات.", diff --git a/apps/settings/l10n/es.js b/apps/settings/l10n/es.js index 61b53238b09..f074bf1de23 100644 --- a/apps/settings/l10n/es.js +++ b/apps/settings/l10n/es.js @@ -380,9 +380,14 @@ OC.L10N.register( "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "En caso de pérdida del dispositivo o dejar la organización, esto puede eliminar remotamente los datos de Nextcloud de todos los dispositivos asociados con {userid}. Nota: sólo funciona si los dispositivos están conectados a Internet.", "Remote wipe of devices" : "Eliminación remota de dispositivos", "Wipe {userid}'s devices" : "Eliminar dispositivos de {userid}", + "Wiped {userid}'s devices" : "Dispositivos de {userid} borrados", + "Update of user manager was failed" : "La actualización del administrador de usuarios ha fallado", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Eliminar completamente la cuenta de {userid}, incluyendo todos sus archivos personales, datos de las apps, etc.", "Account deletion" : "Eliminación de la cuenta", "Delete {userid}'s account" : "Eliminar cuentas de {userid}", + "Display name was successfully changed" : "El nombre para mostrar se ha cambiado correctamente", + "Password was successfully changed" : "La contraseña se ha cambiado correctamente", + "Email was successfully changed" : "El email se ha cambiado correctamente", "Welcome mail sent!" : "¡Correo de bienvenida enviado!", "Toggle user actions menu" : "Alternar el menú de acciones del usuario", "Edit" : "Editar", diff --git a/apps/settings/l10n/es.json b/apps/settings/l10n/es.json index a7da66cca92..c7cb6d0a62a 100644 --- a/apps/settings/l10n/es.json +++ b/apps/settings/l10n/es.json @@ -378,9 +378,14 @@ "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "En caso de pérdida del dispositivo o dejar la organización, esto puede eliminar remotamente los datos de Nextcloud de todos los dispositivos asociados con {userid}. Nota: sólo funciona si los dispositivos están conectados a Internet.", "Remote wipe of devices" : "Eliminación remota de dispositivos", "Wipe {userid}'s devices" : "Eliminar dispositivos de {userid}", + "Wiped {userid}'s devices" : "Dispositivos de {userid} borrados", + "Update of user manager was failed" : "La actualización del administrador de usuarios ha fallado", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Eliminar completamente la cuenta de {userid}, incluyendo todos sus archivos personales, datos de las apps, etc.", "Account deletion" : "Eliminación de la cuenta", "Delete {userid}'s account" : "Eliminar cuentas de {userid}", + "Display name was successfully changed" : "El nombre para mostrar se ha cambiado correctamente", + "Password was successfully changed" : "La contraseña se ha cambiado correctamente", + "Email was successfully changed" : "El email se ha cambiado correctamente", "Welcome mail sent!" : "¡Correo de bienvenida enviado!", "Toggle user actions menu" : "Alternar el menú de acciones del usuario", "Edit" : "Editar", diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js index 426eba9ad5d..fa11572477c 100644 --- a/apps/settings/l10n/fr.js +++ b/apps/settings/l10n/fr.js @@ -380,9 +380,14 @@ OC.L10N.register( "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "En cas de perte d'appareil ou si vous quittez un groupe ou une organisation, cela pourra supprimer les données de tous les appareils associés à {userid}. Ne fonctionne que si les appareils associés sont connectés à internet.", "Remote wipe of devices" : "Effacer les appareils à distance", "Wipe {userid}'s devices" : "Effacer les appareils de {userid}", + "Wiped {userid}'s devices" : "L'appareil de {userid}'s a été effacé", + "Update of user manager was failed" : "La mise à jour du gestionnaire des utilisateurs a échoué", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Supprime totalement le compte de {userid} et toutes ses données associées (fichiers personnels, données des applications, etc.)", "Account deletion" : "Suppression de compte", "Delete {userid}'s account" : "Supprimer le compte {userid}", + "Display name was successfully changed" : "Le nom d'affichage a été modifié avec succès", + "Password was successfully changed" : "Le mot de passe a été modifié avec succès", + "Email was successfully changed" : "L'e-mail a été modifié avec succès", "Welcome mail sent!" : "E-mail de bienvenue envoyé !", "Toggle user actions menu" : "Afficher / Masquer le menu des actions de l'utilisateur", "Edit" : "Editer", diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json index 6e3ed26e717..db4c323c032 100644 --- a/apps/settings/l10n/fr.json +++ b/apps/settings/l10n/fr.json @@ -378,9 +378,14 @@ "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "En cas de perte d'appareil ou si vous quittez un groupe ou une organisation, cela pourra supprimer les données de tous les appareils associés à {userid}. Ne fonctionne que si les appareils associés sont connectés à internet.", "Remote wipe of devices" : "Effacer les appareils à distance", "Wipe {userid}'s devices" : "Effacer les appareils de {userid}", + "Wiped {userid}'s devices" : "L'appareil de {userid}'s a été effacé", + "Update of user manager was failed" : "La mise à jour du gestionnaire des utilisateurs a échoué", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Supprime totalement le compte de {userid} et toutes ses données associées (fichiers personnels, données des applications, etc.)", "Account deletion" : "Suppression de compte", "Delete {userid}'s account" : "Supprimer le compte {userid}", + "Display name was successfully changed" : "Le nom d'affichage a été modifié avec succès", + "Password was successfully changed" : "Le mot de passe a été modifié avec succès", + "Email was successfully changed" : "L'e-mail a été modifié avec succès", "Welcome mail sent!" : "E-mail de bienvenue envoyé !", "Toggle user actions menu" : "Afficher / Masquer le menu des actions de l'utilisateur", "Edit" : "Editer", diff --git a/apps/user_ldap/l10n/cs.js b/apps/user_ldap/l10n/cs.js index 779e3a42e13..59cb5060ab0 100644 --- a/apps/user_ldap/l10n/cs.js +++ b/apps/user_ldap/l10n/cs.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", "User Search Attributes" : "Atributy vyhledávání uživatelů", "Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek", + "Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.", "Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny", "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", "Base Group Tree" : "Základ stromu skupin", diff --git a/apps/user_ldap/l10n/cs.json b/apps/user_ldap/l10n/cs.json index a848b0fdeea..74a28baf237 100644 --- a/apps/user_ldap/l10n/cs.json +++ b/apps/user_ldap/l10n/cs.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Jedna uživatelská základní DN na řádku", "User Search Attributes" : "Atributy vyhledávání uživatelů", "Optional; one attribute per line" : "Volitelné, každý atribut na zvlášť řádek", + "Disable users missing from LDAP" : "Znepřístupnit uživatelské účty, které se nenachází v LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Pokud zapnuto, uživatelské účty naimportovaní z LDAP, kteří pak budou chybět, budou znepřístupněny.", "Group Display Name Field" : "Kolonka zobrazovaného názvu skupiny", "The LDAP attribute to use to generate the groups's display name." : "LDAP atribut použitý k vytvoření zobrazovaného jména skupiny.", "Base Group Tree" : "Základ stromu skupin", diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 9e6d329fb75..5c513f9f10e 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 351f1a0ddd7..95be9d5d7bc 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Ein Benutzer Basis-DN pro Zeile", "User Search Attributes" : "Benutzersucheigenschaften", "Optional; one attribute per line" : "Optional; ein Attribut pro Zeile", + "Disable users missing from LDAP" : "Benutzer deaktivieren, die in LDAP fehlen", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Beim Einschalten werden aus LDAP importierte und dann fehlende Benutzer deaktiviert", "Group Display Name Field" : "Feld für den Anzeigenamen der Gruppe", "The LDAP attribute to use to generate the groups's display name." : "Das LDAP-Attribut zur Erzeugung des Anzeigenamens der Gruppen.", "Base Group Tree" : "Basis-Gruppenbaum", diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index c0a638cf50b..95af6d42a27 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index c974665c560..29aa75db02d 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "One User Base DN per line", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "Optional; one attribute per line", + "Disable users missing from LDAP" : "Disable users missing from LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "When switched on, users imported from LDAP which are then missing will be disabled", "Group Display Name Field" : "Group Display Name Field", "The LDAP attribute to use to generate the groups's display name." : "The LDAP attribute to use to generate the group's display name.", "Base Group Tree" : "Base Group Tree", diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index 32ca55b2bab..5116c854416 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 8cf049d2112..5f0d7ec7e1f 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", "Optional; one attribute per line" : "Opcional; un atributo por liña", + "Disable users missing from LDAP" : "Desactivar usuarios que faltan en LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Cando estea activado, desactivaranse os usuarios importados de LDAP e que logo faltan", "Group Display Name Field" : "Campo de nome de grupo para amosar", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP úsase para xerar os nomes dos grupos que amosar.", "Base Group Tree" : "Base da árbore de grupo", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 56747ba155c..c675878b3be 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользователей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", + "Disable users missing from LDAP" : "Отключить пользователей, отсутствующих в LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "При включении пользователи, которые были импортированы из LDAP, а затем отсутствуют в последующих синхронизациях, будут отключены", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", "Base Group Tree" : "База дерева групп", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index f97a17a182a..bdd69e53d8d 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "По одной базовому DN пользователей в строке.", "User Search Attributes" : "Атрибуты поиска пользователей", "Optional; one attribute per line" : "Опционально; один атрибут в строке", + "Disable users missing from LDAP" : "Отключить пользователей, отсутствующих в LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "При включении пользователи, которые были импортированы из LDAP, а затем отсутствуют в последующих синхронизациях, будут отключены", "Group Display Name Field" : "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." : "Атрибут LDAP, который используется для генерации отображаемого имени группы.", "Base Group Tree" : "База дерева групп", diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js index 0dd3fe3c7da..704b28a0dc9 100644 --- a/apps/user_ldap/l10n/sr.js +++ b/apps/user_ldap/l10n/sr.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Један Корисников јединствени назив DN по линији", "User Search Attributes" : "Параметри претраге корисника", "Optional; one attribute per line" : "Опционо; један параметар по линији", + "Disable users missing from LDAP" : "Искључи кориниске којих нема у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Када је укључено, корисници који се увезу из LDAP па онда недостају ће се искључити", "Group Display Name Field" : "Име приказа групе", "The LDAP attribute to use to generate the groups's display name." : "LDAP параметар за формирање имена за приказ група.", "Base Group Tree" : "Стабло основне групе", diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json index 4a743428361..d41b0005aa3 100644 --- a/apps/user_ldap/l10n/sr.json +++ b/apps/user_ldap/l10n/sr.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Један Корисников јединствени назив DN по линији", "User Search Attributes" : "Параметри претраге корисника", "Optional; one attribute per line" : "Опционо; један параметар по линији", + "Disable users missing from LDAP" : "Искључи кориниске којих нема у LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Када је укључено, корисници који се увезу из LDAP па онда недостају ће се искључити", "Group Display Name Field" : "Име приказа групе", "The LDAP attribute to use to generate the groups's display name." : "LDAP параметар за формирање имена за приказ група.", "Base Group Tree" : "Стабло основне групе", diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js index a735c6d53dc..f7b5a5cb38d 100644 --- a/apps/user_ldap/l10n/sv.js +++ b/apps/user_ldap/l10n/sv.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json index 3b629de3d5e..b81cf360a2b 100644 --- a/apps/user_ldap/l10n/sv.json +++ b/apps/user_ldap/l10n/sv.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "En användarstart-DN per rad", "User Search Attributes" : "Användarsökningsattribut", "Optional; one attribute per line" : "Valfritt; ett attribut per rad", + "Disable users missing from LDAP" : "Inaktivera användare som saknas via LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "När aktiverad kommer användare som importerats från LDAP som sedan saknas att inaktiveras", "Group Display Name Field" : "Attribut för gruppnamn", "The LDAP attribute to use to generate the groups's display name." : "LDAP-attributet som ska användas för att generera gruppens visningsnamn.", "Base Group Tree" : "Bas för grupper i katalogtjänst", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index cdf8ff0a098..68d504c4dee 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar devre dışı bırakılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index 4c07f79e6db..99eeb463f7a 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Her Satıra Bir Kullanıcı Base DN", "User Search Attributes" : "Kullanıcı arama öznitelikleri", "Optional; one attribute per line" : "İsteğe bağlı; her satıra bir öznitelik", + "Disable users missing from LDAP" : "LDAP üzerinde bulunmayan kullanıcılar devre dışı bırakılsın", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Bu seçenek etkinleştirildiğinde, LDAP üzerinden içe aktarılmış ancak daha sonra kaybolmuş kullanıcılar devre dışı bırakılır", "Group Display Name Field" : "Görüntülenecek Grup Adı Alanı", "The LDAP attribute to use to generate the groups's display name." : "Görüntülenecek grup adını oluşturmak için kullanılacak LDAP özniteliği.", "Base Group Tree" : "Temel Grup Ağacı", diff --git a/apps/user_ldap/l10n/zh_HK.js b/apps/user_ldap/l10n/zh_HK.js index f8e39d59e32..9c06929c251 100644 --- a/apps/user_ldap/l10n/zh_HK.js +++ b/apps/user_ldap/l10n/zh_HK.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "一行一個用戶 Base DN", "User Search Attributes" : "用戶搜尋屬性", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中找不到的的用戶", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後找不到的的用戶將被停用", "Group Display Name Field" : "群組顯示名稱欄位", "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生用戶群組的顯示名稱", "Base Group Tree" : "基本群組樹", diff --git a/apps/user_ldap/l10n/zh_HK.json b/apps/user_ldap/l10n/zh_HK.json index 31b7e606335..1a24b8c0f11 100644 --- a/apps/user_ldap/l10n/zh_HK.json +++ b/apps/user_ldap/l10n/zh_HK.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "一行一個用戶 Base DN", "User Search Attributes" : "用戶搜尋屬性", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中找不到的的用戶", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後找不到的的用戶將被停用", "Group Display Name Field" : "群組顯示名稱欄位", "The LDAP attribute to use to generate the groups's display name." : "LDAP設定值,用於產生用戶群組的顯示名稱", "Base Group Tree" : "基本群組樹", diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js index bf4569b9e61..eab5f928228 100644 --- a/apps/user_ldap/l10n/zh_TW.js +++ b/apps/user_ldap/l10n/zh_TW.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "一行一個使用者 Base DN", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中缺少的使用者", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後遺失的使用者將被停用", "Group Display Name Field" : "群組顯示名稱欄位", "The LDAP attribute to use to generate the groups's display name." : "用於生成群組顯示名稱的 LDAP 屬性。", "Base Group Tree" : "Base Group Tree", diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json index 5312e5718b7..4155fe4d91d 100644 --- a/apps/user_ldap/l10n/zh_TW.json +++ b/apps/user_ldap/l10n/zh_TW.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "一行一個使用者 Base DN", "User Search Attributes" : "User Search Attributes", "Optional; one attribute per line" : "非必要,一行一項屬性", + "Disable users missing from LDAP" : "停用 LDAP 中缺少的使用者", + "When switched on, users imported from LDAP which are then missing will be disabled" : "開啟後,從 LDAP 匯入但隨後遺失的使用者將被停用", "Group Display Name Field" : "群組顯示名稱欄位", "The LDAP attribute to use to generate the groups's display name." : "用於生成群組顯示名稱的 LDAP 屬性。", "Base Group Tree" : "Base Group Tree", diff --git a/apps/workflowengine/l10n/ar.js b/apps/workflowengine/l10n/ar.js index 4cd3ccd3aac..a597f6d4297 100644 --- a/apps/workflowengine/l10n/ar.js +++ b/apps/workflowengine/l10n/ar.js @@ -47,6 +47,7 @@ OC.L10N.register( "Android client" : "عميل أندرويد", "iOS client" : "عميل نظام التشغيل آي أو إس \"iOS\"", "Desktop client" : "تطبيق سطح المكتب", + "Thunderbird & Outlook addons" : "إضافات ثندربيرد و أوت لوك", "and" : "و", "Cancel" : "إلغاء", "Delete" : "حذف ", diff --git a/apps/workflowengine/l10n/ar.json b/apps/workflowengine/l10n/ar.json index ffabbc38c82..df1fe4afd37 100644 --- a/apps/workflowengine/l10n/ar.json +++ b/apps/workflowengine/l10n/ar.json @@ -45,6 +45,7 @@ "Android client" : "عميل أندرويد", "iOS client" : "عميل نظام التشغيل آي أو إس \"iOS\"", "Desktop client" : "تطبيق سطح المكتب", + "Thunderbird & Outlook addons" : "إضافات ثندربيرد و أوت لوك", "and" : "و", "Cancel" : "إلغاء", "Delete" : "حذف ", diff --git a/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php b/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php index df5d8de8eb7..e9096c99b44 100644 --- a/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php +++ b/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php @@ -32,13 +32,12 @@ use OCP\IConfig; use Psr\Log\LoggerInterface; class BackgroundCleanupUpdaterBackupsJob extends QueuedJob { - protected IConfig $config; - protected LoggerInterface $log; - - public function __construct(IConfig $config, LoggerInterface $log, ITimeFactory $time) { + public function __construct( + protected IConfig $config, + protected LoggerInterface $log, + ITimeFactory $time, + ) { parent::__construct($time); - $this->config = $config; - $this->log = $log; } /** diff --git a/core/BackgroundJobs/CheckForUserCertificates.php b/core/BackgroundJobs/CheckForUserCertificates.php index 11b851fff94..123b67099b3 100644 --- a/core/BackgroundJobs/CheckForUserCertificates.php +++ b/core/BackgroundJobs/CheckForUserCertificates.php @@ -36,15 +36,13 @@ use OCP\IUser; use OCP\IUserManager; class CheckForUserCertificates extends QueuedJob { - protected IConfig $config; - private IUserManager $userManager; - private IRootFolder $rootFolder; - - public function __construct(IConfig $config, IUserManager $userManager, IRootFolder $rootFolder, ITimeFactory $time) { + public function __construct( + protected IConfig $config, + private IUserManager $userManager, + private IRootFolder $rootFolder, + ITimeFactory $time, + ) { parent::__construct($time); - $this->config = $config; - $this->userManager = $userManager; - $this->rootFolder = $rootFolder; } /** diff --git a/core/BackgroundJobs/CleanupLoginFlowV2.php b/core/BackgroundJobs/CleanupLoginFlowV2.php index 27a5160a9d7..7a17672f99e 100644 --- a/core/BackgroundJobs/CleanupLoginFlowV2.php +++ b/core/BackgroundJobs/CleanupLoginFlowV2.php @@ -31,11 +31,11 @@ use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\TimedJob; class CleanupLoginFlowV2 extends TimedJob { - private LoginFlowV2Mapper $loginFlowV2Mapper; - - public function __construct(ITimeFactory $time, LoginFlowV2Mapper $loginFlowV2Mapper) { + public function __construct( + ITimeFactory $time, + private LoginFlowV2Mapper $loginFlowV2Mapper, + ) { parent::__construct($time); - $this->loginFlowV2Mapper = $loginFlowV2Mapper; $this->setInterval(3600); } diff --git a/core/BackgroundJobs/LookupServerSendCheckBackgroundJob.php b/core/BackgroundJobs/LookupServerSendCheckBackgroundJob.php index 76e0550830c..decfbc08ea2 100644 --- a/core/BackgroundJobs/LookupServerSendCheckBackgroundJob.php +++ b/core/BackgroundJobs/LookupServerSendCheckBackgroundJob.php @@ -32,13 +32,12 @@ use OCP\IUser; use OCP\IUserManager; class LookupServerSendCheckBackgroundJob extends QueuedJob { - protected IConfig $config; - private IUserManager $userManager; - - public function __construct(IConfig $config, IUserManager $userManager, ITimeFactory $time) { + public function __construct( + protected IConfig $config, + private IUserManager $userManager, + ITimeFactory $time, + ) { parent::__construct($time); - $this->config = $config; - $this->userManager = $userManager; } public function run($arguments) { diff --git a/core/Data/LoginFlowV2Credentials.php b/core/Data/LoginFlowV2Credentials.php index 4bcd8ab7f92..ab9aeea12b3 100644 --- a/core/Data/LoginFlowV2Credentials.php +++ b/core/Data/LoginFlowV2Credentials.php @@ -26,17 +26,11 @@ declare(strict_types=1); namespace OC\Core\Data; class LoginFlowV2Credentials implements \JsonSerializable { - /** @var string */ - private $server; - /** @var string */ - private $loginName; - /** @var string */ - private $appPassword; - - public function __construct(string $server, string $loginName, string $appPassword) { - $this->server = $server; - $this->loginName = $loginName; - $this->appPassword = $appPassword; + public function __construct( + private string $server, + private string $loginName, + private string $appPassword, + ) { } /** diff --git a/core/Data/LoginFlowV2Tokens.php b/core/Data/LoginFlowV2Tokens.php index c247a49fe0a..1ce05b6dfb3 100644 --- a/core/Data/LoginFlowV2Tokens.php +++ b/core/Data/LoginFlowV2Tokens.php @@ -26,14 +26,10 @@ declare(strict_types=1); namespace OC\Core\Data; class LoginFlowV2Tokens { - /** @var string */ - private $loginToken; - /** @var string */ - private $pollToken; - - public function __construct(string $loginToken, string $pollToken) { - $this->loginToken = $loginToken; - $this->pollToken = $pollToken; + public function __construct( + private string $loginToken, + private string $pollToken, + ) { } public function getPollToken(): string { diff --git a/core/Db/LoginFlowV2Mapper.php b/core/Db/LoginFlowV2Mapper.php index feb1bd7b42d..8b6a342545c 100644 --- a/core/Db/LoginFlowV2Mapper.php +++ b/core/Db/LoginFlowV2Mapper.php @@ -36,12 +36,15 @@ use OCP\IDBConnection; class LoginFlowV2Mapper extends QBMapper { private const lifetime = 1200; - /** @var ITimeFactory */ - private $timeFactory; - - public function __construct(IDBConnection $db, ITimeFactory $timeFactory) { - parent::__construct($db, 'login_flow_v2', LoginFlowV2::class); - $this->timeFactory = $timeFactory; + public function __construct( + IDBConnection $db, + private ITimeFactory $timeFactory, + ) { + parent::__construct( + $db, + 'login_flow_v2', + LoginFlowV2::class, + ); } /** diff --git a/core/Events/BeforePasswordResetEvent.php b/core/Events/BeforePasswordResetEvent.php index d560a723dde..15f6344fa24 100644 --- a/core/Events/BeforePasswordResetEvent.php +++ b/core/Events/BeforePasswordResetEvent.php @@ -35,16 +35,14 @@ use OCP\IUser; * @since 25.0.0 */ class BeforePasswordResetEvent extends Event { - private IUser $user; - private string $password; - /** * @since 25.0.0 */ - public function __construct(IUser $user, string $password) { + public function __construct( + private IUser $user, + private string $password, + ) { parent::__construct(); - $this->user = $user; - $this->password = $password; } /** diff --git a/core/Events/PasswordResetEvent.php b/core/Events/PasswordResetEvent.php index 8846004920c..1c3d0398ff0 100644 --- a/core/Events/PasswordResetEvent.php +++ b/core/Events/PasswordResetEvent.php @@ -35,16 +35,14 @@ use OCP\IUser; * @since 25.0.0 */ class PasswordResetEvent extends Event { - private IUser $user; - private string $password; - /** * @since 25.0.0 */ - public function __construct(IUser $user, string $password) { + public function __construct( + private IUser $user, + private string $password, + ) { parent::__construct(); - $this->user = $user; - $this->password = $password; } /** diff --git a/core/Middleware/TwoFactorMiddleware.php b/core/Middleware/TwoFactorMiddleware.php index 0ea21ce78de..f421528dff7 100644 --- a/core/Middleware/TwoFactorMiddleware.php +++ b/core/Middleware/TwoFactorMiddleware.php @@ -46,38 +46,14 @@ use OCP\IURLGenerator; use OCP\IUser; class TwoFactorMiddleware extends Middleware { - /** @var Manager */ - private $twoFactorManager; - - /** @var Session */ - private $userSession; - - /** @var ISession */ - private $session; - - /** @var IURLGenerator */ - private $urlGenerator; - - /** @var IControllerMethodReflector */ - private $reflector; - - /** @var IRequest */ - private $request; - - /** - * @param Manager $twoFactorManager - * @param Session $userSession - * @param ISession $session - * @param IURLGenerator $urlGenerator - */ - public function __construct(Manager $twoFactorManager, Session $userSession, ISession $session, - IURLGenerator $urlGenerator, IControllerMethodReflector $reflector, IRequest $request) { - $this->twoFactorManager = $twoFactorManager; - $this->userSession = $userSession; - $this->session = $session; - $this->urlGenerator = $urlGenerator; - $this->reflector = $reflector; - $this->request = $request; + public function __construct( + private Manager $twoFactorManager, + private Session $userSession, + private ISession $session, + private IURLGenerator $urlGenerator, + private IControllerMethodReflector $reflector, + private IRequest $request, + ) { } /** diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php index 05cdbcfd6b5..f0e489922fb 100644 --- a/core/Migrations/Version13000Date20170718121200.php +++ b/core/Migrations/Version13000Date20170718121200.php @@ -39,11 +39,9 @@ use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version13000Date20170718121200 extends SimpleMigrationStep { - /** @var IDBConnection */ - private $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + private IDBConnection $connection, + ) { } public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { diff --git a/core/Migrations/Version14000Date20180404140050.php b/core/Migrations/Version14000Date20180404140050.php index e670fe525da..e7630ff88a0 100644 --- a/core/Migrations/Version14000Date20180404140050.php +++ b/core/Migrations/Version14000Date20180404140050.php @@ -35,11 +35,9 @@ use OCP\Migration\SimpleMigrationStep; * Auto-generated migration step: Please modify to your needs! */ class Version14000Date20180404140050 extends SimpleMigrationStep { - /** @var IDBConnection */ - private $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + private IDBConnection $connection, + ) { } public function name(): string { diff --git a/core/Migrations/Version16000Date20190427105638.php b/core/Migrations/Version16000Date20190427105638.php index 4df64a59250..4080ad68603 100644 --- a/core/Migrations/Version16000Date20190427105638.php +++ b/core/Migrations/Version16000Date20190427105638.php @@ -33,11 +33,9 @@ use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version16000Date20190427105638 extends SimpleMigrationStep { - /** @var IDBConnection */ - private $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + private IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version18000Date20190920085628.php b/core/Migrations/Version18000Date20190920085628.php index d7b1727aa59..2d28468fd0b 100644 --- a/core/Migrations/Version18000Date20190920085628.php +++ b/core/Migrations/Version18000Date20190920085628.php @@ -36,11 +36,9 @@ use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version18000Date20190920085628 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version18000Date20191014105105.php b/core/Migrations/Version18000Date20191014105105.php index 340c9b3d729..b659977d55f 100644 --- a/core/Migrations/Version18000Date20191014105105.php +++ b/core/Migrations/Version18000Date20191014105105.php @@ -36,11 +36,9 @@ use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; class Version18000Date20191014105105 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version18000Date20191204114856.php b/core/Migrations/Version18000Date20191204114856.php index d7f4dbafe87..1c5c623e7be 100644 --- a/core/Migrations/Version18000Date20191204114856.php +++ b/core/Migrations/Version18000Date20191204114856.php @@ -32,11 +32,9 @@ use OCP\Migration\SimpleMigrationStep; use OCP\Migration\IOutput; class Version18000Date20191204114856 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version20000Date20201109081918.php b/core/Migrations/Version20000Date20201109081918.php index aae89465d75..5c275ed2c3a 100644 --- a/core/Migrations/Version20000Date20201109081918.php +++ b/core/Migrations/Version20000Date20201109081918.php @@ -35,11 +35,9 @@ use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version20000Date20201109081918 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version24000Date20211210141942.php b/core/Migrations/Version24000Date20211210141942.php index 47a4b11ce4f..04f6d80b825 100644 --- a/core/Migrations/Version24000Date20211210141942.php +++ b/core/Migrations/Version24000Date20211210141942.php @@ -37,11 +37,9 @@ use OCP\Migration\SimpleMigrationStep; * */ class Version24000Date20211210141942 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version24000Date20211230140012.php b/core/Migrations/Version24000Date20211230140012.php index fc013338862..123cc3819fe 100644 --- a/core/Migrations/Version24000Date20211230140012.php +++ b/core/Migrations/Version24000Date20211230140012.php @@ -33,11 +33,9 @@ use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version24000Date20211230140012 extends SimpleMigrationStep { - /** @var IDBConnection */ - protected $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { diff --git a/core/Migrations/Version25000Date20221007010957.php b/core/Migrations/Version25000Date20221007010957.php index 21c62acae21..d1ce4cf2d97 100644 --- a/core/Migrations/Version25000Date20221007010957.php +++ b/core/Migrations/Version25000Date20221007010957.php @@ -38,10 +38,9 @@ use OCP\Migration\SimpleMigrationStep; * */ class Version25000Date20221007010957 extends SimpleMigrationStep { - protected IDBConnection $connection; - - public function __construct(IDBConnection $connection) { - $this->connection = $connection; + public function __construct( + protected IDBConnection $connection, + ) { } /** diff --git a/core/Migrations/Version27000Date20230309104325.php b/core/Migrations/Version27000Date20230309104325.php index e11b37b4b29..4708dc33717 100644 --- a/core/Migrations/Version27000Date20230309104325.php +++ b/core/Migrations/Version27000Date20230309104325.php @@ -39,7 +39,7 @@ use OCP\Migration\SimpleMigrationStep; */ class Version27000Date20230309104325 extends SimpleMigrationStep { public function __construct( - private IDBConnection $connection + private IDBConnection $connection, ) { } diff --git a/core/Notification/CoreNotifier.php b/core/Notification/CoreNotifier.php index 6665389dbac..de6182aad4c 100644 --- a/core/Notification/CoreNotifier.php +++ b/core/Notification/CoreNotifier.php @@ -36,17 +36,11 @@ use OCP\Notification\INotification; use OCP\Notification\INotifier; class CoreNotifier implements INotifier { - /** @var IConfig */ - private $config; - /** @var IFactory */ - private $l10nFactory; - /** @var IURLGenerator */ - private $url; - - public function __construct(IConfig $config, IFactory $factory, IURLGenerator $url) { - $this->config = $config; - $this->l10nFactory = $factory; - $this->url = $url; + public function __construct( + private IConfig $config, + private IFactory $factory, + private IURLGenerator $url, + ) { } /** @@ -66,14 +60,14 @@ class CoreNotifier implements INotifier { * @since 17.0.0 */ public function getName(): string { - return $this->l10nFactory->get('core')->t('Nextcloud Server'); + return $this->factory->get('core')->t('Nextcloud Server'); } public function prepare(INotification $notification, string $languageCode): INotification { if ($notification->getApp() !== 'core') { throw new \InvalidArgumentException(); } - $l = $this->l10nFactory->get('core', $languageCode); + $l = $this->factory->get('core', $languageCode); if ($notification->getSubject() === 'repair_exposing_links') { $notification->setParsedSubject($l->t('Some of your link shares have been removed')); diff --git a/core/Service/LoginFlowV2Service.php b/core/Service/LoginFlowV2Service.php index bafee462456..7e254672ebd 100644 --- a/core/Service/LoginFlowV2Service.php +++ b/core/Service/LoginFlowV2Service.php @@ -43,28 +43,15 @@ use OCP\Security\ISecureRandom; use Psr\Log\LoggerInterface; class LoginFlowV2Service { - private LoginFlowV2Mapper $mapper; - private ISecureRandom $random; - private ITimeFactory $time; - private IConfig $config; - private ICrypto $crypto; - private LoggerInterface $logger; - private IProvider $tokenProvider; - - public function __construct(LoginFlowV2Mapper $mapper, - ISecureRandom $random, - ITimeFactory $time, - IConfig $config, - ICrypto $crypto, - LoggerInterface $logger, - IProvider $tokenProvider) { - $this->mapper = $mapper; - $this->random = $random; - $this->time = $time; - $this->config = $config; - $this->crypto = $crypto; - $this->logger = $logger; - $this->tokenProvider = $tokenProvider; + public function __construct( + private LoginFlowV2Mapper $mapper, + private ISecureRandom $random, + private ITimeFactory $time, + private IConfig $config, + private ICrypto $crypto, + private LoggerInterface $logger, + private IProvider $tokenProvider, + ) { } /** diff --git a/core/ajax/update.php b/core/ajax/update.php index 2348e205283..bc7d8b67fc6 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -65,12 +65,11 @@ class FeedBackHandler { private int $progressStateMax = 100; private int $progressStateStep = 0; private string $currentStep = ''; - private IEventSource $eventSource; - private IL10N $l10n; - public function __construct(IEventSource $eventSource, IL10N $l10n) { - $this->eventSource = $eventSource; - $this->l10n = $l10n; + public function __construct( + private IEventSource $eventSource, + private IL10N $l10n, + ) { } public function handleRepairFeedback(Event $event): void { diff --git a/lib/private/DB/PostgreSqlMigrator.php b/lib/private/DB/PostgreSqlMigrator.php index 73e295705da..92a0842e1a7 100644 --- a/lib/private/DB/PostgreSqlMigrator.php +++ b/lib/private/DB/PostgreSqlMigrator.php @@ -42,7 +42,7 @@ class PostgreSqlMigrator extends Migrator { } $fromDefault = $column->fromColumn->getDefault(); $toDefault = $column->column->getDefault(); - $fromDefault = trim($fromDefault, "()"); + $fromDefault = trim((string) $fromDefault, '()'); // by intention usage of != return $fromDefault != $toDefault; diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index ab3873a7ec0..a27f499a210 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -17,6 +17,7 @@ * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Tigran Mkrtchyan <tigran.mkrtchyan@desy.de> * @author Vincent Petry <vincent@nextcloud.com> + * @author Richard Steinmetz <richard@steinmetz.cloud> * * @license AGPL-3.0 * @@ -143,21 +144,28 @@ class Encryption extends Wrapper { } if (isset($this->unencryptedSize[$fullPath])) { $size = $this->unencryptedSize[$fullPath]; - // update file cache - if ($info instanceof ICacheEntry) { - $info['encrypted'] = $info['encryptedVersion']; - } else { - if (!is_array($info)) { - $info = []; + + // Update file cache (only if file is already cached). + // Certain files are not cached (e.g. *.part). + if (isset($info['fileid'])) { + if ($info instanceof ICacheEntry) { + $info['encrypted'] = $info['encryptedVersion']; + } else { + /** + * @psalm-suppress RedundantCondition + */ + if (!is_array($info)) { + $info = []; + } + $info['encrypted'] = true; + $info = new CacheEntry($info); } - $info['encrypted'] = true; - $info = new CacheEntry($info); - } - if ($size !== $info->getUnencryptedSize()) { - $this->getCache()->update($info->getId(), [ - 'unencrypted_size' => $size - ]); + if ($size !== $info->getUnencryptedSize()) { + $this->getCache()->update($info->getId(), [ + 'unencrypted_size' => $size + ]); + } } return $size; diff --git a/lib/private/Security/IdentityProof/Key.php b/lib/private/Security/IdentityProof/Key.php index 349ffd3c15a..bde828a3859 100644 --- a/lib/private/Security/IdentityProof/Key.php +++ b/lib/private/Security/IdentityProof/Key.php @@ -27,18 +27,10 @@ declare(strict_types=1); namespace OC\Security\IdentityProof; class Key { - /** @var string */ - private $publicKey; - /** @var string */ - private $privateKey; - - /** - * @param string $publicKey - * @param string $privateKey - */ - public function __construct(string $publicKey, string $privateKey) { - $this->publicKey = $publicKey; - $this->privateKey = $privateKey; + public function __construct( + private string $publicKey, + private string $privateKey, + ) { } public function getPrivate(): string { diff --git a/lib/private/Security/IdentityProof/Manager.php b/lib/private/Security/IdentityProof/Manager.php index c92d7390969..49b9bb10c3e 100644 --- a/lib/private/Security/IdentityProof/Manager.php +++ b/lib/private/Security/IdentityProof/Manager.php @@ -37,23 +37,15 @@ use OCP\Security\ICrypto; use Psr\Log\LoggerInterface; class Manager { - /** @var IAppData */ - private $appData; - /** @var ICrypto */ - private $crypto; - /** @var IConfig */ - private $config; - private LoggerInterface $logger; - - public function __construct(Factory $appDataFactory, - ICrypto $crypto, - IConfig $config, - LoggerInterface $logger + private IAppData $appData; + + public function __construct( + Factory $appDataFactory, + private ICrypto $crypto, + private IConfig $config, + private LoggerInterface $logger, ) { $this->appData = $appDataFactory->get('identityproof'); - $this->crypto = $crypto; - $this->config = $config; - $this->logger = $logger; } /** @@ -94,7 +86,6 @@ class Manager { * Note: If a key already exists it will be overwritten * * @param string $id key id - * @return Key * @throws \RuntimeException */ protected function generateKey(string $id): Key { @@ -117,8 +108,6 @@ class Manager { /** * Get key for a specific id * - * @param string $id - * @return Key * @throws \RuntimeException */ protected function retrieveKey(string $id): Key { @@ -137,8 +126,6 @@ class Manager { /** * Get public and private key for $user * - * @param IUser $user - * @return Key * @throws \RuntimeException */ public function getKey(IUser $user): Key { @@ -149,7 +136,6 @@ class Manager { /** * Get instance wide public and private key * - * @return Key * @throws \RuntimeException */ public function getSystemKey(): Key { diff --git a/lib/private/Security/IdentityProof/Signer.php b/lib/private/Security/IdentityProof/Signer.php index 7431bfe815f..1458390c327 100644 --- a/lib/private/Security/IdentityProof/Signer.php +++ b/lib/private/Security/IdentityProof/Signer.php @@ -32,32 +32,16 @@ use OCP\IUser; use OCP\IUserManager; class Signer { - /** @var Manager */ - private $keyManager; - /** @var ITimeFactory */ - private $timeFactory; - /** @var IUserManager */ - private $userManager; - - /** - * @param Manager $keyManager - * @param ITimeFactory $timeFactory - * @param IUserManager $userManager - */ - public function __construct(Manager $keyManager, - ITimeFactory $timeFactory, - IUserManager $userManager) { - $this->keyManager = $keyManager; - $this->timeFactory = $timeFactory; - $this->userManager = $userManager; + public function __construct( + private Manager $keyManager, + private ITimeFactory $timeFactory, + private IUserManager $userManager, + ) { } /** * Returns a signed blob for $data * - * @param string $type - * @param array $data - * @param IUser $user * @return array ['message', 'signature'] */ public function sign(string $type, array $data, IUser $user): array { @@ -79,13 +63,10 @@ class Signer { /** * Whether the data is signed properly * - * @param array $data - * @return bool */ public function verify(array $data): bool { - if (isset($data['message']) + if (isset($data['message']['signer']) && isset($data['signature']) - && isset($data['message']['signer']) ) { $location = strrpos($data['message']['signer'], '@'); $userId = substr($data['message']['signer'], 0, $location); diff --git a/lib/private/Security/RateLimiting/Backend/DatabaseBackend.php b/lib/private/Security/RateLimiting/Backend/DatabaseBackend.php index d1631a8d0ae..41f50a90b5c 100644 --- a/lib/private/Security/RateLimiting/Backend/DatabaseBackend.php +++ b/lib/private/Security/RateLimiting/Backend/DatabaseBackend.php @@ -28,6 +28,7 @@ declare(strict_types=1); namespace OC\Security\RateLimiting\Backend; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IConfig; use OCP\IDBConnection; @@ -35,38 +36,22 @@ use OCP\IDBConnection; class DatabaseBackend implements IBackend { private const TABLE_NAME = 'ratelimit_entries'; - /** @var IConfig */ - private $config; - /** @var IDBConnection */ - private $dbConnection; - /** @var ITimeFactory */ - private $timeFactory; - public function __construct( - IConfig $config, - IDBConnection $dbConnection, - ITimeFactory $timeFactory + private IConfig $config, + private IDBConnection $dbConnection, + private ITimeFactory $timeFactory ) { - $this->config = $config; - $this->dbConnection = $dbConnection; - $this->timeFactory = $timeFactory; } - /** - * @param string $methodIdentifier - * @param string $userIdentifier - * @return string - */ - private function hash(string $methodIdentifier, - string $userIdentifier): string { + private function hash( + string $methodIdentifier, + string $userIdentifier, + ): string { return hash('sha512', $methodIdentifier . $userIdentifier); } /** - * @param string $identifier - * @param int $seconds - * @return int - * @throws \OCP\DB\Exception + * @throws Exception */ private function getExistingAttemptCount( string $identifier @@ -97,8 +82,10 @@ class DatabaseBackend implements IBackend { /** * {@inheritDoc} */ - public function getAttempts(string $methodIdentifier, - string $userIdentifier): int { + public function getAttempts( + string $methodIdentifier, + string $userIdentifier, + ): int { $identifier = $this->hash($methodIdentifier, $userIdentifier); return $this->getExistingAttemptCount($identifier); } @@ -106,9 +93,11 @@ class DatabaseBackend implements IBackend { /** * {@inheritDoc} */ - public function registerAttempt(string $methodIdentifier, - string $userIdentifier, - int $period) { + public function registerAttempt( + string $methodIdentifier, + string $userIdentifier, + int $period, + ): void { $identifier = $this->hash($methodIdentifier, $userIdentifier); $deleteAfter = $this->timeFactory->getDateTime()->add(new \DateInterval("PT{$period}S")); diff --git a/lib/private/Security/RateLimiting/Backend/IBackend.php b/lib/private/Security/RateLimiting/Backend/IBackend.php index 960bfd2d159..24715391a96 100644 --- a/lib/private/Security/RateLimiting/Backend/IBackend.php +++ b/lib/private/Security/RateLimiting/Backend/IBackend.php @@ -39,10 +39,11 @@ interface IBackend { * * @param string $methodIdentifier Identifier for the method * @param string $userIdentifier Identifier for the user - * @return int */ - public function getAttempts(string $methodIdentifier, - string $userIdentifier): int; + public function getAttempts( + string $methodIdentifier, + string $userIdentifier, + ): int; /** * Registers an attempt @@ -51,7 +52,9 @@ interface IBackend { * @param string $userIdentifier Identifier for the user * @param int $period Period in seconds how long this attempt should be stored */ - public function registerAttempt(string $methodIdentifier, - string $userIdentifier, - int $period); + public function registerAttempt( + string $methodIdentifier, + string $userIdentifier, + int $period, + ); } diff --git a/lib/private/Security/RateLimiting/Backend/MemoryCacheBackend.php b/lib/private/Security/RateLimiting/Backend/MemoryCacheBackend.php index 4bcb459c64e..b59178c7d7b 100644 --- a/lib/private/Security/RateLimiting/Backend/MemoryCacheBackend.php +++ b/lib/private/Security/RateLimiting/Backend/MemoryCacheBackend.php @@ -42,36 +42,23 @@ use OCP\IConfig; * @package OC\Security\RateLimiting\Backend */ class MemoryCacheBackend implements IBackend { - /** @var IConfig */ - private $config; - /** @var ICache */ - private $cache; - /** @var ITimeFactory */ - private $timeFactory; + private ICache $cache; public function __construct( - IConfig $config, + private IConfig $config, ICacheFactory $cacheFactory, - ITimeFactory $timeFactory) { - $this->config = $config; + private ITimeFactory $timeFactory, + ) { $this->cache = $cacheFactory->createDistributed(__CLASS__); - $this->timeFactory = $timeFactory; } - /** - * @param string $methodIdentifier - * @param string $userIdentifier - * @return string - */ - private function hash(string $methodIdentifier, - string $userIdentifier): string { + private function hash( + string $methodIdentifier, + string $userIdentifier, + ): string { return hash('sha512', $methodIdentifier . $userIdentifier); } - /** - * @param string $identifier - * @return array - */ private function getExistingAttempts(string $identifier): array { $cachedAttempts = $this->cache->get($identifier); if ($cachedAttempts === null) { @@ -89,8 +76,10 @@ class MemoryCacheBackend implements IBackend { /** * {@inheritDoc} */ - public function getAttempts(string $methodIdentifier, - string $userIdentifier): int { + public function getAttempts( + string $methodIdentifier, + string $userIdentifier, + ): int { $identifier = $this->hash($methodIdentifier, $userIdentifier); $existingAttempts = $this->getExistingAttempts($identifier); @@ -108,9 +97,11 @@ class MemoryCacheBackend implements IBackend { /** * {@inheritDoc} */ - public function registerAttempt(string $methodIdentifier, - string $userIdentifier, - int $period) { + public function registerAttempt( + string $methodIdentifier, + string $userIdentifier, + int $period, + ): void { $identifier = $this->hash($methodIdentifier, $userIdentifier); $existingAttempts = $this->getExistingAttempts($identifier); $currentTime = $this->timeFactory->getTime(); diff --git a/lib/private/Security/RateLimiting/Limiter.php b/lib/private/Security/RateLimiting/Limiter.php index 7848a5b75a7..c8c0e2ce101 100644 --- a/lib/private/Security/RateLimiting/Limiter.php +++ b/lib/private/Security/RateLimiting/Limiter.php @@ -32,27 +32,21 @@ use OC\Security\RateLimiting\Exception\RateLimitExceededException; use OCP\IUser; class Limiter { - /** @var IBackend */ - private $backend; - - /** - * @param IBackend $backend - */ - public function __construct(IBackend $backend) { - $this->backend = $backend; + public function __construct( + private IBackend $backend, + ) { } /** - * @param string $methodIdentifier - * @param string $userIdentifier * @param int $period in seconds - * @param int $limit * @throws RateLimitExceededException */ - private function register(string $methodIdentifier, - string $userIdentifier, - int $period, - int $limit): void { + private function register( + string $methodIdentifier, + string $userIdentifier, + int $period, + int $limit, + ): void { $existingAttempts = $this->backend->getAttempts($methodIdentifier, $userIdentifier); if ($existingAttempts >= $limit) { throw new RateLimitExceededException(); @@ -64,16 +58,15 @@ class Limiter { /** * Registers attempt for an anonymous request * - * @param string $identifier - * @param int $anonLimit * @param int $anonPeriod in seconds - * @param string $ip * @throws RateLimitExceededException */ - public function registerAnonRequest(string $identifier, - int $anonLimit, - int $anonPeriod, - string $ip): void { + public function registerAnonRequest( + string $identifier, + int $anonLimit, + int $anonPeriod, + string $ip, + ): void { $ipSubnet = (new IpAddress($ip))->getSubnet(); $anonHashIdentifier = hash('sha512', 'anon::' . $identifier . $ipSubnet); @@ -83,16 +76,15 @@ class Limiter { /** * Registers attempt for an authenticated request * - * @param string $identifier - * @param int $userLimit * @param int $userPeriod in seconds - * @param IUser $user * @throws RateLimitExceededException */ - public function registerUserRequest(string $identifier, - int $userLimit, - int $userPeriod, - IUser $user): void { + public function registerUserRequest( + string $identifier, + int $userLimit, + int $userPeriod, + IUser $user, + ): void { $userHashIdentifier = hash('sha512', 'user::' . $identifier . $user->getUID()); $this->register($identifier, $userHashIdentifier, $userPeriod, $userLimit); } diff --git a/lib/private/Security/VerificationToken/CleanUpJob.php b/lib/private/Security/VerificationToken/CleanUpJob.php index 4510dcffe0a..1f4af046451 100644 --- a/lib/private/Security/VerificationToken/CleanUpJob.php +++ b/lib/private/Security/VerificationToken/CleanUpJob.php @@ -39,18 +39,17 @@ class CleanUpJob extends Job { protected ?string $userId = null; protected ?string $subject = null; protected ?string $pwdPrefix = null; - private IConfig $config; - private IVerificationToken $verificationToken; - private IUserManager $userManager; - public function __construct(ITimeFactory $time, IConfig $config, IVerificationToken $verificationToken, IUserManager $userManager) { + public function __construct( + ITimeFactory $time, + private IConfig $config, + private IVerificationToken $verificationToken, + private IUserManager $userManager, + ) { parent::__construct($time); - $this->config = $config; - $this->verificationToken = $verificationToken; - $this->userManager = $userManager; } - public function setArgument($argument) { + public function setArgument($argument): void { parent::setArgument($argument); $args = \json_decode($argument, true); $this->userId = (string)$args['userId']; @@ -59,7 +58,7 @@ class CleanUpJob extends Job { $this->runNotBefore = (int)$args['notBefore']; } - protected function run($argument) { + protected function run($argument): void { try { $user = $this->userManager->get($this->userId); if ($user === null) { diff --git a/lib/private/Security/VerificationToken/VerificationToken.php b/lib/private/Security/VerificationToken/VerificationToken.php index 52c3f62b813..5f606d0e049 100644 --- a/lib/private/Security/VerificationToken/VerificationToken.php +++ b/lib/private/Security/VerificationToken/VerificationToken.php @@ -39,29 +39,13 @@ use function json_encode; class VerificationToken implements IVerificationToken { protected const TOKEN_LIFETIME = 60 * 60 * 24 * 7; - /** @var IConfig */ - private $config; - /** @var ICrypto */ - private $crypto; - /** @var ITimeFactory */ - private $timeFactory; - /** @var ISecureRandom */ - private $secureRandom; - /** @var IJobList */ - private $jobList; - public function __construct( - IConfig $config, - ICrypto $crypto, - ITimeFactory $timeFactory, - ISecureRandom $secureRandom, - IJobList $jobList + private IConfig $config, + private ICrypto $crypto, + private ITimeFactory $timeFactory, + private ISecureRandom $secureRandom, + private IJobList $jobList ) { - $this->config = $config; - $this->crypto = $crypto; - $this->timeFactory = $timeFactory; - $this->secureRandom = $secureRandom; - $this->jobList = $jobList; } /** @@ -71,7 +55,13 @@ class VerificationToken implements IVerificationToken { throw new InvalidTokenException($code); } - public function check(string $token, ?IUser $user, string $subject, string $passwordPrefix = '', bool $expiresWithLogin = false): void { + public function check( + string $token, + ?IUser $user, + string $subject, + string $passwordPrefix = '', + bool $expiresWithLogin = false, + ): void { if ($user === null || !$user->isEnabled()) { $this->throwInvalidTokenException(InvalidTokenException::USER_UNKNOWN); } @@ -107,7 +97,11 @@ class VerificationToken implements IVerificationToken { } } - public function create(IUser $user, string $subject, string $passwordPrefix = ''): string { + public function create( + IUser $user, + string $subject, + string $passwordPrefix = '', + ): string { $token = $this->secureRandom->generate( 21, ISecureRandom::CHAR_DIGITS. |