diff options
6 files changed, 159 insertions, 37 deletions
diff --git a/composer.json b/composer.json index 46dc409b..af9a9e62 100644 --- a/composer.json +++ b/composer.json | |||
@@ -71,7 +71,7 @@ | |||
71 | "friendsofsymfony/user-bundle": "2.0.*", | 71 | "friendsofsymfony/user-bundle": "2.0.*", |
72 | "friendsofsymfony/oauth-server-bundle": "^1.5", | 72 | "friendsofsymfony/oauth-server-bundle": "^1.5", |
73 | "stof/doctrine-extensions-bundle": "^1.2", | 73 | "stof/doctrine-extensions-bundle": "^1.2", |
74 | "scheb/two-factor-bundle": "^3.0", | 74 | "scheb/two-factor-bundle": "^4.4", |
75 | "grandt/phpepub": "dev-master", | 75 | "grandt/phpepub": "dev-master", |
76 | "wallabag/php-mobi": "~1.0", | 76 | "wallabag/php-mobi": "~1.0", |
77 | "kphoen/rulerz-bundle": "~0.13", | 77 | "kphoen/rulerz-bundle": "~0.13", |
diff --git a/composer.lock b/composer.lock index e9173838..32d6e898 100644 --- a/composer.lock +++ b/composer.lock | |||
@@ -4,7 +4,7 @@ | |||
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", |
5 | "This file is @generated automatically" | 5 | "This file is @generated automatically" |
6 | ], | 6 | ], |
7 | "content-hash": "7b43c6d21bc5016660c4e95aa0fdbc12", | 7 | "content-hash": "2dfef02524d5e64b49dfca4dc54353c0", |
8 | "packages": [ | 8 | "packages": [ |
9 | { | 9 | { |
10 | "name": "bdunogier/guzzle-site-authenticator", | 10 | "name": "bdunogier/guzzle-site-authenticator", |
@@ -57,6 +57,61 @@ | |||
57 | "time": "2018-12-13T21:06:29+00:00" | 57 | "time": "2018-12-13T21:06:29+00:00" |
58 | }, | 58 | }, |
59 | { | 59 | { |
60 | "name": "beberlei/assert", | ||
61 | "version": "v3.2.1", | ||
62 | "source": { | ||
63 | "type": "git", | ||
64 | "url": "https://github.com/beberlei/assert.git", | ||
65 | "reference": "ce139b6bf8f07fb8389d2c8e15b98dc24fdd93c7" | ||
66 | }, | ||
67 | "dist": { | ||
68 | "type": "zip", | ||
69 | "url": "https://api.github.com/repos/beberlei/assert/zipball/ce139b6bf8f07fb8389d2c8e15b98dc24fdd93c7", | ||
70 | "reference": "ce139b6bf8f07fb8389d2c8e15b98dc24fdd93c7", | ||
71 | "shasum": "" | ||
72 | }, | ||
73 | "require": { | ||
74 | "php": "^7" | ||
75 | }, | ||
76 | "require-dev": { | ||
77 | "friendsofphp/php-cs-fixer": "*", | ||
78 | "phpstan/phpstan-shim": "*", | ||
79 | "phpunit/phpunit": ">=6.0.0 <8" | ||
80 | }, | ||
81 | "type": "library", | ||
82 | "autoload": { | ||
83 | "psr-4": { | ||
84 | "Assert\\": "lib/Assert" | ||
85 | }, | ||
86 | "files": [ | ||
87 | "lib/Assert/functions.php" | ||
88 | ] | ||
89 | }, | ||
90 | "notification-url": "https://packagist.org/downloads/", | ||
91 | "license": [ | ||
92 | "BSD-2-Clause" | ||
93 | ], | ||
94 | "authors": [ | ||
95 | { | ||
96 | "name": "Benjamin Eberlei", | ||
97 | "role": "Lead Developer", | ||
98 | "email": "kontakt@beberlei.de" | ||
99 | }, | ||
100 | { | ||
101 | "name": "Richard Quadling", | ||
102 | "role": "Collaborator", | ||
103 | "email": "rquadling@gmail.com" | ||
104 | } | ||
105 | ], | ||
106 | "description": "Thin assertion library for input validation in business models.", | ||
107 | "keywords": [ | ||
108 | "assert", | ||
109 | "assertion", | ||
110 | "validation" | ||
111 | ], | ||
112 | "time": "2019-05-28T15:18:28+00:00" | ||
113 | }, | ||
114 | { | ||
60 | "name": "behat/transliterator", | 115 | "name": "behat/transliterator", |
61 | "version": "v1.2.0", | 116 | "version": "v1.2.0", |
62 | "source": { | 117 | "source": { |
@@ -5231,6 +5286,68 @@ | |||
5231 | "time": "2019-07-17T20:56:16+00:00" | 5286 | "time": "2019-07-17T20:56:16+00:00" |
5232 | }, | 5287 | }, |
5233 | { | 5288 | { |
5289 | "name": "paragonie/constant_time_encoding", | ||
5290 | "version": "v2.2.3", | ||
5291 | "source": { | ||
5292 | "type": "git", | ||
5293 | "url": "https://github.com/paragonie/constant_time_encoding.git", | ||
5294 | "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb" | ||
5295 | }, | ||
5296 | "dist": { | ||
5297 | "type": "zip", | ||
5298 | "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/55af0dc01992b4d0da7f6372e2eac097bbbaffdb", | ||
5299 | "reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb", | ||
5300 | "shasum": "" | ||
5301 | }, | ||
5302 | "require": { | ||
5303 | "php": "^7" | ||
5304 | }, | ||
5305 | "require-dev": { | ||
5306 | "phpunit/phpunit": "^6|^7", | ||
5307 | "vimeo/psalm": "^1|^2" | ||
5308 | }, | ||
5309 | "type": "library", | ||
5310 | "autoload": { | ||
5311 | "psr-4": { | ||
5312 | "ParagonIE\\ConstantTime\\": "src/" | ||
5313 | } | ||
5314 | }, | ||
5315 | "notification-url": "https://packagist.org/downloads/", | ||
5316 | "license": [ | ||
5317 | "MIT" | ||
5318 | ], | ||
5319 | "authors": [ | ||
5320 | { | ||
5321 | "name": "Paragon Initiative Enterprises", | ||
5322 | "email": "security@paragonie.com", | ||
5323 | "homepage": "https://paragonie.com", | ||
5324 | "role": "Maintainer" | ||
5325 | }, | ||
5326 | { | ||
5327 | "name": "Steve 'Sc00bz' Thomas", | ||
5328 | "email": "steve@tobtu.com", | ||
5329 | "homepage": "https://www.tobtu.com", | ||
5330 | "role": "Original Developer" | ||
5331 | } | ||
5332 | ], | ||
5333 | "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", | ||
5334 | "keywords": [ | ||
5335 | "base16", | ||
5336 | "base32", | ||
5337 | "base32_decode", | ||
5338 | "base32_encode", | ||
5339 | "base64", | ||
5340 | "base64_decode", | ||
5341 | "base64_encode", | ||
5342 | "bin2hex", | ||
5343 | "encoding", | ||
5344 | "hex", | ||
5345 | "hex2bin", | ||
5346 | "rfc4648" | ||
5347 | ], | ||
5348 | "time": "2019-01-03T20:26:31+00:00" | ||
5349 | }, | ||
5350 | { | ||
5234 | "name": "paragonie/random_compat", | 5351 | "name": "paragonie/random_compat", |
5235 | "version": "v2.0.18", | 5352 | "version": "v2.0.18", |
5236 | "source": { | 5353 | "source": { |
@@ -7017,22 +7134,23 @@ | |||
7017 | }, | 7134 | }, |
7018 | { | 7135 | { |
7019 | "name": "scheb/two-factor-bundle", | 7136 | "name": "scheb/two-factor-bundle", |
7020 | "version": "v3.21.0", | 7137 | "version": "v4.4.0", |
7021 | "source": { | 7138 | "source": { |
7022 | "type": "git", | 7139 | "type": "git", |
7023 | "url": "https://github.com/scheb/two-factor-bundle.git", | 7140 | "url": "https://github.com/scheb/two-factor-bundle.git", |
7024 | "reference": "94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6" | 7141 | "reference": "5a53ad7fe20e2ca2491fed28a58211509c2e74bd" |
7025 | }, | 7142 | }, |
7026 | "dist": { | 7143 | "dist": { |
7027 | "type": "zip", | 7144 | "type": "zip", |
7028 | "url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6", | 7145 | "url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/5a53ad7fe20e2ca2491fed28a58211509c2e74bd", |
7029 | "reference": "94cc6f2e0fd8a7b683246d95fcad9b15ca828fc6", | 7146 | "reference": "5a53ad7fe20e2ca2491fed28a58211509c2e74bd", |
7030 | "shasum": "" | 7147 | "shasum": "" |
7031 | }, | 7148 | }, |
7032 | "require": { | 7149 | "require": { |
7033 | "lcobucci/jwt": "^3.2", | 7150 | "lcobucci/jwt": "^3.2", |
7151 | "paragonie/constant_time_encoding": "^2.2", | ||
7034 | "php": "^7.1.3", | 7152 | "php": "^7.1.3", |
7035 | "sonata-project/google-authenticator": "^2.2", | 7153 | "spomky-labs/otphp": "^9.1", |
7036 | "symfony/config": "^3.4|^4.0", | 7154 | "symfony/config": "^3.4|^4.0", |
7037 | "symfony/dependency-injection": "^3.4|^4.0", | 7155 | "symfony/dependency-injection": "^3.4|^4.0", |
7038 | "symfony/event-dispatcher": "^3.4|^4.0", | 7156 | "symfony/event-dispatcher": "^3.4|^4.0", |
@@ -7075,7 +7193,7 @@ | |||
7075 | "two-factor", | 7193 | "two-factor", |
7076 | "two-step" | 7194 | "two-step" |
7077 | ], | 7195 | ], |
7078 | "time": "2019-07-12T16:11:05+00:00" | 7196 | "time": "2019-07-12T16:10:17+00:00" |
7079 | }, | 7197 | }, |
7080 | { | 7198 | { |
7081 | "name": "sensio/distribution-bundle", | 7199 | "name": "sensio/distribution-bundle", |
@@ -7552,35 +7670,37 @@ | |||
7552 | "time": "2019-01-23T09:14:37+00:00" | 7670 | "time": "2019-01-23T09:14:37+00:00" |
7553 | }, | 7671 | }, |
7554 | { | 7672 | { |
7555 | "name": "sonata-project/google-authenticator", | 7673 | "name": "spomky-labs/otphp", |
7556 | "version": "2.2.0", | 7674 | "version": "v9.1.4", |
7557 | "source": { | 7675 | "source": { |
7558 | "type": "git", | 7676 | "type": "git", |
7559 | "url": "https://github.com/sonata-project/GoogleAuthenticator.git", | 7677 | "url": "https://github.com/Spomky-Labs/otphp.git", |
7560 | "reference": "feda53899b26af24e3db2fe7a3e5f053ca483762" | 7678 | "reference": "48d463cf909320399fe08eab2e1cd18d899d5068" |
7561 | }, | 7679 | }, |
7562 | "dist": { | 7680 | "dist": { |
7563 | "type": "zip", | 7681 | "type": "zip", |
7564 | "url": "https://api.github.com/repos/sonata-project/GoogleAuthenticator/zipball/feda53899b26af24e3db2fe7a3e5f053ca483762", | 7682 | "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/48d463cf909320399fe08eab2e1cd18d899d5068", |
7565 | "reference": "feda53899b26af24e3db2fe7a3e5f053ca483762", | 7683 | "reference": "48d463cf909320399fe08eab2e1cd18d899d5068", |
7566 | "shasum": "" | 7684 | "shasum": "" |
7567 | }, | 7685 | }, |
7568 | "require": { | 7686 | "require": { |
7687 | "beberlei/assert": "^2.4|^3.0", | ||
7688 | "paragonie/constant_time_encoding": "^2.0", | ||
7569 | "php": "^7.1" | 7689 | "php": "^7.1" |
7570 | }, | 7690 | }, |
7571 | "require-dev": { | 7691 | "require-dev": { |
7572 | "symfony/phpunit-bridge": "^4.0" | 7692 | "phpunit/phpunit": "^6.0", |
7693 | "satooshi/php-coveralls": "^1.0" | ||
7573 | }, | 7694 | }, |
7574 | "type": "library", | 7695 | "type": "library", |
7575 | "extra": { | 7696 | "extra": { |
7576 | "branch-alias": { | 7697 | "branch-alias": { |
7577 | "dev-master": "2.x-dev" | 7698 | "dev-master": "9.0.x-dev" |
7578 | } | 7699 | } |
7579 | }, | 7700 | }, |
7580 | "autoload": { | 7701 | "autoload": { |
7581 | "psr-4": { | 7702 | "psr-4": { |
7582 | "Google\\Authenticator\\": "src/", | 7703 | "OTPHP\\": "src/" |
7583 | "Sonata\\GoogleAuthenticator\\": "src/" | ||
7584 | } | 7704 | } |
7585 | }, | 7705 | }, |
7586 | "notification-url": "https://packagist.org/downloads/", | 7706 | "notification-url": "https://packagist.org/downloads/", |
@@ -7589,24 +7709,26 @@ | |||
7589 | ], | 7709 | ], |
7590 | "authors": [ | 7710 | "authors": [ |
7591 | { | 7711 | { |
7592 | "name": "Christian Stocker", | 7712 | "name": "Florent Morselli", |
7593 | "email": "me@chregu.tv" | 7713 | "homepage": "https://github.com/Spomky" |
7594 | }, | ||
7595 | { | ||
7596 | "name": "Andre DeMarre", | ||
7597 | "homepage": "http://www.devnetwork.net/viewtopic.php?f=50&t=94989" | ||
7598 | }, | 7714 | }, |
7599 | { | 7715 | { |
7600 | "name": "Thomas Rabaix", | 7716 | "name": "All contributors", |
7601 | "email": "thomas.rabaix@gmail.com" | 7717 | "homepage": "https://github.com/Spomky-Labs/otphp/contributors" |
7602 | } | 7718 | } |
7603 | ], | 7719 | ], |
7604 | "description": "Library to integrate Google Authenticator into a PHP project", | 7720 | "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", |
7605 | "homepage": "https://github.com/sonata-project/GoogleAuthenticator", | 7721 | "homepage": "https://github.com/Spomky-Labs/otphp", |
7606 | "keywords": [ | 7722 | "keywords": [ |
7607 | "google authenticator" | 7723 | "FreeOTP", |
7724 | "RFC 4226", | ||
7725 | "RFC 6238", | ||
7726 | "google authenticator", | ||
7727 | "hotp", | ||
7728 | "otp", | ||
7729 | "totp" | ||
7608 | ], | 7730 | ], |
7609 | "time": "2018-07-18T22:08:02+00:00" | 7731 | "time": "2019-03-18T10:08:51+00:00" |
7610 | }, | 7732 | }, |
7611 | { | 7733 | { |
7612 | "name": "stof/doctrine-extensions-bundle", | 7734 | "name": "stof/doctrine-extensions-bundle", |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig index 0919646e..1d3685ae 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig | |||
@@ -35,7 +35,7 @@ | |||
35 | <div class="card-content"> | 35 | <div class="card-content"> |
36 | <div class="row"> | 36 | <div class="row"> |
37 | <div class="input-field col s12"> | 37 | <div class="input-field col s12"> |
38 | <label for="_auth_code">{{ "scheb_two_factor.auth_code"|trans }}</label> | 38 | <label for="_auth_code">{{ "auth_code"|trans({}, 'SchebTwoFactorBundle') }}</label> |
39 | <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" /> | 39 | <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" /> |
40 | </div> | 40 | </div> |
41 | </div> | 41 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/otp_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/otp_app.html.twig index 7875d787..6f405d7f 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/otp_app.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/otp_app.html.twig | |||
@@ -39,7 +39,7 @@ | |||
39 | <div class="card-content"> | 39 | <div class="card-content"> |
40 | <div class="row"> | 40 | <div class="row"> |
41 | <div class="input-field col s12"> | 41 | <div class="input-field col s12"> |
42 | <label for="_auth_code">{{ "scheb_two_factor.auth_code"|trans }}</label> | 42 | <label for="_auth_code">{{ "auth_code"|trans({}, 'SchebTwoFactorBundle') }}</label> |
43 | <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" /> | 43 | <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" /> |
44 | </div> | 44 | </div> |
45 | </div> | 45 | </div> |
diff --git a/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig index 47a5cb78..c16a6eaf 100644 --- a/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig | |||
@@ -16,14 +16,14 @@ | |||
16 | {% endif %} | 16 | {% endif %} |
17 | 17 | ||
18 | <div class="input-field col s12"> | 18 | <div class="input-field col s12"> |
19 | <label for="_auth_code">{{ "scheb_two_factor.auth_code"|trans }}</label> | 19 | <label for="_auth_code">{{ "auth_code"|trans({}, 'SchebTwoFactorBundle') }}</label> |
20 | <input id="_auth_code" type="text" autocomplete="off" name="{{ authCodeParameterName }}" /> | 20 | <input id="_auth_code" type="text" autocomplete="off" name="{{ authCodeParameterName }}" /> |
21 | </div> | 21 | </div> |
22 | 22 | ||
23 | {% if displayTrustedOption %} | 23 | {% if displayTrustedOption %} |
24 | <div class="input-field col s12"> | 24 | <div class="input-field col s12"> |
25 | <input id="_trusted" type="checkbox" name="{{ trustedParameterName }}" /> | 25 | <input id="_trusted" type="checkbox" name="{{ trustedParameterName }}" /> |
26 | <label for="_trusted">{{ "scheb_two_factor.trusted"|trans }}</label> | 26 | <label for="_trusted">{{ "trusted"|trans({}, 'SchebTwoFactorBundle') }}</label> |
27 | </div> | 27 | </div> |
28 | {% endif %} | 28 | {% endif %} |
29 | </div> | 29 | </div> |
@@ -31,7 +31,7 @@ | |||
31 | <div class="card-action center"> | 31 | <div class="card-action center"> |
32 | <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn">{{ 'security.login.cancel'|trans }}</a> | 32 | <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn">{{ 'security.login.cancel'|trans }}</a> |
33 | <button class="btn waves-effect waves-light" type="submit" name="send"> | 33 | <button class="btn waves-effect waves-light" type="submit" name="send"> |
34 | {{ "scheb_two_factor.login"|trans }} | 34 | {{ "login"|trans({}, 'SchebTwoFactorBundle') }} |
35 | <i class="material-icons right">send</i> | 35 | <i class="material-icons right">send</i> |
36 | </button> | 36 | </button> |
37 | </div> | 37 | </div> |
diff --git a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php index 93019b1f..6b51f403 100644 --- a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php | |||
@@ -48,7 +48,7 @@ class SecurityControllerTest extends WallabagCoreTestCase | |||
48 | 48 | ||
49 | $this->logInAsUsingHttp('admin'); | 49 | $this->logInAsUsingHttp('admin'); |
50 | $crawler = $client->request('GET', '/config'); | 50 | $crawler = $client->request('GET', '/config'); |
51 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); | 51 | $this->assertContains('trusted', $crawler->filter('body')->extract(['_text'])[0]); |
52 | 52 | ||
53 | // restore user | 53 | // restore user |
54 | $user = $em | 54 | $user = $em |
@@ -81,7 +81,7 @@ class SecurityControllerTest extends WallabagCoreTestCase | |||
81 | 81 | ||
82 | $this->logInAsUsingHttp('admin'); | 82 | $this->logInAsUsingHttp('admin'); |
83 | $crawler = $client->request('GET', '/config'); | 83 | $crawler = $client->request('GET', '/config'); |
84 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); | 84 | $this->assertContains('trusted', $crawler->filter('body')->extract(['_text'])[0]); |
85 | 85 | ||
86 | // restore user | 86 | // restore user |
87 | $user = $em | 87 | $user = $em |