Jonathan Druart
6eeb9bc1b3
This patchset introduces the Two-factor authentication (2FA) idea in Koha. It is far for complete, and only implement one way of doing it, but at least it's a first step. The idea here is to offer the librarian user the ability to enable/disable 2FA when logging in to Koha. It will use time-based, one-time passwords (TOTP) as the second factor, an application to handle that will be required. https://en.wikipedia.org/wiki/Time-based_One-Time_Password More developements are possible on top of this: * Send a notice (sms or email) with the code * Force 2FA for librarians * Implementation for OPAC * WebAuthn, FIDO2, etc. - https://fidoalliance.org/category/intro-fido/ Test plan: 0. a. % apt install -y libauth-googleauth-perl && updatedatabase && restart_all b. To test this you will need an app to generate the TOTP token, you can use FreeOTP that is open source and easy to use. 1. Turn on TwoFactorAuthentication 2. Go to your account, click 'More' > 'Manage Two-Factor authentication' 3. Click Enable, scan the QR code with the app, insert the pin code and register 4. Your account now requires 2FA to login! 5. Notice that you can browse until you logout 6. Logout 7. Enter the credential and the pincode provided by the app 8. Logout 9. Enter the credential, no pincode 10. Confirm that you are stuck on the second auth form (ie. you cannot access other Koha pages) 11. Click logout => First login form 12. Enter the credential and the pincode provided by the app Sponsored-by: Orex Digital Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
178 lines
6.3 KiB
Perl
178 lines
6.3 KiB
Perl
requires 'Algorithm::CheckDigits', '0.5';
|
|
requires 'Array::Utils', '0.5';
|
|
requires 'Authen::CAS::Client', '0.05';
|
|
requires 'Auth::GoogleAuth', '1.02';
|
|
requires 'Biblio::EndnoteStyle', '0.05';
|
|
requires 'Business::ISBN', '2.05';
|
|
requires 'Business::ISSN', '0.91';
|
|
requires 'Bytes::Random::Secure', '0.28';
|
|
requires 'CGI', '3.15';
|
|
requires 'CGI::Carp', '1.29';
|
|
requires 'CGI::Compile', '>= 0.17, != 0.24';
|
|
requires 'CGI::Emulate::PSGI', '0.20';
|
|
requires 'CGI::Session', '4.2';
|
|
requires 'CPAN::Meta', '2.150006';
|
|
requires 'Cache::Memcached', '1.30';
|
|
requires 'Cache::Memcached::Fast::Safe', '0.06';
|
|
requires 'Class::Accessor', '0.3';
|
|
requires 'Class::Factory::Util', '1.6';
|
|
requires 'Class::Inspector', '1.31';
|
|
requires 'Clone', '0.37';
|
|
requires 'Crypt::Eksblowfish::Bcrypt', '0.008';
|
|
requires 'DBD::Mock', '1.39';
|
|
requires 'DBD::mysql', '4.004';
|
|
requires 'DBI', '1.53';
|
|
requires 'DBIx::Class::Schema::Loader', '0.07039';
|
|
requires 'DBIx::RunSQL', '0.14';
|
|
requires 'Data::Dumper', '2.121';
|
|
requires 'Data::ICal', '0.13';
|
|
requires 'Date::Calc', '5.4';
|
|
requires 'Date::Manip', '5.44';
|
|
requires 'DateTime', '0.58';
|
|
requires 'DateTime::Event::ICal', '0.08';
|
|
requires 'DateTime::Format::ICal', '0.09';
|
|
requires 'DateTime::Format::MySQL', '0.04';
|
|
requires 'DateTime::TimeZone', '1.20';
|
|
requires 'Digest::MD5', '2.36';
|
|
requires 'Digest::SHA', '5.43';
|
|
requires 'Email::Address', '>= 1.908';
|
|
requires 'Email::Date', '1.103';
|
|
requires 'Email::MessageID', '1.406';
|
|
requires 'Email::Sender', '1.300030';
|
|
requires 'Email::Stuffer', '0.014';
|
|
requires 'Exception::Class', '1.38';
|
|
requires 'File::Slurp', '9999.13';
|
|
requires 'Font::TTF', '0.45';
|
|
requires 'GD', '2.39';
|
|
requires 'GD::Barcode::UPCE', '1.1';
|
|
requires 'Getopt::Long', '2.35';
|
|
requires 'Getopt::Std', '1.05';
|
|
requires 'HTML::Entities', '3.69';
|
|
requires 'HTML::FormatText', '1.23';
|
|
requires 'HTML::Scrubber', '0.08';
|
|
requires 'HTTP::Cookies', '1.39';
|
|
requires 'HTTP::OAI', '3.2';
|
|
requires 'HTTP::Request::Common', '1.26';
|
|
requires 'IPC::Cmd', '0.46';
|
|
requires 'JSON', '2.07';
|
|
requires 'JSON::Validator', '3.14';
|
|
requires 'LWP::Simple', '1.41';
|
|
requires 'LWP::UserAgent', '2.033';
|
|
requires 'Library::CallNumber::LC', '0.22';
|
|
requires 'Lingua::Stem', '0.82';
|
|
requires 'Lingua::Stem::Snowball', '0.952';
|
|
requires 'List::MoreUtils', '0.21';
|
|
requires 'List::Util', '1.18';
|
|
requires 'Locale::Currency::Format', '1.28';
|
|
requires 'Locale::Messages', '1.20';
|
|
requires 'Locale::PO', '0.24';
|
|
requires 'Log::Log4perl', '1.29';
|
|
requires 'MARC::Charset', '0.98';
|
|
requires 'MARC::File::XML', 'v1.0.1';
|
|
requires 'MARC::Record', 'v2.0.6';
|
|
requires 'MARC::Record::MiJ', '0.04';
|
|
requires 'MIME::Base64', '3.07';
|
|
requires 'Modern::Perl', '1.03';
|
|
requires 'Module::CPANfile', '1.1000';
|
|
requires 'Mojo::JWT', '0.08';
|
|
requires 'Mojolicious', '8.12';
|
|
requires 'Mojolicious::Plugin::OpenAPI', '2.16';
|
|
requires 'Net::CIDR', '0.17';
|
|
requires 'Net::Netmask', '1.9022';
|
|
requires 'Net::Stomp', '0.57';
|
|
requires 'Net::Z3950::ZOOM', '1.16';
|
|
requires 'Number::Format', '1.52';
|
|
requires 'OpenOffice::OODoc', '2.125';
|
|
requires 'PDF::API2', '2';
|
|
requires 'PDF::Reuse', '0.36';
|
|
requires 'PDF::Reuse::Barcode', '0.05';
|
|
requires 'PDF::Table', 'v0.9.3';
|
|
requires 'POSIX', '1.09';
|
|
requires 'Plack::Middleware::LogWarn', '0.001002';
|
|
requires 'Plack::Middleware::ReverseProxy', '0.14';
|
|
requires 'Readonly', '2.00';
|
|
requires 'Schedule::At', '1.06';
|
|
requires 'Search::Elasticsearch', '6.00';
|
|
requires 'Sereal::Decoder', '3.0';
|
|
requires 'Sereal::Encoder', '3.0';
|
|
requires 'Storable', '2.20';
|
|
requires 'String::Random', '0.22';
|
|
requires 'Template', '>= 2.22, != 3.008';
|
|
requires 'Template::Plugin::HtmlToText', '0.03';
|
|
requires 'Template::Plugin::JSON::Escape', '0.02';
|
|
requires 'Term::ANSIColor', '1.1';
|
|
requires 'Test', '1.25';
|
|
requires 'Test::Harness', '2.56';
|
|
requires 'Test::MockModule', '0.05';
|
|
requires 'Test::More', '1.302073';
|
|
requires 'Text::Bidi', '0.03';
|
|
requires 'Text::CSV', '0.01';
|
|
requires 'Text::CSV::Encoded', '0.09';
|
|
requires 'Text::CSV_XS', '0.32';
|
|
requires 'Text::Iconv', '1.7';
|
|
requires 'Text::PDF', '0.29';
|
|
requires 'Text::Wrap', '2005.082401';
|
|
requires 'Time::HiRes', '1.86';
|
|
requires 'Time::localtime', '1.02';
|
|
requires 'Try::Tiny', '0.22';
|
|
requires 'UNIVERSAL::can', '1.10';
|
|
requires 'URI::Escape', '3.31';
|
|
requires 'UUID', '0.05';
|
|
requires 'Unicode::Normalize', '0.32';
|
|
requires 'WWW::CSRF', '1.00';
|
|
requires 'XML::Dumper', '0.81';
|
|
requires 'XML::LibXML', '1.59';
|
|
requires 'XML::LibXSLT', '1.59';
|
|
requires 'XML::RSS', '1.31';
|
|
requires 'XML::SAX::ParserFactory', '1.01';
|
|
requires 'XML::SAX::Writer', '0.44';
|
|
requires 'XML::Simple', '2.14';
|
|
requires 'YAML::XS', '0.76';
|
|
recommends 'AnyEvent', '5.0';
|
|
recommends 'AnyEvent::HTTP', '2.13';
|
|
recommends 'Archive::Extract', '0.60';
|
|
recommends 'Archive::Zip', '1.30';
|
|
recommends 'CGI::Session::Driver::memcached', '0.04';
|
|
recommends 'DBD::SQLite', '1.54';
|
|
recommends 'Devel::Cover', '0.89';
|
|
recommends 'File::Copy', '2.08';
|
|
recommends 'File::Path', '2.07';
|
|
recommends 'File::Temp', '0.22';
|
|
recommends 'Graphics::Magick', 'v1.3.5';
|
|
recommends 'Gravatar::URL', '1.03';
|
|
recommends 'HTTPD::Bench::ApacheBench', '0.73';
|
|
recommends 'LWP::Protocol::https', '5.836';
|
|
recommends 'Lingua::Ispell', '0.07';
|
|
recommends 'Locale::XGettext::TT2', '0.6';
|
|
recommends 'Module::Bundled::Files', '0.03';
|
|
recommends 'Module::Load::Conditional', '0.38';
|
|
recommends 'Module::Pluggable', '3.9';
|
|
recommends 'Moo', '1';
|
|
recommends 'Net::LDAP', '0.33';
|
|
recommends 'Net::LDAP::Filter', '0.14';
|
|
recommends 'Net::OAuth2::AuthorizationServer', '0.16';
|
|
recommends 'Net::SFTP::Foreign', '1.73';
|
|
recommends 'Net::Server', '0.97';
|
|
recommends 'Net::Z3950::SimpleServer', '1.15';
|
|
recommends 'PDF::FromHTML', '0.31';
|
|
recommends 'Parallel::ForkManager', '0.75';
|
|
recommends 'SMS::Send', '0.05';
|
|
recommends 'Selenium::Remote::Driver', '1.27';
|
|
recommends 'Starman', '0.4014';
|
|
recommends 'Sys::CPU', '0.52';
|
|
recommends 'Template::Plugin::Stash', '1.006';
|
|
recommends 'Test::DBIx::Class', '0.42';
|
|
recommends 'Test::Deep', '0.106';
|
|
recommends 'Test::Exception', '0.35';
|
|
recommends 'Test::MockObject', '1.09';
|
|
recommends 'Test::MockTime', '0.13';
|
|
recommends 'Test::Strict', '0.14';
|
|
recommends 'Test::WWW::Mechanize', '1.42';
|
|
recommends 'Test::Warn', '0.21';
|
|
recommends 'Test::YAML::Valid', '0.04';
|
|
recommends 'Text::CSV::Unicode', '0.40';
|
|
recommends 'Text::Unidecode', '0.04';
|
|
recommends 'Time::Fake', '0.11';
|
|
recommends 'UNIVERSAL::require', '0.13';
|
|
recommends 'WebService::ILS', '0.17';
|
|
recommends 'XML::Writer', '0.614';
|