Skip to content
Snippets Groups Projects
Commit 0b9e1e7b authored by Kegan Dougal's avatar Kegan Dougal
Browse files

Added a captcha config to the HS, to enable registration captcha checking and...

Added a captcha config to the HS, to enable registration captcha checking and for the recaptcha private key.
parent c80f7394
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,7 @@ class Codes(object):
NOT_FOUND = "M_NOT_FOUND"
UNKNOWN_TOKEN = "M_UNKNOWN_TOKEN"
LIMIT_EXCEEDED = "M_LIMIT_EXCEEDED"
NEEDS_CAPTCHA = "M_NEEDS_CAPTCHA"
class CodeMessageException(Exception):
......
# Copyright 2014 OpenMarket Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from ._base import Config
class CaptchaConfig(Config):
def __init__(self, args):
super(CaptchaConfig, self).__init__(args)
self.recaptcha_private_key = args.recaptcha_private_key
self.enable_registration_captcha = args.enable_registration_captcha
@classmethod
def add_arguments(cls, parser):
super(CaptchaConfig, cls).add_arguments(parser)
group = parser.add_argument_group("recaptcha")
group.add_argument(
"--recaptcha-private-key", type=str, default="YOUR_PRIVATE_KEY",
help="The matching private key for the web client's public key."
)
group.add_argument(
"--enable-registration-captcha", type=bool, default=False,
help="Enables ReCaptcha checks when registering, preventing signup "+
"unless a captcha is answered. Requires a valid ReCaptcha public/private key."
)
\ No newline at end of file
......@@ -19,9 +19,10 @@ from .logger import LoggingConfig
from .database import DatabaseConfig
from .ratelimiting import RatelimitConfig
from .repository import ContentRepositoryConfig
from .captcha import CaptchaConfig
class HomeServerConfig(TlsConfig, ServerConfig, DatabaseConfig, LoggingConfig,
RatelimitConfig, ContentRepositoryConfig):
RatelimitConfig, ContentRepositoryConfig, CaptchaConfig):
pass
if __name__=='__main__':
......
......@@ -16,7 +16,7 @@
"""This module contains REST servlets to do with registration: /register"""
from twisted.internet import defer
from synapse.api.errors import SynapseError
from synapse.api.errors import SynapseError, Codes
from base import RestServlet, client_path_pattern
import json
......@@ -50,6 +50,10 @@ class RegisterRestServlet(RestServlet):
threepidCreds = None
if 'threepidCreds' in register_json:
threepidCreds = register_json['threepidCreds']
if self.hs.config.enable_registration_captcha:
if not "challenge" in register_json or not "response" in register_json:
raise SynapseError(400, "Captcha response is required", errcode=Codes.NEEDS_CAPTCHA)
handler = self.handlers.registration_handler
(user_id, token) = yield handler.register(
......
......@@ -107,7 +107,6 @@ angular.module('matrixService', [])
challenge: challengeToken,
response: captchaEntry
};
console.log("Sending Captcha info: " + JSON.stringify(data.captcha));
}
return doRequest("POST", path, undefined, data);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment