sinatra-recaptcha 0.0.2a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +39 -0
- data/Rakefile +52 -0
- data/lib/sinatra/recaptcha.rb +62 -0
- metadata +69 -0
data/README.markdown
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Quick, simple, easy way to implement REcaptcha for Sinatra apps
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
gem sources -a http://gems.github.com
|
5
|
+
|
6
|
+
sudo gem install djbender-sinatra-recaptcha
|
7
|
+
|
8
|
+
<pre><code>
|
9
|
+
require 'rubygems'
|
10
|
+
require 'sinatra'
|
11
|
+
require 'sinatra/recaptcha'
|
12
|
+
|
13
|
+
configure do
|
14
|
+
# https://admin.recaptcha.net/accounts/signup/
|
15
|
+
Sinatra::ReCaptcha.public_key = 'your_public_key'
|
16
|
+
Sinatra::ReCaptcha.private_key = 'your_private_key'
|
17
|
+
# to use ssl set Sinatra::ReCaptcha.server = 'https://api-secure.recaptcha.net'
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
get '/' do
|
22
|
+
haml :recaptcha
|
23
|
+
end
|
24
|
+
|
25
|
+
post '/' do
|
26
|
+
halt(401, "invalid captcha") unless recaptcha_correct?
|
27
|
+
"passed!"
|
28
|
+
end
|
29
|
+
|
30
|
+
__END__
|
31
|
+
|
32
|
+
@@ captcha
|
33
|
+
|
34
|
+
%h1 Try ReCaptcha
|
35
|
+
%form{:method=>"post", :action=>"/post"}
|
36
|
+
= recaptcha
|
37
|
+
# you can also use recaptcha(:ajax) to use a pure ajax version--
|
38
|
+
%input{:type=>'submit', :value => 'Send'}
|
39
|
+
</code></pre>
|
data/Rakefile
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
require 'rubygems/specification'
|
4
|
+
require 'date'
|
5
|
+
require 'spec/rake/spectask'
|
6
|
+
|
7
|
+
GEM = 'sinatra-recaptcha'
|
8
|
+
GEM_NAME = 'sinatra-recaptcha'
|
9
|
+
GEM_VERSION = '0.0.2'
|
10
|
+
AUTHORS = ['James Pozdena']
|
11
|
+
EMAIL = "jpoz@jpoz.net"
|
12
|
+
HOMEPAGE = "http://github.com/jpoz/sinatra-recaptcha"
|
13
|
+
SUMMARY = "Simple, easy way to implement recaptcha for Sinatra"
|
14
|
+
|
15
|
+
spec = Gem::Specification.new do |s|
|
16
|
+
s.name = GEM
|
17
|
+
s.version = GEM_VERSION
|
18
|
+
s.platform = Gem::Platform::RUBY
|
19
|
+
s.has_rdoc = true
|
20
|
+
s.summary = SUMMARY
|
21
|
+
s.description = s.summary
|
22
|
+
s.authors = AUTHORS
|
23
|
+
s.email = EMAIL
|
24
|
+
s.homepage = HOMEPAGE
|
25
|
+
s.require_path = 'lib'
|
26
|
+
s.autorequire = GEM
|
27
|
+
s.files = %w(README.markdown Rakefile) + Dir.glob("{lib}/**/*")
|
28
|
+
end
|
29
|
+
|
30
|
+
task :default => :spec
|
31
|
+
|
32
|
+
desc "Run specs"
|
33
|
+
Spec::Rake::SpecTask.new do |t|
|
34
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
35
|
+
t.spec_opts = %w(-fs --color)
|
36
|
+
end
|
37
|
+
|
38
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
39
|
+
pkg.gem_spec = spec
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "install the gem locally"
|
43
|
+
task :install => [:package] do
|
44
|
+
sh %{sudo gem install pkg/#{GEM}-#{GEM_VERSION}}
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "create a gemspec file"
|
48
|
+
task :make_spec do
|
49
|
+
File.open("#{GEM}.gemspec", "w") do |file|
|
50
|
+
file.puts spec.to_ruby
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
module ReCaptcha
|
5
|
+
VERSION = "0.0.1"
|
6
|
+
|
7
|
+
@server = 'http://api.recaptcha.net'
|
8
|
+
@verify = 'http://api-verify.recaptcha.net'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :public_key, :private_key, :server
|
12
|
+
attr_reader :verify
|
13
|
+
end
|
14
|
+
|
15
|
+
def recaptcha(type = :iframe)
|
16
|
+
raise "Recaptcha type: #{type} is not known, please use (:iframe or :ajax)" unless [:iframe, :ajax].include?(type.to_sym)
|
17
|
+
self.send("recaptcha_#{type}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def recaptcha_correct?
|
21
|
+
recaptcha = Net::HTTP.post_form URI.parse("#{Sinatra::ReCaptcha.verify}/verify"), {
|
22
|
+
:privatekey => Sinatra::ReCaptcha.private_key,
|
23
|
+
:remoteip => request.ip,
|
24
|
+
:challenge => params[:recaptcha_challenge_field],
|
25
|
+
:response => params[:recaptcha_response_field]
|
26
|
+
}
|
27
|
+
answer, error = recaptcha.body.split.map { |s| s.chomp }
|
28
|
+
unless answer == 'true'
|
29
|
+
return false
|
30
|
+
else
|
31
|
+
return true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def recaptcha_iframe
|
38
|
+
"<script type='text/javascript'
|
39
|
+
src='#{Sinatra::ReCaptcha.server}/challenge?k=#{Sinatra::ReCaptcha.public_key}'>
|
40
|
+
</script>
|
41
|
+
<noscript>
|
42
|
+
<iframe src='#{Sinatra::ReCaptcha.server}/noscript?k=#{Sinatra::ReCaptcha.public_key}'
|
43
|
+
height='300' width='500' frameborder='0'></iframe><br>
|
44
|
+
<textarea name='recaptcha_challenge_field' rows='3' cols='40'>
|
45
|
+
</textarea>
|
46
|
+
<input type='hidden' name='recaptcha_response_field'
|
47
|
+
value='manual_challenge'>
|
48
|
+
</noscript>"
|
49
|
+
end
|
50
|
+
|
51
|
+
def recaptcha_ajax
|
52
|
+
"<div id='recaptcha_div'> </div>
|
53
|
+
<script type='text/javascript' src='#{Sinatra::ReCaptcha.server}/js/recaptcha_ajax.js'></script>
|
54
|
+
<script type='text/javascript' >
|
55
|
+
Recaptcha.create('#{Sinatra::ReCaptcha.public_key}', 'recaptcha_div' );
|
56
|
+
</script>"
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
helpers ReCaptcha
|
62
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra-recaptcha
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 34
|
5
|
+
prerelease: 5
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
- a
|
11
|
+
version: 0.0.2a
|
12
|
+
platform: ruby
|
13
|
+
authors:
|
14
|
+
- James Pozdena
|
15
|
+
- Derek Bender
|
16
|
+
autorequire: sinatra-recaptcha
|
17
|
+
bindir: bin
|
18
|
+
cert_chain: []
|
19
|
+
|
20
|
+
date: 2011-10-02 00:00:00 Z
|
21
|
+
dependencies: []
|
22
|
+
|
23
|
+
description: Simple, easy way to implement recaptcha for Sinatra
|
24
|
+
email: ""
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- README.markdown
|
33
|
+
- Rakefile
|
34
|
+
- lib/sinatra/recaptcha.rb
|
35
|
+
homepage: http://github.com/djbender/sinatra-recaptcha
|
36
|
+
licenses: []
|
37
|
+
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 3
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
version: "0"
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 1.8.6
|
65
|
+
signing_key:
|
66
|
+
specification_version: 2
|
67
|
+
summary: Simple, easy way to implement recaptcha for Sinatra
|
68
|
+
test_files: []
|
69
|
+
|