148 lines
3.9 KiB
Plaintext
148 lines
3.9 KiB
Plaintext
note
|
|
description: "[
|
|
Simple API to call {RECAPTCHA} Google API.
|
|
Example call:
|
|
https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address
|
|
]"
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
EIS: "name=RECAPTCHA", "src=https://developers.google.com/recaptcha/", "protocol=uri"
|
|
EIS: "name=RECAPTCHA API verify", "src=https://developers.google.com/recaptcha/docs/verify", "protocol=uri"
|
|
|
|
class
|
|
RECAPTCHA_API
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
make (a_secret_key, a_response: READABLE_STRING_8)
|
|
-- Create an object Recaptcha with secret key `a_secret_key' and response token `a_response'.
|
|
do
|
|
secret := a_secret_key
|
|
response := a_response
|
|
ensure
|
|
secret_set: secret.same_string (a_secret_key)
|
|
response_set: response.same_string (a_response)
|
|
end
|
|
|
|
feature -- Access
|
|
|
|
base_uri: STRING_8 = "https://www.google.com/recaptcha/api/siteverify"
|
|
-- Recaptcha base URI
|
|
|
|
secret: READABLE_STRING_8
|
|
-- Required. The shared key between your site and ReCAPTCHA.
|
|
|
|
response: READABLE_STRING_8
|
|
-- Required. The user response token provided by the reCAPTCHA to the user and provided to your site on.
|
|
|
|
remoteip: detachable READABLE_STRING_8
|
|
-- Optional. The user's IP address.
|
|
|
|
feature -- Status Reports
|
|
|
|
errors: detachable LIST [READABLE_STRING_8]
|
|
-- optional table of error codes
|
|
-- missing-input-secret The secret parameter is missing.
|
|
-- invalid-input-secret The secret parameter is invalid or malformed.
|
|
-- missing-input-response The response parameter is missing.
|
|
-- invalid-input-response The response parameter is invalid or malformed.
|
|
|
|
feature -- Change Element
|
|
|
|
set_remoteip (a_remoteip: READABLE_STRING_8)
|
|
-- Set `remoteip' with `a_remoteip'.
|
|
do
|
|
remoteip := a_remoteip
|
|
ensure
|
|
remoteip_set: remoteip = a_remoteip
|
|
end
|
|
|
|
feature -- API
|
|
|
|
verify: BOOLEAN
|
|
-- Verify the user's response
|
|
local
|
|
l_parser: JSON_PARSER
|
|
do
|
|
if attached get as l_response then
|
|
if attached l_response.body as l_body then
|
|
create l_parser.make_with_string (l_body)
|
|
l_parser.parse_content
|
|
if
|
|
l_parser.is_parsed and then attached {JSON_OBJECT} l_parser.parsed_json_object as jv and then
|
|
attached {JSON_BOOLEAN} jv.item ("success") as l_success
|
|
then
|
|
Result := l_success.item
|
|
if not Result and then attached {JSON_ARRAY} jv.item ("error-codes") as l_error_codes then
|
|
across
|
|
l_error_codes as c
|
|
loop
|
|
if attached {JSON_STRING} c.item as ji then
|
|
put_error (ji.unescaped_string_32)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
put_error (l_response.status.out)
|
|
end
|
|
else
|
|
put_error ("unknown")
|
|
end
|
|
end
|
|
|
|
feature {NONE} -- REST API
|
|
|
|
get: detachable RESPONSE
|
|
-- Reading Data
|
|
local
|
|
l_request: REQUEST
|
|
do
|
|
create l_request.make ("GET", new_uri)
|
|
Result := l_request.execute
|
|
end
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
new_uri: STRING_8
|
|
-- new uri (BaseUri?secret=secret_value&response=response_value[&remoteip=remoteip_value]
|
|
do
|
|
create Result.make_from_string (base_uri)
|
|
Result.append ("?secret=")
|
|
Result.append (secret)
|
|
Result.append ("&response=")
|
|
Result.append (response)
|
|
if attached remoteip as l_remoteip then
|
|
Result.append ("&remoteip=" + l_remoteip)
|
|
end
|
|
end
|
|
|
|
put_error (a_code: READABLE_STRING_GENERAL)
|
|
local
|
|
l_errors: like errors
|
|
utf: UTF_CONVERTER
|
|
do
|
|
l_errors := errors
|
|
if l_errors = Void then
|
|
create {ARRAYED_LIST [STRING]} l_errors.make (1)
|
|
errors := l_errors
|
|
end
|
|
l_errors.force (utf.utf_32_string_to_utf_8_string_8 (a_code))
|
|
end
|
|
|
|
note
|
|
copyright: "2011-2015 Javier Velilla, Jocelyn Fiat, Eiffel Software and others"
|
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
|
source: "[
|
|
Eiffel Software
|
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
|
Telephone 805-685-1006, Fax 805-685-6869
|
|
Website http://www.eiffel.com
|
|
Customer support http://support.eiffel.com
|
|
]"
|
|
|
|
end
|