mirror of
https://github.com/YunoHost/SSOwat.git
synced 2024-09-03 20:06:27 +02:00
Merge branch 'dev' into fix-bad-redirection
This commit is contained in:
commit
8af2d30c51
16 changed files with 277 additions and 30 deletions
12
debian/changelog
vendored
12
debian/changelog
vendored
|
@ -1,3 +1,15 @@
|
|||
ssowat (4.2.4) stable; urgency=low
|
||||
|
||||
- [fix] Misc issues regarding dash filename, mime types, ynh_userinfo.json ([#189](https://github.com/yunohost/ssowat/pull/189))
|
||||
- [fix] Broken Yunohost tile/overlay on iPhone ([#186](https://github.com/yunohost/ssowat/pull/186))
|
||||
- [enh] Save overlay positions accross navigation ([#187](https://github.com/yunohost/ssowat/pull/187))
|
||||
- [enh] security: Improve randomness of tmp filename ([#190](https://github.com/yunohost/ssowat/pull/190))
|
||||
- [i18n] Translations updated for Esperanto, Finnish, Galician, German, Italian
|
||||
|
||||
Thanks to all contributors <3 ! (amirale qt, Christian Wehrli, Flavio Cristoforetti, José M, ljf, Luca, Mico Hauataluoma)
|
||||
|
||||
-- Alexandre Aubin <alex.aubin@mailoo.org> Sun, 08 Aug 2021 21:58:14 +0200
|
||||
|
||||
ssowat (4.2.3) stable; urgency=low
|
||||
|
||||
- [i18n] Translations updated for Galician
|
||||
|
|
21
helpers.lua
21
helpers.lua
|
@ -237,15 +237,23 @@ function refresh_logged_in()
|
|||
"|"..expireTime..
|
||||
"|"..session_key)
|
||||
is_logged_in = hash == authHash
|
||||
if not is_logged_in then
|
||||
logger.info("Hash "..authHash.." rejected for "..user.."@"..ngx.var.remote_addr)
|
||||
else
|
||||
if is_logged_in then
|
||||
authUser = user
|
||||
return true
|
||||
else
|
||||
failReason = "Hash not matching"
|
||||
end
|
||||
return is_logged_in
|
||||
else
|
||||
failReason = "No {user}-password entry in cache"
|
||||
end
|
||||
else
|
||||
failReason = "No session key"
|
||||
end
|
||||
else
|
||||
failReason = "Cookie expired"
|
||||
end
|
||||
logger.debug("SSOwat cookies rejected for "..user.."@"..ngx.var.remote_addr.." : "..failReason)
|
||||
return false
|
||||
end
|
||||
|
||||
-- If client set the `Proxy-Authorization` header before reaching the SSO,
|
||||
|
@ -713,8 +721,7 @@ end
|
|||
-- Read result of a command after given it securely the password
|
||||
function secure_cmd_password(cmd, password, start)
|
||||
-- Check password validity
|
||||
math.randomseed( os.time() )
|
||||
local tmp_file = "/tmp/ssowat_"..math.random()
|
||||
local tmp_file = os.tmpname()
|
||||
local w_pwd = io.popen("("..cmd..") | tee -a "..tmp_file, 'w')
|
||||
w_pwd:write(password)
|
||||
-- This second write is just to validate the password question
|
||||
|
@ -761,7 +768,7 @@ function edit_user()
|
|||
-- and the new password against the confirmation field's content
|
||||
if args.newpassword == args.confirm then
|
||||
-- Check password validity
|
||||
local result_msg = secure_cmd_password("python /usr/lib/moulinette/yunohost/utils/password.py", args.newpassword)
|
||||
local result_msg = secure_cmd_password("python3 /usr/lib/moulinette/yunohost/utils/password.py", args.newpassword)
|
||||
validation_error = true
|
||||
if result_msg == nil or result_msg == "" then
|
||||
validation_error = nil
|
||||
|
|
|
@ -20,9 +20,12 @@
|
|||
html.ynh-panel-active {
|
||||
/* Disable any scrolling on app */
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
body {/*overflow-y: scroll;*/}
|
||||
body {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#ynh-overlay-switch,
|
||||
#ynh-overlay-switch *,
|
||||
|
@ -70,14 +73,14 @@ body {/*overflow-y: scroll;*/}
|
|||
|
||||
/* Background */
|
||||
#ynh-overlay {
|
||||
visibility: hidden;
|
||||
overflow-y: hidden;
|
||||
position: fixed;
|
||||
top:0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9999999;
|
||||
display: block;
|
||||
display: none;
|
||||
border: none;
|
||||
color:#fff;
|
||||
background: #41444F;
|
||||
|
@ -176,4 +179,4 @@ body {/*overflow-y: scroll;*/}
|
|||
width: 80px;
|
||||
height: 75px;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -18,6 +18,23 @@ if (typeof(console) === 'undefined') {
|
|||
console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
|
||||
}
|
||||
|
||||
/* Cookies utilities */
|
||||
function setCookie(cName, cValue, expDays) {
|
||||
let date = new Date();
|
||||
date.setTime(date.getTime() + (expDays * 24 * 60 * 60 * 1000));
|
||||
const expires = "expires=" + date.toUTCString();
|
||||
document.cookie = cName + "=" + cValue + "; " + expires + "; path=/";
|
||||
}
|
||||
function getCookie(cName) {
|
||||
const name = cName + "=";
|
||||
const cDecoded = decodeURIComponent(document.cookie); //to be careful
|
||||
const cArr = cDecoded .split('; ');
|
||||
let res;
|
||||
cArr.forEach(val => {
|
||||
if (val.indexOf(name) === 0) res = val.substring(name.length);
|
||||
})
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Array utilities
|
||||
https://github.com/Darklg/JavaScriptUtilities/blob/master/assets/js/vanilla-js/libs/vanilla-arrays.js
|
||||
|
@ -179,6 +196,9 @@ function make_element_draggable(id) {
|
|||
dragged = true;
|
||||
selected.style.left = (x_pos - x_elem) + 'px';
|
||||
selected.style.top = (y_pos - y_elem) + 'px';
|
||||
// Store positions in cookies
|
||||
setCookie('ynh_overlay_top', selected.style.top, 30);
|
||||
setCookie('ynh_overlay_left', selected.style.left, 30);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -265,7 +285,8 @@ function init_portal_button_and_overlay()
|
|||
var portalOverlay = document.createElement('iframe');
|
||||
portalOverlay.src = "/yunohost/sso/portal.html";
|
||||
portalOverlay.setAttribute("id","ynh-overlay");
|
||||
portalOverlay.setAttribute("style","visibility: hidden;"); // make sure the overlay is invisible already when loading it
|
||||
portalOverlay.setAttribute("style","display: none;"); // make sure the overlay is invisible already when loading it
|
||||
// portalOverlay.setAttribute("class","ynh-fadeOut"); // set overlay as masked when loading it
|
||||
document.body.insertBefore(portalOverlay, null);
|
||||
|
||||
// Inject portal button
|
||||
|
@ -273,6 +294,11 @@ function init_portal_button_and_overlay()
|
|||
portalButton.setAttribute('id', 'ynh-overlay-switch');
|
||||
portalButton.setAttribute('href', '/yunohost/sso/');
|
||||
portalButton.setAttribute('class', 'disableAjax');
|
||||
// Checks if cookies exist and apply positioning
|
||||
if (getCookie('ynh_overlay_top') != null && getCookie('ynh_overlay_left') != null) {
|
||||
portalButton.style.top = getCookie('ynh_overlay_top');
|
||||
portalButton.style.left = getCookie('ynh_overlay_left');
|
||||
}
|
||||
document.body.insertBefore(portalButton, null);
|
||||
// Make portal button draggable, for user convenience
|
||||
make_element_draggable('ynh-overlay-switch');
|
||||
|
@ -286,10 +312,12 @@ function init_portal_button_and_overlay()
|
|||
Element.toggleClass(portalOverlay, 'ynh-active');
|
||||
|
||||
if (Element.hasClass(portalOverlay, 'ynh-active')) {
|
||||
portalOverlay.setAttribute("style","display: block;");
|
||||
meta_viewport.setAttribute('content', meta_viewport_content);
|
||||
Element.addClass(portalOverlay, 'ynh-fadeIn');
|
||||
Element.removeClass(portalOverlay, 'ynh-fadeOut');
|
||||
} else {
|
||||
portalOverlay.setAttribute("style","display: none;");
|
||||
meta_viewport.setAttribute('content', "width=device-width");
|
||||
Element.removeClass(portalOverlay, 'ynh-fadeIn');
|
||||
Element.addClass(portalOverlay, 'ynh-fadeOut');
|
||||
|
@ -341,6 +369,7 @@ function init_portal()
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
function tweak_portal_when_in_iframe()
|
||||
{
|
||||
// Set class to body to show we're in overlay
|
||||
|
@ -369,4 +398,4 @@ function tweak_portal_when_in_iframe()
|
|||
window.parent.location.href = logoutButton.getAttribute("href");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
BIN
portal/assets/themes/unsplash/cloud.png
Normal file
BIN
portal/assets/themes/unsplash/cloud.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
17
portal/assets/themes/unsplash/custom_overlay.css
Normal file
17
portal/assets/themes/unsplash/custom_overlay.css
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
===============================================================================
|
||||
This file may contain extra CSS rules loaded on all apps page (*if* the app
|
||||
nginx's conf does include the appropriate snippet) for the small YunoHost
|
||||
button in bottom-right corner + portal overlay.
|
||||
|
||||
The yunohost button corresponds to : #ynh-overlay-switch
|
||||
The yunohost portal overlay / iframe corresponds to : #ynh-overlay
|
||||
|
||||
BE CAREFUL that you should *not* add too-general rules that apply to
|
||||
non-yunohost elements (for instance all 'a' or 'p' elements...) as it will
|
||||
likely break app's rendering
|
||||
===============================================================================
|
||||
*/
|
||||
#ynh-overlay-switch {
|
||||
background-image: url("./cloud.png");
|
||||
}
|
78
portal/assets/themes/unsplash/custom_portal.css
Normal file
78
portal/assets/themes/unsplash/custom_portal.css
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
===============================================================================
|
||||
This file contain extra CSS rules to customize the YunoHost user portal and
|
||||
can be used to customize app tiles, buttons, etc...
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
/* Make page texts white */
|
||||
.user-container h2,
|
||||
.user-container small,
|
||||
.user-container .user-mail,
|
||||
.user-container .user-mail,
|
||||
.content .footer a,
|
||||
a.app-tile,
|
||||
#ynh-logout {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
body {
|
||||
color: white !important;
|
||||
text-shadow: 3px 4px 4px rgba(0,0,0,.4), -1px -1px 6px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.ynh-user-portal {
|
||||
background-image: url('https://source.unsplash.com/random/featured/?nature') !important;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Apps colors */
|
||||
.app-tile {
|
||||
background-color: rgba(255, 255, 255, 0.5) !important;
|
||||
}
|
||||
|
||||
.app-tile:hover:after,
|
||||
.app-tile:focus:after,
|
||||
.app-tile:hover:before,
|
||||
.app-tile:focus:before {
|
||||
background: rgba(255, 255, 255, 0.5) !important;
|
||||
}
|
||||
|
||||
/* Use a custom logo image */
|
||||
#ynh-logo {
|
||||
z-index: 10;
|
||||
background-image: url("./cloud.png");
|
||||
}
|
||||
|
||||
/* Round the form */
|
||||
.login-form label:before {
|
||||
border-top-left-radius: 5em ;
|
||||
border-bottom-left-radius: 5em ;
|
||||
}
|
||||
|
||||
.login-form * {
|
||||
border-radius: 5em;
|
||||
}
|
||||
|
||||
/* Make form black */
|
||||
|
||||
.login-form label::before {
|
||||
background: #000;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.login-form .form-group * {
|
||||
background: #000;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.icon {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.messages {
|
||||
border-radius: .5em;
|
||||
}
|
1
portal/locales/ckb.json
Normal file
1
portal/locales/ckb.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -40,10 +40,10 @@
|
|||
"wrong_username_password": "Falscher Benutzername oder Passwort",
|
||||
"redirection_error_invalid_url": "Fehler bei Weiterleitung: Ungültige URL",
|
||||
"redirection_error_unmanaged_domain": "Fehler bei Weiterleitung: Nicht-verwaltete Domain",
|
||||
"good_practices_about_user_password": "Wählen Sie ein Benutzerpasswort mit mindestens 8 Zeichen. Das Passwort sollte mindestens 8 Zeichen lang sein - es ist jedoch empfehlenswert, ein längeres Passwort (z.B. eine Passphrase) und/oder verschiedene Arten von Zeichen (Groß- und Kleinschreibung, Ziffern und Sonderzeichen) zu verwenden.",
|
||||
"good_practices_about_user_password": "Wähle ein Nutzerpasswort mit mindestens 8 Zeichen - es ist jedoch empfehlenswert, ein längeres Passwort (z.B. eine Passphrase) und/oder verschiedene Arten von Zeichen (Groß- und Kleinschreibung, Ziffern und Sonderzeichen) zu verwenden.",
|
||||
"password_too_simple_3": "Das Passwort muss mindestens 8 Zeichen lang sein und Grossbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten",
|
||||
"password_too_simple_2": "Das Passwort muss mindestens 8 Zeichen lang sein und Grossbuchstaben, Kleinbuchstaben und Zahlen enthalten",
|
||||
"password_listed": "Dieses Passwort zählt zu den meistgenutzten Passwort der Welt . Bitte wählen Sie ein anderes einzigartigeres Passwort.",
|
||||
"password_listed": "Dieses Passwort zählt zu den meistgenutzten Passwörtern der Welt. Bitte wähle ein anderes, einzigartigeres Passwort.",
|
||||
"password_too_simple_4": "Das Passwort muss mindestens 12 Zeichen lang sein und Grossbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten",
|
||||
"password_too_simple_1": "Das Passwort muss mindestens 8 Zeichen lang sein"
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
"portal": "Yunohost portalo",
|
||||
"fullname": "Plena nomo",
|
||||
"new_mail": "nova-adreso@mia-domajno.org",
|
||||
"confirm": "Konfirmi",
|
||||
"confirm": "Konfirmu",
|
||||
"password_changed": "Pasvorto ŝanĝita",
|
||||
"password_changed_error": "Ne povis ŝanĝi pasvorton",
|
||||
"password_not_match": "La pasvortoj ne kongruas",
|
||||
|
@ -35,12 +35,12 @@
|
|||
"invalid_domain": "Nevalida domajno en",
|
||||
"invalid_mail": "Nevalida retpoŝta adreso",
|
||||
"wrong_current_password": "Aktuala pasvorto estas malĝusta",
|
||||
"good_practices_about_user_password": "Elektu uzanton pasvorton de almenaŭ 8 signoj - kvankam estas bone praktiki uzi pli longajn (t.e. pasfrazon) kaj / aŭ uzi diversajn specojn de signoj (majuskloj, minuskloj, ciferoj kaj specialaj signoj).",
|
||||
"password_too_simple_4": "Pasvorto bezonas almenaŭ 12 signojn kaj enhavas ciferojn, majusklojn, minusklojn kaj specialajn signojn",
|
||||
"password_too_simple_3": "Pasvorto bezonas almenaŭ 8 signojn kaj enhavas ciferojn, majusklojn, minusklojn kaj specialajn signojn",
|
||||
"password_too_simple_2": "Pasvorto bezonas almenaŭ 8 signojn kaj enhavas ciferojn, majusklojn kaj minusklojn",
|
||||
"good_practices_about_user_password": "Elektu uzantan pasvorton de almenaŭ 8 signoj - kvankam ĝi estas bona praktiko uzi pli longajn (I.E. Pasfraso) kaj / aŭ uzas diversajn specojn de karakteroj (majusklaj, minusklaj, ciferoj kaj specialaj signoj).",
|
||||
"password_too_simple_4": "La pasvorto devas havi almenaŭ 12 signojn kaj enhavas ciferojn, suprajn, pli malaltajn kaj specialajn signojn",
|
||||
"password_too_simple_3": "La pasvorto devas havi almenaŭ 8 signojn kaj enhavas ciferojn, suprajn, pli malaltajn kaj specialajn signojn",
|
||||
"password_too_simple_2": "La pasvorto devas havi almenaŭ 8 signojn kaj enhavas ciferojn, suprajn kaj pli malaltajn signojn",
|
||||
"password_too_simple_1": "Pasvorto devas esti almenaŭ 8 signojn longa",
|
||||
"password_listed": "Ĉi tiu pasvorto estas inter la plej uzataj pasvortoj en la mondo. Bonvolu elekti ion iom pli unikan.",
|
||||
"password_listed": "Ĉi tiu pasvorto estas inter la plej uzataj pasvortoj en la mondo. Bonvolu elekti ion pli unikan.",
|
||||
"ok": "bone",
|
||||
"add_forward": "Aldonu poŝton antaŭen",
|
||||
"add_mail": "Aldonu poŝton alias",
|
||||
|
|
49
portal/locales/fa.json
Normal file
49
portal/locales/fa.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"cancel": "لغو",
|
||||
"logged_out": "خارج شده",
|
||||
"password": "کلمه عبور",
|
||||
"ok": "خوب",
|
||||
"footerlink_administration": "مدیریت",
|
||||
"footerlink_support": "پشتیبانی",
|
||||
"footerlink_documentation": "مستندات",
|
||||
"footerlink_edit": "ویرایش پروفایل من",
|
||||
"redirection_error_unmanaged_domain": "خطای تغییر مسیر: دامنه مدیریت نشده",
|
||||
"redirection_error_invalid_url": "خطای تغییر مسیر: نشانی اینترنتی نامعتبر است",
|
||||
"please_login_from_portal": "لطفاً از درگاه پورتال وارد شوید",
|
||||
"please_login": "لطفاً برای دسترسی به این محتوا وارد شوید",
|
||||
"wrong_username_password": "نام کاربری یا رمز عبور اشتباه است",
|
||||
"missing_required_fields": "فیلدهای مورد نیاز را پر کنید",
|
||||
"user_saving_fail": "اطلاعات کاربر جدید ذخیره نشد",
|
||||
"information_updated": "اطلاعات به روز شد",
|
||||
"mail_already_used": "آدرس پست الکترونیکی قبلاً استفاده می شود",
|
||||
"invalid_mailforward": "آدرس ارسال ایمیل نامعتبر است",
|
||||
"invalid_domain": "دامنه نامعتبر در",
|
||||
"invalid_mail": "آدرس ایمیل نامعتبر است",
|
||||
"wrong_current_password": "رمز فعلی اشتباه است",
|
||||
"good_practices_about_user_password": "گذرواژه کاربر را حداقل با 8 کاراکتر انتخاب کنید - هرچند استفاده از کلمات طولانی تر تمرین خوبی است (مانند عبارت عبور) و/یا استفاده از انواع مختلف کاراکترها (بزرگ ، کوچک ، رقم و کاراکتر های خاص).",
|
||||
"password_too_simple_4": "گذرواژه باید دارای حداقل 12 کاراکتر طول و شامل اعداد و حروف کوچک و بزرگ و کاراکترهای خاص باشد",
|
||||
"password_too_simple_3": "گذرواژه باید دارای حداقل 8 کاراکتر طول و شامل اعداد و حروف کوچک و بزرگ و کاراکترهای خاص باشد",
|
||||
"password_too_simple_2": "گذرواژه باید دارای حداقل 8 کاراکتر طول و شامل اعداد و حروف کوچک و بزرگ باشد",
|
||||
"password_too_simple_1": "رمز عبور باید حداقل 8 کاراکتر باشد",
|
||||
"password_listed": "این رمز عبور جزو پر استفاده ترین رمزهای عبور جهان بشمار میرود. لطفاً گذرواژه منحصر به فردتری انتخاب کنید.",
|
||||
"password_not_match": "گذرواژه ها مطابقت ندارند",
|
||||
"password_changed_error": "رمز عبور تغییر نکرد",
|
||||
"password_changed": "رمز عبور تغییر کرد",
|
||||
"logout": "خروج",
|
||||
"login": "وارد شدن",
|
||||
"confirm": "تایید",
|
||||
"new_password": "رمز عبور جدید",
|
||||
"current_password": "رمز عبور فعلی",
|
||||
"edit": "ویرایش",
|
||||
"change_password": "تغییر رمز عبور",
|
||||
"add_forward": "آدرس هدایت ایمیل را اضافه کنید",
|
||||
"add_mail": "یک نام مستعار ایمیل اضافه کنید",
|
||||
"new_forward": "newforward@myforeigndomain.org",
|
||||
"new_mail": "newmail@mydomain.org",
|
||||
"mail_forward": "آدرس ارسال به جلو ایمیل",
|
||||
"mail_addresses": "آدرس ایمیل",
|
||||
"fullname": "نام و نام خانوادگی",
|
||||
"username": "نام کاربری",
|
||||
"information": "اطلاعات شما",
|
||||
"portal": "پورتال YunoHost"
|
||||
}
|
|
@ -1 +1,3 @@
|
|||
{}
|
||||
{
|
||||
"cancel": "Peruuta"
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
"password_changed_error": "Non se cambiou o contrasinal",
|
||||
"password_changed": "Contrasinal cambiado",
|
||||
"logout": "Pechar sesión",
|
||||
"login": "Conéctate",
|
||||
"login": "Conectar",
|
||||
"confirm": "Confirmar",
|
||||
"new_password": "Novo contrasinal",
|
||||
"current_password": "Contrasinal actual",
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
"invalid_mail": "Indirizzo email non valido",
|
||||
"invalid_mailforward": "Indirizzo di inoltro e-mail non valido",
|
||||
"logged_out": "Disconnesso",
|
||||
"login": "Accesso",
|
||||
"logout": "Disconnettersi",
|
||||
"login": "Accedi",
|
||||
"logout": "Esci",
|
||||
"mail_addresses": "Indirizzi email",
|
||||
"mail_already_used": "Indirizzo email già in uso",
|
||||
"mail_forward": "Indirizzo di inoltro e-mail",
|
||||
|
|
49
portal/locales/uk.json
Normal file
49
portal/locales/uk.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"cancel": "Скасувати",
|
||||
"logged_out": "Ви вийшли з системи",
|
||||
"footerlink_administration": "Адміністрація",
|
||||
"footerlink_support": "Підтримка",
|
||||
"footerlink_documentation": "Документація",
|
||||
"footerlink_edit": "Редагувати мій профіль",
|
||||
"redirection_error_unmanaged_domain": "Помилка перенаправлення: Некерований домен",
|
||||
"redirection_error_invalid_url": "Помилка перенаправлення: Недійсна URL-адреса",
|
||||
"please_login_from_portal": "Увійдіть у систему з порталу",
|
||||
"please_login": "Увійдіть, щоб отримати доступ до цього вмісту",
|
||||
"wrong_username_password": "Неправильне ім'я користувача або пароль",
|
||||
"missing_required_fields": "Заповніть необхідні поля",
|
||||
"user_saving_fail": "Не вдалося зберегти нові відомості користувача",
|
||||
"information_updated": "Відомості оновлено",
|
||||
"mail_already_used": "Адреса е-пошти вже використовується",
|
||||
"invalid_mailforward": "Недійсна адреса переадресації е-пошти",
|
||||
"invalid_domain": "Недійсний домен у",
|
||||
"invalid_mail": "Недійсна адреса е-пошти",
|
||||
"wrong_current_password": "Поточний пароль неправильний",
|
||||
"good_practices_about_user_password": "Виберіть пароль користувача щонайменше 8 символів - хоча це хороша практика використовувати довші (тобто фрази-гасла) та/або використовувати різні символи (великі, малі, числа та спеціальні символи).",
|
||||
"password_too_simple_4": "Пароль повинен бути щонайменше 12 символів довжиною і містити числа, верхній, нижній регістри та спеціальні символи",
|
||||
"password_too_simple_3": "Пароль повинен бути щонайменше 8 символів довжиною і містити числа, верхній, нижній регістри та спеціальні символи",
|
||||
"password_too_simple_2": "Пароль повинен бути щонайменше 8 символів довжиною і містити числа, верхній та нижній регістри",
|
||||
"password_too_simple_1": "Пароль повинен бути щонайменше 8 символів",
|
||||
"password_listed": "Цей пароль є одним з найбільш використовуваних паролів у світі. Будь ласка, виберіть щось трохи більш неповторюване.",
|
||||
"password_not_match": "Паролі не збігаються",
|
||||
"password_changed_error": "Не вдалося змінити пароль",
|
||||
"password_changed": "Пароль змінено",
|
||||
"logout": "Вийти",
|
||||
"login": "Увійти",
|
||||
"confirm": "Підтвердити",
|
||||
"new_password": "Новий пароль",
|
||||
"current_password": "Поточний пароль",
|
||||
"edit": "Редагувати",
|
||||
"change_password": "Змінити пароль",
|
||||
"add_forward": "Додайте адресу переадресації е-пошти",
|
||||
"add_mail": "Додайте аліас е-пошти",
|
||||
"new_forward": "novapereadresaciya@myforeigndomain.org",
|
||||
"new_mail": "novaeposhta@mydomain.org",
|
||||
"mail_forward": "Адреса переадресації е-пошти",
|
||||
"mail_addresses": "Адреси е-пошти",
|
||||
"fullname": "Повне ім'я",
|
||||
"username": "Ім'я користувача",
|
||||
"information": "Ваші відомості",
|
||||
"portal": "Портал Yunohost",
|
||||
"password": "Пароль",
|
||||
"ok": "Гаразд"
|
||||
}
|
Loading…
Add table
Reference in a new issue