diff --git a/webclient/login/register-controller.js b/webclient/login/register-controller.js
index 5a14964248..b3c0c21335 100644
--- a/webclient/login/register-controller.js
+++ b/webclient/login/register-controller.js
@@ -19,6 +19,12 @@ angular.module('RegisterController', ['matrixService'])
function($scope, $rootScope, $location, matrixService, eventStreamService) {
'use strict';
+ var config = window.webClientConfig;
+ var useCaptcha = true;
+ if (config !== undefined) {
+ useCaptcha = config.useCaptcha;
+ }
+
// FIXME: factor out duplication with login-controller.js
// Assume that this is hosted on the home server, in which case the URL
@@ -87,9 +93,12 @@ angular.module('RegisterController', ['matrixService'])
};
$scope.registerWithMxidAndPassword = function(mxid, password, threepidCreds) {
- matrixService.register(mxid, password, threepidCreds).then(
+ matrixService.register(mxid, password, threepidCreds, useCaptcha).then(
function(response) {
$scope.feedback = "Success";
+ if (useCaptcha) {
+ Recaptcha.destroy();
+ }
// Update the current config
var config = matrixService.config();
angular.extend(config, {
@@ -116,11 +125,21 @@ angular.module('RegisterController', ['matrixService'])
},
function(error) {
console.trace("Registration error: "+error);
+ if (useCaptcha) {
+ Recaptcha.reload();
+ }
if (error.data) {
if (error.data.errcode === "M_USER_IN_USE") {
$scope.feedback = "Username already taken.";
$scope.reenter_username = true;
}
+ else if (error.data.errcode == "M_CAPTCHA_INVALID") {
+ $scope.feedback = "Failed captcha.";
+ }
+ else if (error.data.errcode == "M_CAPTCHA_NEEDED") {
+ $scope.feedback = "Captcha is required on this home " +
+ "server.";
+ }
}
else if (error.status === 0) {
$scope.feedback = "Unable to talk to the server.";
@@ -142,6 +161,33 @@ angular.module('RegisterController', ['matrixService'])
}
);
};
+
+ var setupCaptcha = function() {
+ console.log("Setting up ReCaptcha")
+ var config = window.webClientConfig;
+ var public_key = undefined;
+ if (config === undefined) {
+ console.error("Couldn't find webClientConfig. Cannot get public key for captcha.");
+ }
+ else {
+ public_key = webClientConfig.recaptcha_public_key;
+ if (public_key === undefined) {
+ console.error("No public key defined for captcha!")
+ }
+ }
+ Recaptcha.create(public_key,
+ "regcaptcha",
+ {
+ theme: "red",
+ callback: Recaptcha.focus_response_field
+ });
+ };
+ $scope.init = function() {
+ if (useCaptcha) {
+ setupCaptcha();
+ }
+ };
+
}]);
diff --git a/webclient/login/register.html b/webclient/login/register.html
index 06a6526b70..a27f9ad4e8 100644
--- a/webclient/login/register.html
+++ b/webclient/login/register.html
@@ -12,7 +12,6 @@
<div style="text-align: center">
<br/>
-
<input ng-show="!wait_3pid_code" id="email" size="32" type="text" ng-focus="true" ng-model="account.email" placeholder="Email address (optional)"/>
<div ng-show="!wait_3pid_code" class="smallPrint">Specifying an email address lets other users find you on Matrix more easily,<br/>
and will give you a way to reset your password in the future</div>
@@ -26,7 +25,10 @@
<input ng-show="!wait_3pid_code" id="displayName" size="32" type="text" ng-model="account.displayName" placeholder="Display name (e.g. Bob Obson)"/>
<br ng-show="!wait_3pid_code" />
<br ng-show="!wait_3pid_code" />
-
+
+
+ <div id="regcaptcha" ng-init="init()" />
+
<button ng-show="!wait_3pid_code" ng-click="register()" ng-disabled="!account.desired_user_id || !account.homeserver || !account.pwd1 || !account.pwd2 || account.pwd1 !== account.pwd2">Sign up</button>
<div ng-show="wait_3pid_code">
|