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 
     | 
    
         
            +
             
     |