diff --git a/app/controllers/concerns/recaptcha_verifiable.rb b/app/controllers/concerns/recaptcha_verifiable.rb
new file mode 100644
index 0000000..eccd0a9
--- /dev/null
+++ b/app/controllers/concerns/recaptcha_verifiable.rb
@@ -0,0 +1,19 @@
+require 'active_support/concern'
+
+module RecaptchaVerifiable
+ extend ActiveSupport::Concern
+
+ included do
+ before_action :recaptcha, only: [:create]
+ end
+
+ def recaptcha
+ reroute_failed_recaptcha && return unless RecaptchaVerifier.verify(params["recaptcha-response"], request.ip)
+ end
+
+ def reroute_failed_recaptcha
+ @person = Person.new
+ flash.now[:error] = "Please verify you are not a robot."
+ render action: "new"
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/recaptcha_controller.rb b/app/controllers/recaptcha_controller.rb
new file mode 100644
index 0000000..56a2329
--- /dev/null
+++ b/app/controllers/recaptcha_controller.rb
@@ -0,0 +1,25 @@
+class RecaptchaController < ApplicationController
+ include RecaptchaVerifiable
+
+ skip_before_action :verify_authenticity_token
+
+ def index
+ #render json: {name: "donut", description: "delicious!"}
+ ver = RecaptchaVerifier.verify(params['recaptcha_response'].chomp, request.ip)
+ testv = 'test'
+ render json: {verify: ver, test: testv}
+
+ end
+
+ #RecaptchaVerifier.verify(recaptcha_response, ip_address)
+
+ #skip_before_action :check_xhr
+#
+ #def index
+ # Rails.logger.info 'Method called'
+ #end
+#
+ #def verify
+ # Rails.logger.info 'Called RecaptchaController#verify'
+ #end
+end
\ No newline at end of file
diff --git a/assets/javascripts/discourse/controllers/recaptcha.js.es6 b/assets/javascripts/discourse/controllers/recaptcha.js.es6
new file mode 100644
index 0000000..0d8ff76
--- /dev/null
+++ b/assets/javascripts/discourse/controllers/recaptcha.js.es6
@@ -0,0 +1,19 @@
+/*export default Ember.Controller.extend({
+ actions: {
+ grVerify(){
+ $.ajax({
+ type: 'POST',
+ contentType: 'application/json; charset=utf-8',
+ url: "/grverify",
+ data: JSON.stringify({recaptcha_response: g-recaptcha_response}),
+ dataType: 'json',
+ success: function (res) {
+ console.log(res);
+ },
+ error: function () {
+ console.log('failure');
+ }
+ });
+ },
+ }
+});*/
\ No newline at end of file
diff --git a/assets/javascripts/discourse/routes/gr-verify.js.es6 b/assets/javascripts/discourse/routes/gr-verify.js.es6
new file mode 100644
index 0000000..b971b98
--- /dev/null
+++ b/assets/javascripts/discourse/routes/gr-verify.js.es6
@@ -0,0 +1,49 @@
+/*import { ajax } from 'discourse/lib/ajax';
+
+/*export default Ember.Route.extend({
+ model() {
+ //console.log(ajax('/grverify/response.json'));
+ Discourse.ajax('/grverify', {
+ type: 'POST',
+ data: {recaptcha_response: g-recaptcha_response}
+ }).then(function(res) {
+ if (res.verify) {
+ console.log('dada');
+ }
+ console.log(res);
+ });
+
+ //return ajax('/grverify/response.json');
+ }
+});*/
+/*
+App.grVerifyService = Ember.Service.extend({
+ function grVerify() {
+ Discourse.ajax('/grverify', {
+ type: 'POST',
+ data: {recaptcha_response: g-recaptcha-response}
+ }).then(function(res) {
+ if (res.verify) {
+ console.log('dada');
+ }
+ console.log(res);
+ });
+ }
+});
+*/
+/*
+function formGRSubmit() {
+ $.ajax({
+ type: 'POST',
+ contentType: 'application/json; charset=utf-8',
+ url: "/grverify",
+ data: JSON.stringify({recaptcha_response: g-recaptcha_response}),
+ dataType: 'json',
+ success: function (res) {
+ console.log(res);
+ },
+ error: function () {
+ console.log('failure');
+ }
+ });
+}*/
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/123123modal/create-account.hbs b/assets/javascripts/discourse/templates/123123modal/create-account.hbs
new file mode 100644
index 0000000..0e4e01c
--- /dev/null
+++ b/assets/javascripts/discourse/templates/123123modal/create-account.hbs
@@ -0,0 +1,128 @@
+
+
+
\ No newline at end of file
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
new file mode 100644
index 0000000..0cbe75a
--- /dev/null
+++ b/config/locales/server.en.yml
@@ -0,0 +1,5 @@
+en:
+ site_settings:
+ recaptcha_enabled: 'Enable Recaptcha'
+ recaptcha_public_key: 'Recaptcha Public Key'
+ recaptcha_secret_key: 'Recaptcha Secret Key'
\ No newline at end of file
diff --git a/config/settings.yml b/config/settings.yml
new file mode 100644
index 0000000..437e660
--- /dev/null
+++ b/config/settings.yml
@@ -0,0 +1,7 @@
+plugins:
+ recaptcha_enabled:
+ default: false
+ recaptcha_public_key:
+ default: ""
+ recaptcha_secret_key:
+ default: ""
\ No newline at end of file
diff --git a/lib/google_recaptcha.rb b/lib/google_recaptcha.rb
new file mode 100644
index 0000000..24ae803
--- /dev/null
+++ b/lib/google_recaptcha.rb
@@ -0,0 +1,27 @@
+class GoogleRecaptcha
+ BASE_URL = "https://www.google.com/".freeze
+ VERIFY_URL = "recaptcha/api/siteverify".freeze
+
+ def initialize
+ @client = Faraday.new(BASE_URL)
+ end
+
+ def verify_recaptcha(params)
+ response = perform_verify_request(params)
+ return success?(response)
+ end
+
+ def success?(response)
+ JSON.parse(response.body)["success"]
+ end
+
+ private
+
+ attr_reader :client
+
+ def perform_verify_request(params)
+ client.post(VERIFY_URL) do |req|
+ req.params = params.merge({secret: SiteSetting.recaptcha_secret_key})
+ end
+ end
+end
\ No newline at end of file
diff --git a/plugin.rb b/plugin.rb
new file mode 100644
index 0000000..28b1004
--- /dev/null
+++ b/plugin.rb
@@ -0,0 +1,24 @@
+# name: recaptcha
+# about: add Google Recaptcha to Sign Up form
+# version: 0.1
+# authors: klaudgrave
+# url: https://github.com/klaudgrave
+
+#gem 'recaptcha', '5.1.0'
+
+enabled_site_setting :recaptcha_enabled
+ load File.expand_path('../lib/google_recaptcha.rb', __FILE__)
+ load File.expand_path('../services/recaptcha_verifier.rb', __FILE__)
+ load File.expand_path('../app/controllers/concerns/recaptcha_verifiable.rb', __FILE__)
+
+after_initialize do
+ load File.expand_path('../app/controllers/recaptcha_controller.rb', __FILE__)
+
+
+ Discourse::Application.routes.append do
+ #put '/grverify' => 'recaptcha#verify'
+ #mount ::RecaptchaVerifiable::recaptcha, at: "/grverify"
+ match '/grverify' => 'recaptcha#index', :via => :post
+ end
+end
+
diff --git a/services/recaptcha_verifier.rb b/services/recaptcha_verifier.rb
new file mode 100644
index 0000000..49cb7f6
--- /dev/null
+++ b/services/recaptcha_verifier.rb
@@ -0,0 +1,25 @@
+class RecaptchaVerifier
+ #def self.verify(response, remote_ip, recaptcha_client=GoogleRecaptcha)
+ #new(response, remote_ip, recaptcha_client).verify
+ #return false unless recaptcha_response
+ #recaptcha_client.verify_recaptcha(response: recaptcha_response, remoteip: remote_ip)
+ #end
+
+ def initialiaze(response, remote_ip, recaptcha_client)
+ @recaptcha_response = response
+ @remote_ip = remote_ip
+ @recaptcha_client = GoogleRecaptcha.new
+ end
+
+ def self.verify(response, remoteip)
+ #return false unless response
+ recaptcha_client = GoogleRecaptcha.new
+ recaptcha_client.verify_recaptcha(response: response, remoteip: remoteip)
+ #rescue
+ #false
+ end
+
+ private
+
+ attr_reader :recaptcha_client, :recaptcha_response, :remote_ip
+end
\ No newline at end of file