TOTP Manager part (#1359)

This commit is contained in:
Xavier Guimard 2018-02-21 06:48:06 +01:00
parent 344b9db804
commit 2d58b3f9f6
12 changed files with 123 additions and 18 deletions

View File

@ -129,7 +129,7 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "llng-fastcgi-server 1" .IX Title "llng-fastcgi-server 1"
.TH llng-fastcgi-server 1 "2017-11-11" "perl v5.26.1" "User Contributed Perl Documentation" .TH llng-fastcgi-server 1 "2018-02-18" "perl v5.26.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents. .\" way too many mistakes in technical documents.
.if n .ad l .if n .ad l
@ -165,6 +165,8 @@ Each parameter can be set by an option or a environment variable.
.IX Item "--engine -e ($ENV{ENGINE}): Plack::Handler engine, default to FCGI" .IX Item "--engine -e ($ENV{ENGINE}): Plack::Handler engine, default to FCGI"
.IP "\-\-socket \-s ($ENV{\s-1SOCKET\s0}): Unix socket" 4 .IP "\-\-socket \-s ($ENV{\s-1SOCKET\s0}): Unix socket" 4
.IX Item "--socket -s ($ENV{SOCKET}): Unix socket" .IX Item "--socket -s ($ENV{SOCKET}): Unix socket"
.IP "\-\-listen \-l ($ENV{\s-1LISTEN\s0}): Listening address (\s-1HOST:PORT, :PORT,\s0 or \s-1PATH\s0)" 4
.IX Item "--listen -l ($ENV{LISTEN}): Listening address (HOST:PORT, :PORT, or PATH)"
.IP "\-\-customFunctionsFile \-f ($ENV{\s-1CUSTOM_FUNCTIONS_FILE\s0}): file to load for custom functions" 4 .IP "\-\-customFunctionsFile \-f ($ENV{\s-1CUSTOM_FUNCTIONS_FILE\s0}): file to load for custom functions" 4
.IX Item "--customFunctionsFile -f ($ENV{CUSTOM_FUNCTIONS_FILE}): file to load for custom functions" .IX Item "--customFunctionsFile -f ($ENV{CUSTOM_FUNCTIONS_FILE}): file to load for custom functions"
.ie n .IP "\-\-plackOptions: other options to pass to Plack. This multi-valued parameter must have ""key=value"" values." 4 .ie n .IP "\-\-plackOptions: other options to pass to Plack. This multi-valued parameter must have ""key=value"" values." 4

View File

@ -242,6 +242,9 @@ sub defaultValues {
'timeout' => 72000, 'timeout' => 72000,
'timeoutActivity' => 0, 'timeoutActivity' => 0,
'timeoutActivityInterval' => 60, 'timeoutActivityInterval' => 60,
'totp2fActivation' => 0,
'totp2fInterval' => 30,
'totp2fRange' => 1,
'trustedProxies' => '', 'trustedProxies' => '',
'twitterAuthnLevel' => 1, 'twitterAuthnLevel' => 1,
'u2fActivation' => 0, 'u2fActivation' => 0,

View File

@ -3123,6 +3123,25 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
'default' => 0, 'default' => 0,
'type' => 'bool' 'type' => 'bool'
}, },
'totp2fActivation' => {
'default' => 0,
'type' => 'boolOrExpr'
},
'totp2fAuthnLevel' => {
'type' => 'int'
},
'totp2fInterval' => {
'default' => 30,
'type' => 'int'
},
'totp2fRange' => {
'default' => 1,
'type' => 'int'
},
'totpSelfRegistration' => {
'default' => 0,
'type' => 'bool'
},
'trustedDomains' => { 'trustedDomains' => {
'type' => 'text' 'type' => 'text'
}, },

View File

@ -106,8 +106,8 @@ sub types {
select => { select => {
test => sub { test => sub {
my $test = my $test =
grep ( grep ( { $_ eq $_[0] }
{ $_ eq $_[0] } map ( { $_->{k} } @{ $_[2]->{select} } ) ); map ( { $_->{k} } @{ $_[2]->{select} } ) );
return $test return $test
? 1 ? 1
: ( 1, "Invalid value '$_[0]' for this select" ); : ( 1, "Invalid value '$_[0]' for this select" );
@ -1030,6 +1030,33 @@ sub attributes {
'Authentication level for users authentified by password+U2F' 'Authentication level for users authentified by password+U2F'
}, },
# TOTP second factor
totp2fActivation => {
type => 'boolOrExpr',
default => 0,
documentation => 'TOTP activation',
},
totpSelfRegistration => {
type => 'bool',
default => 0,
documentation => 'TOTP self registration activation',
},
totp2fAuthnLevel => {
type => 'int',
documentation =>
'Authentication level for users authentified by password+TOTP'
},
totp2fInterval => {
type => 'int',
default => 30,
documentation => 'TOTP interval',
},
totp2fRange => {
type => 'int',
default => 1,
documentation => 'TOTP range (number of interval to test)',
},
# External second factor # External second factor
ext2fActivation => { ext2fActivation => {
type => 'boolOrExpr', type => 'boolOrExpr',
@ -1180,7 +1207,7 @@ sub attributes {
grep { $_ =~ /Undefined subroutine/ ? () : $_ } grep { $_ =~ /Undefined subroutine/ ? () : $_ }
split( /\n/, $@ ) ); split( /\n/, $@ ) );
return $err ? ( 1, "__badExpression__: $err" ) : (1); return $err ? ( 1, "__badExpression__: $err" ) : (1);
} }
}, },
documentation => 'Virtualhost headers', documentation => 'Virtualhost headers',
}, },
@ -2167,8 +2194,9 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
radiusServer => { type => 'text', }, radiusServer => { type => 'text', },
# REST # REST
restAuthUrl => { type => 'url' }, restAuthUrl => { type => 'url' },
restUserDBUrl => { type => 'url' }, restUserDBUrl => { type => 'url' },
# TODO: add restMailDBUrl # TODO: add restMailDBUrl
restPwdConfirmUrl => { type => 'url' }, restPwdConfirmUrl => { type => 'url' },
restPwdModifyUrl => { type => 'url' }, restPwdModifyUrl => { type => 'url' },
@ -2290,14 +2318,14 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
default => 2, default => 2,
documentation => 'DBI authentication level', documentation => 'DBI authentication level',
}, },
dbiAuthChain => { type => 'text', }, dbiAuthChain => { type => 'text', },
dbiAuthUser => { type => 'text', }, dbiAuthUser => { type => 'text', },
dbiAuthPassword => { type => 'password', }, dbiAuthPassword => { type => 'password', },
dbiUserChain => { type => 'text', }, dbiUserChain => { type => 'text', },
dbiUserUser => { type => 'text', }, dbiUserUser => { type => 'text', },
dbiUserPassword => { type => 'password', }, dbiUserPassword => { type => 'password', },
dbiAuthTable => { type => 'text', }, dbiAuthTable => { type => 'text', },
dbiUserTable => { type => 'text', }, dbiUserTable => { type => 'text', },
# TODO: add dbiMailCol # TODO: add dbiMailCol
dbiAuthLoginCol => { type => 'text', }, dbiAuthLoginCol => { type => 'text', },

View File

@ -209,7 +209,10 @@ sub tree {
{ {
title => 'kerberosParams', title => 'kerberosParams',
help => 'authkerberos.html', help => 'authkerberos.html',
nodes => [ 'krbKeytab', 'krbByJs', 'krbAuthnLevel', 'krbRemoveDomain' ] nodes => [
'krbKeytab', 'krbByJs',
'krbAuthnLevel', 'krbRemoveDomain'
]
}, },
{ {
title => 'ldapParams', title => 'ldapParams',
@ -641,6 +644,11 @@ sub tree {
help => 'autoSignin.html', help => 'autoSignin.html',
nodes => ['autoSigninRules'], nodes => ['autoSigninRules'],
}, },
]
},
{
title => 'secondFactors',
nodes => [
{ {
title => 'u2f', title => 'u2f',
help => 'u2f.html', help => 'u2f.html',
@ -650,6 +658,16 @@ sub tree {
'u2fAuthnLevel' 'u2fAuthnLevel'
] ]
}, },
{
title => 'totp',
help => 'totp.html',
form => 'simpleInputContainer',
nodes => [
'totp2fActivation', 'totpSelfRegistration',
'totp2fAuthnLevel', 'totp2fInterval',
'totp2fRange',
]
},
{ {
title => 'external2f', title => 'external2f',
help => 'external2f.html', help => 'external2f.html',

View File

@ -644,6 +644,7 @@
"save": "حفظ", "save": "حفظ",
"saveReport": "احفظ التقرير", "saveReport": "احفظ التقرير",
"savingConfirmation": "حفظ التأكيد", "savingConfirmation": "حفظ التأكيد",
"secondFactors": "Second factors",
"securedCookie": "ملفات تعريف الارتباط المضمونة (سسل)", "securedCookie": "ملفات تعريف الارتباط المضمونة (سسل)",
"security": "الحماية", "security": "الحماية",
"serverError": "خطأ في جهاز الخادم", "serverError": "خطأ في جهاز الخادم",
@ -699,6 +700,12 @@
"timeoutActivity": "مهلة نشاط الجلسات", "timeoutActivity": "مهلة نشاط الجلسات",
"timeoutActivityInterval": "فترة تحديث الجلسات", "timeoutActivityInterval": "فترة تحديث الجلسات",
"tokenUseGlobalStorage": "استخدام سعة التخزين العامة", "tokenUseGlobalStorage": "استخدام سعة التخزين العامة",
"totp":"TOTP",
"totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level",
"totp2fInterval":"Interval",
"totp2fRange":"Range of attempts",
"totpSelfRegistration":"Self registration",
"trustedDomains": "النطاقات الموثوق بها", "trustedDomains": "النطاقات الموثوق بها",
"trustedProxies": "عناوين الآي بي البروكسي الموثوق بها", "trustedProxies": "عناوين الآي بي البروكسي الموثوق بها",
"twitterAppName": "اسم التطبيق", "twitterAppName": "اسم التطبيق",

View File

@ -644,6 +644,7 @@
"save": "Save", "save": "Save",
"saveReport": "Save report", "saveReport": "Save report",
"savingConfirmation": "Saving confirmation", "savingConfirmation": "Saving confirmation",
"secondFactors": "Second factors",
"securedCookie": "Secured Cookie (SSL)", "securedCookie": "Secured Cookie (SSL)",
"security": "Security", "security": "Security",
"serverError": "Server error", "serverError": "Server error",
@ -699,6 +700,12 @@
"timeoutActivity": "Sessions activity timeout", "timeoutActivity": "Sessions activity timeout",
"timeoutActivityInterval": "Sessions update interval", "timeoutActivityInterval": "Sessions update interval",
"tokenUseGlobalStorage": "Use global storage", "tokenUseGlobalStorage": "Use global storage",
"totp":"TOTP",
"totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level",
"totp2fInterval":"Interval",
"totp2fRange":"Range of attempts",
"totpSelfRegistration":"Self registration",
"trustedDomains": "Trusted domains", "trustedDomains": "Trusted domains",
"trustedProxies": "Trusted proxies IP", "trustedProxies": "Trusted proxies IP",
"twitterAppName": "Application name", "twitterAppName": "Application name",

View File

@ -643,6 +643,7 @@
"Same": "Identique", "Same": "Identique",
"save": "Sauver", "save": "Sauver",
"saveReport": "Rapport de sauvegarde", "saveReport": "Rapport de sauvegarde",
"secondFactors": "Second facteurs",
"savingConfirmation": "Confirmation de sauvegarde", "savingConfirmation": "Confirmation de sauvegarde",
"securedCookie": "Cookie sécurisé (HTTPS)", "securedCookie": "Cookie sécurisé (HTTPS)",
"security": "Sécurité", "security": "Sécurité",
@ -699,6 +700,12 @@
"timeoutActivity": "Délai d'expiration des sessions", "timeoutActivity": "Délai d'expiration des sessions",
"timeoutActivityInterval": "Intervalle de mise à jour des sessions", "timeoutActivityInterval": "Intervalle de mise à jour des sessions",
"tokenUseGlobalStorage": "Utiliser le cache global", "tokenUseGlobalStorage": "Utiliser le cache global",
"totp":"TOTP",
"totp2fActivation":"Activation",
"totp2fAuthnLevel":"Niceau d'authentification TOTP",
"totp2fInterval":"Intervalle",
"totp2fRange":"Nombre d'intervalles à tester",
"totpSelfRegistration":"Auto-enregistrement",
"trustedDomains": "Domaines approuvés", "trustedDomains": "Domaines approuvés",
"trustedProxies": "IP des proxys de confiance", "trustedProxies": "IP des proxys de confiance",
"twitterAppName": "Nom de l'application", "twitterAppName": "Nom de l'application",
@ -710,7 +717,7 @@
"u2f": "U2F", "u2f": "U2F",
"u2fActivation": "Activation", "u2fActivation": "Activation",
"u2fAuthnLevel": "Niveau d'authentification U2F", "u2fAuthnLevel": "Niveau d'authentification U2F",
"u2fSelfRegistration": "Activation de l'enregistrement", "u2fSelfRegistration": "Auto-enregistrement",
"uid": "Identifiant", "uid": "Identifiant",
"unknownAttrOrMacro": "Attribut ou macro inconnu", "unknownAttrOrMacro": "Attribut ou macro inconnu",
"unknownError": "Erreur inconnue", "unknownError": "Erreur inconnue",

View File

@ -644,6 +644,7 @@
"save": "Salva", "save": "Salva",
"saveReport": "Salva report", "saveReport": "Salva report",
"savingConfirmation": "Salvataggio della conferma", "savingConfirmation": "Salvataggio della conferma",
"secondFactors": "Second factors",
"securedCookie": "Cookie protetti (SSL)", "securedCookie": "Cookie protetti (SSL)",
"security": "Sicurezza", "security": "Sicurezza",
"serverError": "Errore del server", "serverError": "Errore del server",
@ -699,6 +700,12 @@
"timeoutActivity": "Timeout attività di sessioni", "timeoutActivity": "Timeout attività di sessioni",
"timeoutActivityInterval": "Intervallo di aggiornamento delle sessioni", "timeoutActivityInterval": "Intervallo di aggiornamento delle sessioni",
"tokenUseGlobalStorage": "Utilizza lo storage globale", "tokenUseGlobalStorage": "Utilizza lo storage globale",
"totp":"TOTP",
"totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level",
"totp2fInterval":"Interval",
"totp2fRange":"Range of attempts",
"totpSelfRegistration":"Self registration",
"trustedDomains": "Domini attendibili", "trustedDomains": "Domini attendibili",
"trustedProxies": "IP proxy attendibili", "trustedProxies": "IP proxy attendibili",
"twitterAppName": "Nome dell'applicazione", "twitterAppName": "Nome dell'applicazione",

View File

@ -644,6 +644,7 @@
"save": "Lưu", "save": "Lưu",
"saveReport": "Lưu báo cáo", "saveReport": "Lưu báo cáo",
"savingConfirmation": "Lưu xác nhận", "savingConfirmation": "Lưu xác nhận",
"secondFactors": "Second factors",
"securedCookie": "Cookie bảo mật (SSL)", "securedCookie": "Cookie bảo mật (SSL)",
"security": "An ninh", "security": "An ninh",
"serverError": "Lỗi máy chủ", "serverError": "Lỗi máy chủ",
@ -699,6 +700,12 @@
"timeoutActivity": "Thời gian chờ của các hoạt động phiên", "timeoutActivity": "Thời gian chờ của các hoạt động phiên",
"timeoutActivityInterval": "Khoảng thời gian cập nhật phiên", "timeoutActivityInterval": "Khoảng thời gian cập nhật phiên",
"tokenUseGlobalStorage": "Sử dụng lưu trữ toàn cục", "tokenUseGlobalStorage": "Sử dụng lưu trữ toàn cục",
"totp":"TOTP",
"totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level",
"totp2fInterval":"Interval",
"totp2fRange":"Range of attempts",
"totpSelfRegistration":"Self registration",
"trustedDomains": "Miền tin cậy", "trustedDomains": "Miền tin cậy",
"trustedProxies": "proxies IP tin cậy", "trustedProxies": "proxies IP tin cậy",
"twitterAppName": "Tên ứng dụng", "twitterAppName": "Tên ứng dụng",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long