GUACAMOLE-96: Clean up enrollment interface. Provide help text for user. Project: http://git-wip-us.apache.org/repos/asf/guacamole-client/repo Commit: http://git-wip-us.apache.org/repos/asf/guacamole-client/commit/2a894c48 Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/2a894c48 Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/2a894c48
Branch: refs/heads/master Commit: 2a894c487cf25e1ffa35548de1dc791aefed6471 Parents: a422fdf Author: Michael Jumper <mjum...@apache.org> Authored: Mon Nov 20 15:51:06 2017 -0800 Committer: Michael Jumper <mjum...@apache.org> Committed: Sun Feb 4 19:45:18 2018 -0800 ---------------------------------------------------------------------- .../auth/totp/UserVerificationService.java | 6 +++--- .../auth/totp/form/AuthenticationCodeField.java | 22 ++++++++++++++++++++ .../src/main/resources/styles/totp.css | 14 ++++++++++++- .../templates/authenticationCodeField.html | 13 ++++++++---- .../src/main/resources/translations/en.json | 17 ++++++++++++--- 5 files changed, 61 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/2a894c48/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/UserVerificationService.java ---------------------------------------------------------------------- diff --git a/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/UserVerificationService.java b/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/UserVerificationService.java index 987d4ca..851bb94 100644 --- a/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/UserVerificationService.java +++ b/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/UserVerificationService.java @@ -245,14 +245,14 @@ public class UserVerificationService { if (!key.isConfirmed()) { field.exposeKey(key); throw new GuacamoleInsufficientCredentialsException( - "LOGIN.INFO_TOTP_REQUIRED", new CredentialsInfo( + "TOTP.INFO_ENROLL_REQUIRED", new CredentialsInfo( Collections.<Field>singletonList(field) )); } // Otherwise simply request the user's authentication code throw new GuacamoleInsufficientCredentialsException( - "LOGIN.INFO_TOTP_REQUIRED", new CredentialsInfo( + "TOTP.INFO_CODE_REQUIRED", new CredentialsInfo( Collections.<Field>singletonList(field) )); @@ -285,7 +285,7 @@ public class UserVerificationService { } // Provided code is not valid - throw new GuacamoleClientException("LOGIN.INFO_TOTP_VERIFICATION_FAILED"); + throw new GuacamoleClientException("TOTP.INFO_VERIFICATION_FAILED"); } http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/2a894c48/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/form/AuthenticationCodeField.java ---------------------------------------------------------------------- diff --git a/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/form/AuthenticationCodeField.java b/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/form/AuthenticationCodeField.java index e0333dd..c3ca207 100644 --- a/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/form/AuthenticationCodeField.java +++ b/extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/form/AuthenticationCodeField.java @@ -99,6 +99,28 @@ public class AuthenticationCodeField extends Field { } /** + * Returns the number of digits used for each TOTP code. If the user's key + * is not being exposed to facilitate enrollment, this value will not be + * exposed either. + * + * @return + * The number of digits used for each TOTP code, or null if the user's + * key is not being exposed to facilitate enrollment. + * + * @throws GuacamoleException + * If the number of digits cannot be read from guacamole.properties. + */ + public Integer getDigits() throws GuacamoleException { + + // Do not reveal code size unless enrollment is in progress + if (key == null) + return null; + + return confService.getDigits(); + + } + + /** * Returns the "otpauth" URI for the secret key used to generate TOTP codes * for the current user. If the secret key is not being exposed to * facilitate enrollment, null is returned. http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/2a894c48/extensions/guacamole-auth-totp/src/main/resources/styles/totp.css ---------------------------------------------------------------------- diff --git a/extensions/guacamole-auth-totp/src/main/resources/styles/totp.css b/extensions/guacamole-auth-totp/src/main/resources/styles/totp.css index 8181e2c..6db7729 100644 --- a/extensions/guacamole-auth-totp/src/main/resources/styles/totp.css +++ b/extensions/guacamole-auth-totp/src/main/resources/styles/totp.css @@ -17,4 +17,16 @@ * under the License. */ -/* STUB */ +.totp-enroll p { + font-size: 0.8em; +} + +.totp-qr-code { + text-align: center; +} + +.totp-qr-code img { + margin: 1em; + border: 1px solid rgba(0,0,0,0.25); + box-shadow: 1px 1px 2px rgba(0,0,0,0.25); +} http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/2a894c48/extensions/guacamole-auth-totp/src/main/resources/templates/authenticationCodeField.html ---------------------------------------------------------------------- diff --git a/extensions/guacamole-auth-totp/src/main/resources/templates/authenticationCodeField.html b/extensions/guacamole-auth-totp/src/main/resources/templates/authenticationCodeField.html index ae155d8..5a39be7 100644 --- a/extensions/guacamole-auth-totp/src/main/resources/templates/authenticationCodeField.html +++ b/extensions/guacamole-auth-totp/src/main/resources/templates/authenticationCodeField.html @@ -1,13 +1,18 @@ <div class="totp-code-field"> - <!-- QR Code (if available) --> - <div class="totp-qr-code" ng-show="field.qrCode"> - <img ng-src="{{field.qrCode}}"> + <!-- Enroll user if necessary --> + <div class="totp-enroll" ng-show="field.qrCode"> + <p translate="TOTP.HELP_ENROLL_BARCODE"></p> + <div class="totp-qr-code"><img ng-src="{{field.qrCode}}"></div> + <p translate="TOTP.HELP_ENROLL_VERIFY" + translate-values="{ DIGITS : field.digits }"></p> </div> <!-- Field for entry of the current TOTP code --> <div class="totp-code"> - <input type="text" ng-model="model" autocorrect="off" autocapitalize="off"/> + <input type="text" + placeholder="{{'TOTP.FIELD_PLACEHOLDER_CODE' |translate}}" + ng-model="model" autocorrect="off" autocapitalize="off"/> </div> </div> http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/2a894c48/extensions/guacamole-auth-totp/src/main/resources/translations/en.json ---------------------------------------------------------------------- diff --git a/extensions/guacamole-auth-totp/src/main/resources/translations/en.json b/extensions/guacamole-auth-totp/src/main/resources/translations/en.json index 540b94e..bd0e9e2 100644 --- a/extensions/guacamole-auth-totp/src/main/resources/translations/en.json +++ b/extensions/guacamole-auth-totp/src/main/resources/translations/en.json @@ -5,9 +5,20 @@ }, "LOGIN" : { - "FIELD_HEADER_GUAC_TOTP" : "Authentication Code", - "INFO_TOTP_REQUIRED" : "Please enter your authentication code to verify your identity.", - "INFO_TOTP_VERIFICATION_FAILED" : "Verification failed. Please try again." + "FIELD_HEADER_GUAC_TOTP" : "" + }, + + "TOTP" : { + + "FIELD_PLACEHOLDER_CODE" : "Authentication Code", + + "INFO_CODE_REQUIRED" : "Please enter your authentication code to verify your identity.", + "INFO_ENROLL_REQUIRED" : "Multi-factor authentication has been enabled on your account.", + "INFO_VERIFICATION_FAILED" : "Verification failed. Please try again.", + + "HELP_ENROLL_BARCODE" : "To complete the enrollment process, scan the barcode below with the two-factor authentication app on your phone or device.", + "HELP_ENROLL_VERIFY" : "After scanning the barcode, enter the {DIGITS}-digit authentication code displayed to verify that enrollment was successful." + } }