Commit fb8ec238 authored by Christophe Maudoux's avatar Christophe Maudoux

Merge branch 'v2.0'

parents 7e9aaea6 6dee2f2d
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
"authentication" : "Demo", "authentication" : "Demo",
"cfgAuthor" : "The LemonLDAP::NG team", "cfgAuthor" : "The LemonLDAP::NG team",
"cfgNum" : 1, "cfgNum" : 1,
"cfgVersion" : "2.0.2", "cfgVersion" : "2.0.1",
"cookieName" : "lemonldap", "cookieName" : "lemonldap",
"demoExportedVars" : { "demoExportedVars" : {
"cn" : "cn", "cn" : "cn",
......
...@@ -121,9 +121,9 @@ sub defaultValues { ...@@ -121,9 +121,9 @@ sub defaultValues {
'macros' => {}, 'macros' => {},
'mailCharset' => 'utf-8', 'mailCharset' => 'utf-8',
'mailFrom' => 'noreply@example.com', 'mailFrom' => 'noreply@example.com',
'mailPwdRstUrl' => 'http://auth.example.com/resetpwd',
'mailSessionKey' => 'mail', 'mailSessionKey' => 'mail',
'mailTimeout' => 0, 'mailTimeout' => 0,
'mailUrl' => 'http://auth.example.com/resetpwd',
'managerDn' => '', 'managerDn' => '',
'managerPassword' => '', 'managerPassword' => '',
'max2FDevices' => 10, 'max2FDevices' => 10,
......
...@@ -16,10 +16,8 @@ BEGIN { use_ok('Lemonldap::NG::Common::Conf') } ...@@ -16,10 +16,8 @@ BEGIN { use_ok('Lemonldap::NG::Common::Conf') }
my $h; my $h;
ok( ok( $h = new Lemonldap::NG::Common::Conf(
$h = new Lemonldap::NG::Common::Conf( { type => 'File',
{
type => 'File',
dirName => "t/", dirName => "t/",
} }
), ),
...@@ -39,25 +37,27 @@ my @test = ( ...@@ -39,25 +37,27 @@ my @test = (
{ cfgNum => 1, test => 'éà' } { cfgNum => 1, test => 'éà' }
); );
for ( my $i = 0 ; $i < @test ; $i++ ) { for ( my $i = 0; $i < @test; $i++ ) {
ok( $h->store( $test[$i] ) == 1, "Test $i is stored" ) ok( $h->store( $test[$i] ) == 1, "Test $i is stored" )
or print STDERR "$Lemonldap::NG::Common::Conf::msg $!"; or print STDERR "$Lemonldap::NG::Common::Conf::msg $!";
$count++; $count++;
if ( -x '/usr/bin/file' ) { if ( -x '/usr/bin/file' ) {
eval { eval {
open F, 'file t/lmConf-1.json |'; open F, 'file t/lmConf-1.json |';
$_ = join( '', <F> ); $_ = join( '', <F> );
close F; close F;
ok( /(ascii|utf-?8)/si, "File is $1 encoded" )
or print STDERR "Result: $_\n"; ## Debian Buster 'file' command returns JSON DATA
ok( /(ascii|utf-?8|json\sdata)/si, "File is $1 encoded" )
or print STDERR "Result: $_\n";
$count++; $count++;
}; };
} }
my $cfg; my $cfg;
ok( $cfg = $h->load(1), "Test $i can be read" ) ok( $cfg = $h->load(1), "Test $i can be read" )
or print STDERR $Lemonldap::NG::Common::Conf::msg; or print STDERR $Lemonldap::NG::Common::Conf::msg;
ok( $cfg->{test} eq $test[$i]->{test}, "Test $i is restored" ) ok( $cfg->{test} eq $test[$i]->{test}, "Test $i is restored" )
or print STDERR "Expect $cfg->{test} eq $test[$i]->{test}\n"; or print STDERR "Expect $cfg->{test} eq $test[$i]->{test}\n";
$count += 2; $count += 2;
} }
......
...@@ -243,14 +243,6 @@ sub sfa { ...@@ -243,14 +243,6 @@ sub sfa {
$self->logger->debug( $self->logger->debug(
"Removing sessions unless a $_ device is registered"); "Removing sessions unless a $_ device is registered");
} }
#else {
# (
# return $self->sendError(
# $req, "Bad or Missing " . $_ . "Check parameter", 400
# )
# );
#}
} }
my $total = ( keys %$res ); my $total = ( keys %$res );
......
...@@ -1558,19 +1558,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][ ...@@ -1558,19 +1558,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
}, },
'type' => 'keyTextContainer' 'type' => 'keyTextContainer'
}, },
'mailBody' => {
'type' => 'longtext'
},
'mailCharset' => { 'mailCharset' => {
'default' => 'utf-8', 'default' => 'utf-8',
'type' => 'text' 'type' => 'text'
}, },
'mailConfirmBody' => {
'type' => 'longtext'
},
'mailConfirmSubject' => {
'type' => 'text'
},
'mailFrom' => { 'mailFrom' => {
'default' => 'noreply@example.com', 'default' => 'noreply@example.com',
'type' => 'text' 'type' => 'text'
...@@ -1582,6 +1573,22 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][ ...@@ -1582,6 +1573,22 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'default' => 0, 'default' => 0,
'type' => 'bool' 'type' => 'bool'
}, },
'mailPwdRstBody' => {
'type' => 'longtext'
},
'mailPwdRstConfirmBody' => {
'type' => 'longtext'
},
'mailPwdRstConfirmSubject' => {
'type' => 'text'
},
'mailPwdRstSubject' => {
'type' => 'text'
},
'mailPwdRstUrl' => {
'default' => 'http://auth.example.com/resetpwd',
'type' => 'url'
},
'mailReplyTo' => { 'mailReplyTo' => {
'type' => 'text' 'type' => 'text'
}, },
...@@ -1589,17 +1596,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][ ...@@ -1589,17 +1596,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'default' => 'mail', 'default' => 'mail',
'type' => 'text' 'type' => 'text'
}, },
'mailSubject' => {
'type' => 'text'
},
'mailTimeout' => { 'mailTimeout' => {
'default' => 0, 'default' => 0,
'type' => 'int' 'type' => 'int'
}, },
'mailUrl' => {
'default' => 'http://auth.example.com/resetpwd',
'type' => 'url'
},
'maintenance' => { 'maintenance' => {
'default' => 0, 'default' => 0,
'type' => 'bool' 'type' => 'bool'
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
package Lemonldap::NG::Manager::Build::Tree; package Lemonldap::NG::Manager::Build::Tree;
our $VERSION = '2.0.0'; our $VERSION = '2.0.2';
# TODO: Missing: # TODO: Missing:
# * activeTimer # * activeTimer
...@@ -506,11 +506,32 @@ sub tree { ...@@ -506,11 +506,32 @@ sub tree {
'upgradeSession', 'upgradeSession',
{ title => 'portalServers', { title => 'portalServers',
help => 'portalservers.html', help => 'portalservers.html',
form => 'simpleInputContainer',
nodes => [ nodes => [
'wsdlServer', 'restSessionServer', 'wsdlServer',
'restConfigServer', 'soapSessionServer', 'restSessionServer',
'soapConfigServer', 'exportedAttr' 'restConfigServer',
'soapSessionServer',
'soapConfigServer',
'exportedAttr',
{ title => 'SMTP',
nodes => [
'SMTPServer',
'SMTPPort',
'SMTPAuthUser',
'SMTPAuthPass',
'SMTPTLS',
'SMTPTLSOpts',
'mailSessionKey',
{ title => 'mailHeaders',
form => 'simpleInputContainer',
nodes => [
'mailFrom',
'mailReplyTo',
'mailCharset'
]
},
]
},
] ]
}, },
{ title => 'loginHistory', { title => 'loginHistory',
...@@ -537,36 +558,22 @@ sub tree { ...@@ -537,36 +558,22 @@ sub tree {
{ title => 'passwordManagement', { title => 'passwordManagement',
help => 'resetpassword.html', help => 'resetpassword.html',
nodes => [ nodes => [
{ title => 'SMTP', { title => 'mailPwdRstContent',
nodes => [
'SMTPServer', 'SMTPPort',
'SMTPAuthUser', 'SMTPAuthPass',
'SMTPTLS', 'SMTPTLSOpts',
]
},
{ title => 'mailHeaders',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'mailFrom', 'mailReplyTo', 'mailPwdRstSubject',
'mailCharset' 'mailPwdRstBody',
] 'mailPwdRstConfirmSubject',
}, 'mailPwdRstConfirmBody'
{ title => 'mailContent',
form => 'simpleInputContainer',
nodes => [
'mailSubject',
'mailBody',
'mailConfirmSubject',
'mailConfirmBody'
] ]
}, },
{ title => 'mailOther', { title => 'mailOther',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'mailUrl', 'mailPwdRstUrl',
'randomPasswordRegexp', 'randomPasswordRegexp',
'mailTimeout', 'mailTimeout',
'mailSessionKey'
] ]
} }
] ]
...@@ -621,25 +628,32 @@ sub tree { ...@@ -621,25 +628,32 @@ sub tree {
help => 'u2f.html', help => 'u2f.html',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'u2fActivation', 'u2fSelfRegistration', 'u2fActivation',
'u2fAuthnLevel', 'u2fUserCanRemoveKey', 'u2fSelfRegistration',
'u2fAuthnLevel',
'u2fUserCanRemoveKey',
] ]
}, },
{ title => 'external2f', { title => 'external2f',
help => 'external2f.html', help => 'external2f.html',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'ext2fActivation', 'ext2FSendCommand', 'ext2fActivation',
'ext2FValidateCommand', 'ext2fAuthnLevel', 'ext2FSendCommand',
'ext2FValidateCommand',
'ext2fAuthnLevel',
'ext2fLogo', 'ext2fLogo',
] ]
}, },
{ title => 'rest2f', { title => 'rest2f',
help => 'rest2f.html', help => 'rest2f.html',
nodes => [ nodes => [
'rest2fActivation', 'rest2fInitUrl', 'rest2fActivation',
'rest2fInitArgs', 'rest2fVerifyUrl', 'rest2fInitUrl',
'rest2fVerifyArgs', 'rest2fAuthnLevel', 'rest2fInitArgs',
'rest2fVerifyUrl',
'rest2fVerifyArgs',
'rest2fAuthnLevel',
'rest2fLogo', 'rest2fLogo',
] ]
}, },
...@@ -710,17 +724,20 @@ sub tree { ...@@ -710,17 +724,20 @@ sub tree {
help => 'redirections.html#portal_redirections', help => 'redirections.html#portal_redirections',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'jsRedirect', 'noAjaxHook', 'jsRedirect',
'noAjaxHook',
'skipRenewConfirmation', 'skipRenewConfirmation',
] ]
}, },
'nginxCustomHandlers', 'nginxCustomHandlers',
'logoutServices', 'logoutServices',
{ title => 'forms', { title => 'forms',
form => 'simpleInputContainer', form => 'simpleInputContainer',
nodes => [ nodes => [
'infoFormMethod', 'confirmFormMethod', 'infoFormMethod',
'redirectFormMethod', 'activeTimer', 'confirmFormMethod',
'redirectFormMethod',
'activeTimer',
] ]
}, },
] ]
...@@ -932,7 +949,9 @@ sub tree { ...@@ -932,7 +949,9 @@ sub tree {
{ title => 'casServiceMetadata', { title => 'casServiceMetadata',
nodes => [ nodes => [
'casAttr', 'casAttr',
'casAccessControlPolicy', 'casStorage', 'casStorageOptions', 'casAccessControlPolicy',
'casStorage',
'casStorageOptions',
'casAttributes', 'casAttributes',
] ]
......
...@@ -20,7 +20,22 @@ ...@@ -20,7 +20,22 @@
</ul> </ul>
</div> </div>
</div> </div>
<script type="text/menu">
[{
"title": "up",
"icon": "arrow-up"
},{
"title": "down",
"icon": "arrow-down"
},{
"title": "deleteEntry",
"icon": "minus-sign"
},{
"title": "newApp",
"icon": "plus-sign"
}]
</script>
<!-- Uncomment this snippet to enable sub categories
<script type="text/menu"> <script type="text/menu">
[{ [{
"title": "up", "title": "up",
...@@ -39,3 +54,4 @@ ...@@ -39,3 +54,4 @@
"icon": "plus-sign" "icon": "plus-sign"
}] }]
</script> </script>
-->
\ No newline at end of file
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"خيارات لطلبات الخادم", "lwpOpts":"خيارات لطلبات الخادم",
"lwpSslOpts":"خيارات سسل لطلبات الخادم", "lwpSslOpts":"خيارات سسل لطلبات الخادم",
"macros":"ماكرو", "macros":"ماكرو",
"mailBody":"محتوى البريد الناجح", "mailPwdRstBody":"محتوى البريد الناجح",
"mailCharset":"charset", "mailCharset":"charset",
"mailConfirmBody":"تأكيد محتوى البريد", "mailPwdRstConfirmBody":"تأكيد محتوى البريد",
"mailConfirmSubject":"تأكيد عنوان بريد", "mailPwdRstConfirmSubject":"تأكيد عنوان بريد",
"mailContent":"محتوى البريد", "mailPwdRstContent":"Password reset mail content",
"mailFrom":"مرسل البريد", "mailFrom":"مرسل البريد",
"mailHeaders":"هيدر البريد", "mailHeaders":"هيدر البريد",
"mailLDAPFilter":"فلتر البريد", "mailLDAPFilter":"فلتر البريد",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"آخر", "mailOther":"آخر",
"mailReplyTo":"عنوان الجواب", "mailReplyTo":"عنوان الجواب",
"mailSessionKey":"مفتاح الجلسة الذي يحتوي على عنوان البريد الإلكتروني", "mailSessionKey":"مفتاح الجلسة الذي يحتوي على عنوان البريد الإلكتروني",
"mailSubject":"نجاح عنوان البريد", "mailPwdRstSubject":"نجاح عنوان البريد",
"mailTimeout":"عدم تطابق كلمت المرور", "mailTimeout":"عدم تطابق كلمت المرور",
"mailUrl":"صفحة اليو آر إل", "mailPwdRstUrl":"Password reset page URL",
"maintenance":"وضع الصيانة", "maintenance":"وضع الصيانة",
"malformedValue":"قيمة سيئة التصميم", "malformedValue":"قيمة سيئة التصميم",
"managerDn":"حساب", "managerDn":"حساب",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Options for server requests", "lwpOpts":"Options for server requests",
"lwpSslOpts":"SSL options for server requests", "lwpSslOpts":"SSL options for server requests",
"macros":"Macros", "macros":"Macros",
"mailBody":"Success mail content", "mailPwdRstBody":"Success mail content",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Confirmation mail content", "mailPwdRstConfirmBody":"Confirmation mail content",
"mailConfirmSubject":"Confirmation mail subject", "mailPwdRstConfirmSubject":"Confirmation mail subject",
"mailContent":"Mail content", "mailPwdRstContent":"Password reset mail content",
"mailFrom":"Mail sender", "mailFrom":"Mail sender",
"mailHeaders":"Mail headers", "mailHeaders":"Mail headers",
"mailLDAPFilter":"Mail filter", "mailLDAPFilter":"Mail filter",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"Other", "mailOther":"Other",
"mailReplyTo":"Reply address", "mailReplyTo":"Reply address",
"mailSessionKey":"Session key containing mail address", "mailSessionKey":"Session key containing mail address",
"mailSubject":"Success mail subject", "mailPwdRstSubject":"Success mail subject",
"mailTimeout":"Validity time of a password reset request", "mailTimeout":"Validity time of a password reset request",
"mailUrl":"Page URL", "mailPwdRstUrl":"Password reset page URL",
"maintenance":"Maintenance mode", "maintenance":"Maintenance mode",
"malformedValue":"Malformed value", "malformedValue":"Malformed value",
"managerDn":"Account", "managerDn":"Account",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Options for server requests", "lwpOpts":"Options for server requests",
"lwpSslOpts":"SSL options for server requests", "lwpSslOpts":"SSL options for server requests",
"macros":"Macros", "macros":"Macros",
"mailBody":"Success mail content", "mailPwdRstBody":"Success mail content",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Confirmation mail content", "mailPwdRstConfirmBody":"Confirmation mail content",
"mailConfirmSubject":"Confirmation mail subject", "mailPwdRstConfirmSubject":"Confirmation mail subject",
"mailContent":"Mail content", "mailPwdRstContent":"Password reset mail content",
"mailFrom":"Mail sender", "mailFrom":"Mail sender",
"mailHeaders":"Mail headers", "mailHeaders":"Mail headers",
"mailLDAPFilter":"Mail filter", "mailLDAPFilter":"Mail filter",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"Other", "mailOther":"Other",
"mailReplyTo":"Reply address", "mailReplyTo":"Reply address",
"mailSessionKey":"Session key containing mail address", "mailSessionKey":"Session key containing mail address",
"mailSubject":"Success mail subject", "mailPwdRstSubject":"Success mail subject",
"mailTimeout":"Validity time of a password reset request", "mailTimeout":"Validity time of a password reset request",
"mailUrl":"Page URL", "mailPwdRstUrl":"Password reset page URL",
"maintenance":"Maintenance mode", "maintenance":"Maintenance mode",
"malformedValue":"Malformed value", "malformedValue":"Malformed value",
"managerDn":"Account", "managerDn":"Account",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Options pour les requêtes serveur", "lwpOpts":"Options pour les requêtes serveur",
"lwpSslOpts":"Options SSL pour les requêtes serveur", "lwpSslOpts":"Options SSL pour les requêtes serveur",
"macros":"Macros", "macros":"Macros",
"mailBody":"Contenu du message de succès", "mailPwdRstBody":"Contenu du message de succès",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Contenu du message de confirmation", "mailPwdRstConfirmBody":"Contenu du message de confirmation",
"mailConfirmSubject":"Sujet du message de confirmation", "mailPwdRstConfirmSubject":"Sujet du message de confirmation",
"mailContent":"Contenu du mail", "mailPwdRstContent":"Contenu du mail de réinitialisation du mot de passe",
"mailFrom":"Expéditeur du message", "mailFrom":"Expéditeur du message",
"mailHeaders":"En-têtes du mail", "mailHeaders":"En-têtes du mail",
"mailLDAPFilter":"Filtre mail", "mailLDAPFilter":"Filtre mail",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"Autres", "mailOther":"Autres",
"mailReplyTo":"Adresse de réponse", "mailReplyTo":"Adresse de réponse",
"mailSessionKey":"Clef de session contenant l'adresse email", "mailSessionKey":"Clef de session contenant l'adresse email",
"mailSubject":"Sujet du message de succès", "mailPwdRstSubject":"Sujet du message de succès",
"mailTimeout":"Durée de validité d'une demande de réinitialisation", "mailTimeout":"Durée de validité d'une demande de réinitialisation",
"mailUrl":"URL de la page", "mailPwdRstUrl":"URL de la page de réinitialisation du mot de passe",
"maintenance":"Mode maintenance", "maintenance":"Mode maintenance",
"malformedValue":"Valeur mal formée", "malformedValue":"Valeur mal formée",
"managerDn":"Compte de connexion LDAP", "managerDn":"Compte de connexion LDAP",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Opzioni per le richieste del server", "lwpOpts":"Opzioni per le richieste del server",
"lwpSslOpts":"Opzioni SSL per le richieste del server", "lwpSslOpts":"Opzioni SSL per le richieste del server",
"macros":"Macro", "macros":"Macro",
"mailBody":"Successo contenuto di posta", "mailPwdRstBody":"Successo contenuto di posta",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Contenuto della mail di conferma", "mailPwdRstConfirmBody":"Contenuto della mail di conferma",
"mailConfirmSubject":"Soggetto della mail di conferma", "mailPwdRstConfirmSubject":"Soggetto della mail di conferma",
"mailContent":"Contenuto della mail", "mailPwdRstContent":"Contenuto della mail di ripristino della password",
"mailFrom":"Mittente", "mailFrom":"Mittente",
"mailHeaders":"Intestazioni di posta", "mailHeaders":"Intestazioni di posta",
"mailLDAPFilter":"Filtro mail", "mailLDAPFilter":"Filtro mail",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"Altro", "mailOther":"Altro",
"mailReplyTo":"Indirizzo di risposta", "mailReplyTo":"Indirizzo di risposta",
"mailSessionKey":"Chiave di sessione contenente l'indirizzo di posta", "mailSessionKey":"Chiave di sessione contenente l'indirizzo di posta",
"mailSubject":"Successo del soggetto della mail", "mailPwdRstSubject":"Successo del soggetto della mail",
"mailTimeout":"Tempo di validità di una richiesta di ripristino della password", "mailTimeout":"Tempo di validità di una richiesta di ripristino della password",
"mailUrl":"URL della pagina", "mailPwdRstUrl":"URL della pagina di ripristino della password",
"maintenance":"Modalità di manutenzione", "maintenance":"Modalità di manutenzione",
"malformedValue":"Valore malformato", "malformedValue":"Valore malformato",
"managerDn":"Account", "managerDn":"Account",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Tùy chọn cho yêu cầu máy chủ", "lwpOpts":"Tùy chọn cho yêu cầu máy chủ",
"lwpSslOpts":"Tùy chọn SSL cho yêu cầu máy chủ", "lwpSslOpts":"Tùy chọn SSL cho yêu cầu máy chủ",
"macros":"Macros", "macros":"Macros",
"mailBody":"Nội dung thư thành công", "mailPwdRstBody":"Nội dung thư thành công",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Xác nhận nội dung thư", "mailPwdRstConfirmBody":"Xác nhận nội dung thư",
"mailConfirmSubject":"Xác nhận chủ đề thư", "mailPwdRstConfirmSubject":"Xác nhận chủ đề thư",
"mailContent":"Nội dung thư", "mailPwdRstContent":"Password reset mail content",
"mailFrom":"Người gửi thư", "mailFrom":"Người gửi thư",
"mailHeaders":"Tiêu đề thư", "mailHeaders":"Tiêu đề thư",
"mailLDAPFilter":"Bộ lọc thư", "mailLDAPFilter":"Bộ lọc thư",
...@@ -391,9 +391,9 @@ ...@@ -391,9 +391,9 @@
"mailOther":"Khác", "mailOther":"Khác",
"mailReplyTo":"Địa chỉ trả lời", "mailReplyTo":"Địa chỉ trả lời",
"mailSessionKey":"Khóa phiên chứa địa chỉ thư", "mailSessionKey":"Khóa phiên chứa địa chỉ thư",
"mailSubject":"Chủ đề thư thành công", "mailPwdRstSubject":"Chủ đề thư thành công",
"mailTimeout":"Thời hạn hợp lệ của yêu cầu đặt lại mật khẩu", "mailTimeout":"Thời hạn hợp lệ của yêu cầu đặt lại mật khẩu",
"mailUrl":"URL trang", "mailPwdRstUrl":"Password reset page URL",
"maintenance":"Chế độ bảo trì", "maintenance":"Chế độ bảo trì",
"malformedValue":"Giá trị không hợp lệ", "malformedValue":"Giá trị không hợp lệ",
"managerDn":"Tài khoản", "managerDn":"Tài khoản",
......
...@@ -379,11 +379,11 @@ ...@@ -379,11 +379,11 @@
"lwpOpts":"Options for server requests", "lwpOpts":"Options for server requests",
"lwpSslOpts":"SSL options for server requests", "lwpSslOpts":"SSL options for server requests",
"macros":"Macros", "macros":"Macros",
"mailBody":"Success mail content", "mailPwdRstBody":"Success mail content",
"mailCharset":"Charset", "mailCharset":"Charset",
"mailConfirmBody":"Confirmation mail content",