From 945cebc87ee0a1e3149401058f62122557c0bc4f Mon Sep 17 00:00:00 2001 From: Tute Costa Date: Sun, 3 May 2015 09:19:32 -0400 Subject: [PATCH 1/2] Extend doorkeeper 3 with its extracted ORMs doorkeeper 3 has not been released yet, and will be when its ORMs are successfully extracted and tested into this project. This PR extends doorkeeper with the ORM specifics for mongoid and mongomapper. To test it, it loads doorkeeper as a submodule, copy its test suite into this project, configures the ORMs according to the matrix defined in `.travis.yml` file, and run the test suite with each. Renames project from `doorkeeper-orm` to `doorkeeper-mongodb`. --- .gitignore | 1 + .gitmodules | 3 + .hound.yml | 3 + .travis.yml | 39 ++- CONTRIBUTING.md | 45 ++++ Gemfile | 28 +-- README.md | 63 ++++- Rakefile | 38 +-- config/locales/en.yml | 21 ++ doorkeeper | 1 + doorkeeper-mongodb.gemspec | 32 +++ doorkeeper-orms.gemspec | 26 -- gemfiles/Gemfile.common.rb | 8 + gemfiles/Gemfile.mongo_mapper.rb | 5 + gemfiles/Gemfile.mongoid2.rb | 5 + gemfiles/Gemfile.mongoid3.rb | 4 + gemfiles/Gemfile.mongoid4.rb | 4 + ...keeper_bundle.rb => doorkeeper-mongodb.rb} | 6 +- lib/doorkeeper-mongodb/version.rb | 3 + lib/doorkeeper-orms/version.rb | 3 - lib/doorkeeper/orm/mongo_mapper.rb | 8 + .../orm/mongo_mapper/access_grant.rb | 9 +- .../orm/mongo_mapper/access_token.rb | 29 +-- .../orm/mongo_mapper/application.rb | 12 +- lib/doorkeeper/orm/mongoid2.rb | 8 + lib/doorkeeper/orm/mongoid2/access_grant.rb | 4 +- lib/doorkeeper/orm/mongoid2/access_token.rb | 18 +- lib/doorkeeper/orm/mongoid2/application.rb | 3 + .../orm/mongoid2/concerns/scopes.rb | 5 +- lib/doorkeeper/orm/mongoid3.rb | 8 + lib/doorkeeper/orm/mongoid3/access_grant.rb | 4 +- lib/doorkeeper/orm/mongoid3/access_token.rb | 18 +- lib/doorkeeper/orm/mongoid3/application.rb | 3 + .../orm/mongoid3/concerns/scopes.rb | 5 +- lib/doorkeeper/orm/mongoid4.rb | 8 + lib/doorkeeper/orm/mongoid4/access_grant.rb | 4 +- lib/doorkeeper/orm/mongoid4/access_token.rb | 18 +- lib/doorkeeper/orm/mongoid4/application.rb | 3 + spec/dummy/Rakefile | 7 - .../app/controllers/application_controller.rb | 3 - .../custom_authorizations_controller.rb | 7 - .../full_protected_resources_controller.rb | 12 - spec/dummy/app/controllers/home_controller.rb | 17 -- .../dummy/app/controllers/metal_controller.rb | 11 - .../semi_protected_resources_controller.rb | 11 - spec/dummy/app/helpers/application_helper.rb | 5 - spec/dummy/app/models/user.rb | 28 --- spec/dummy/app/views/home/index.html.erb | 0 .../app/views/layouts/application.html.erb | 14 -- spec/dummy/config.ru | 4 - spec/dummy/config/application.rb | 54 ----- spec/dummy/config/boot.rb | 6 - spec/dummy/config/environment.rb | 5 - spec/dummy/config/environments/development.rb | 29 --- spec/dummy/config/environments/production.rb | 62 ----- spec/dummy/config/environments/test.rb | 51 ---- .../initializers/backtrace_silencers.rb | 7 - spec/dummy/config/initializers/doorkeeper.rb | 58 ----- .../dummy/config/initializers/secret_token.rb | 9 - .../config/initializers/session_store.rb | 8 - .../config/initializers/wrap_parameters.rb | 14 -- spec/dummy/config/locales/doorkeeper.en.yml | 5 - spec/dummy/config/mongo.yml | 11 - spec/dummy/config/mongoid2.yml | 9 - spec/dummy/config/mongoid3.yml | 18 -- spec/dummy/config/mongoid4.yml | 19 -- spec/dummy/config/routes.rb | 52 ---- spec/dummy/public/404.html | 26 -- spec/dummy/public/422.html | 26 -- spec/dummy/public/500.html | 26 -- spec/dummy/public/favicon.ico | 0 spec/dummy/script/rails | 6 - spec/factories/access_grant.rb | 9 - spec/factories/access_token.rb | 11 - spec/factories/application.rb | 6 - spec/models/doorkeeper/access_grant_spec.rb | 36 --- spec/models/doorkeeper/access_token_spec.rb | 226 ------------------ spec/models/doorkeeper/application_spec.rb | 177 -------------- spec/spec_helper.rb | 1 - spec/spec_helper_integration.rb | 39 --- spec/support/dependencies/factory_girl.rb | 2 - spec/support/helpers/model_helper.rb | 45 ---- spec/support/orm/mongo_mapper.rb | 25 -- spec/support/orm/mongoid.rb | 30 --- spec/support/shared/models_shared_examples.rb | 52 ---- 85 files changed, 355 insertions(+), 1429 deletions(-) create mode 100644 .gitmodules create mode 100644 CONTRIBUTING.md create mode 100644 config/locales/en.yml create mode 160000 doorkeeper create mode 100644 doorkeeper-mongodb.gemspec delete mode 100644 doorkeeper-orms.gemspec create mode 100644 gemfiles/Gemfile.common.rb create mode 100644 gemfiles/Gemfile.mongo_mapper.rb create mode 100644 gemfiles/Gemfile.mongoid2.rb create mode 100644 gemfiles/Gemfile.mongoid3.rb create mode 100644 gemfiles/Gemfile.mongoid4.rb rename lib/{doorkeeper_bundle.rb => doorkeeper-mongodb.rb} (69%) create mode 100644 lib/doorkeeper-mongodb/version.rb delete mode 100644 lib/doorkeeper-orms/version.rb delete mode 100644 spec/dummy/Rakefile delete mode 100644 spec/dummy/app/controllers/application_controller.rb delete mode 100644 spec/dummy/app/controllers/custom_authorizations_controller.rb delete mode 100644 spec/dummy/app/controllers/full_protected_resources_controller.rb delete mode 100644 spec/dummy/app/controllers/home_controller.rb delete mode 100644 spec/dummy/app/controllers/metal_controller.rb delete mode 100644 spec/dummy/app/controllers/semi_protected_resources_controller.rb delete mode 100644 spec/dummy/app/helpers/application_helper.rb delete mode 100644 spec/dummy/app/models/user.rb delete mode 100644 spec/dummy/app/views/home/index.html.erb delete mode 100644 spec/dummy/app/views/layouts/application.html.erb delete mode 100644 spec/dummy/config.ru delete mode 100644 spec/dummy/config/application.rb delete mode 100644 spec/dummy/config/boot.rb delete mode 100644 spec/dummy/config/environment.rb delete mode 100644 spec/dummy/config/environments/development.rb delete mode 100644 spec/dummy/config/environments/production.rb delete mode 100644 spec/dummy/config/environments/test.rb delete mode 100644 spec/dummy/config/initializers/backtrace_silencers.rb delete mode 100644 spec/dummy/config/initializers/doorkeeper.rb delete mode 100644 spec/dummy/config/initializers/secret_token.rb delete mode 100644 spec/dummy/config/initializers/session_store.rb delete mode 100644 spec/dummy/config/initializers/wrap_parameters.rb delete mode 100644 spec/dummy/config/locales/doorkeeper.en.yml delete mode 100644 spec/dummy/config/mongo.yml delete mode 100644 spec/dummy/config/mongoid2.yml delete mode 100644 spec/dummy/config/mongoid3.yml delete mode 100644 spec/dummy/config/mongoid4.yml delete mode 100644 spec/dummy/config/routes.rb delete mode 100644 spec/dummy/public/404.html delete mode 100644 spec/dummy/public/422.html delete mode 100644 spec/dummy/public/500.html delete mode 100644 spec/dummy/public/favicon.ico delete mode 100755 spec/dummy/script/rails delete mode 100644 spec/factories/access_grant.rb delete mode 100644 spec/factories/access_token.rb delete mode 100644 spec/factories/application.rb delete mode 100644 spec/models/doorkeeper/access_grant_spec.rb delete mode 100644 spec/models/doorkeeper/access_token_spec.rb delete mode 100644 spec/models/doorkeeper/application_spec.rb delete mode 100644 spec/spec_helper.rb delete mode 100644 spec/spec_helper_integration.rb delete mode 100644 spec/support/dependencies/factory_girl.rb delete mode 100644 spec/support/helpers/model_helper.rb delete mode 100644 spec/support/orm/mongo_mapper.rb delete mode 100644 spec/support/orm/mongoid.rb delete mode 100644 spec/support/shared/models_shared_examples.rb diff --git a/.gitignore b/.gitignore index f6ee337..43625e8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ spec/generators/tmp .rvmrc *.swp .idea +spec diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6bfd7ba --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "doorkeeper"] + path = doorkeeper + url = https://github.com/doorkeeper-gem/doorkeeper.git diff --git a/.hound.yml b/.hound.yml index b4126ad..27ef9c1 100644 --- a/.hound.yml +++ b/.hound.yml @@ -4,3 +4,6 @@ LineLength: StringLiterals: Enabled: false + +TrailingBlankLines: + Enabled: true diff --git a/.travis.yml b/.travis.yml index 77ce1df..3b5082f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,41 @@ language: ruby +sudo: false +cache: bundler + rvm: - - 1.9.3 - 2.0 - 2.1 + - 2.2 + env: - - orm=mongoid2 - - orm=mongoid3 - - orm=mongoid4 - - orm=mongo_mapper + - rails=3.2.0 + - rails=4.1.0 + - rails=4.2.0 + +gemfile: + - Gemfile + - gemfiles/Gemfile.mongoid2.rb + - gemfiles/Gemfile.mongoid3.rb + - gemfiles/Gemfile.mongoid4.rb + - gemfiles/Gemfile.mongo_mapper.rb + services: - mongodb + +matrix: + exclude: + - env: rails=3.2.0 + rvm: 2.2 + + - gemfile: gemfiles/Gemfile.mongoid2.rb + env: rails=4.1.0 + - gemfile: gemfiles/Gemfile.mongoid2.rb + env: rails=4.2.0 + + - gemfile: gemfiles/Gemfile.mongoid3.rb + env: rails=4.1.0 + - gemfile: gemfiles/Gemfile.mongoid3.rb + env: rails=4.2.0 + + - gemfile: gemfiles/Gemfile.mongoid4.rb + env: rails=3.2.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..fc915ec --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,45 @@ +# Contributing + +We love pull requests from everyone. By participating in this project, you agree +to abide by the thoughtbot [code of conduct]. + +[code of conduct]: https://thoughtbot.com/open-source-code-of-conduct + +Fork, then clone the repo: + + git clone git@github.com:your-username/doorkeeper-mongodb.git + +Set up Ruby dependencies via Bundler + + bundle install + +Make sure the tests pass: + + rake + +Make your change. +Write tests. +Follow our [style guide][style]. +Make the tests pass: + +[style]: https://github.com/thoughtbot/guides/tree/master/style + + rake + +Write a [good commit message][commit]. +Push to your fork. +[Submit a pull request][pr]. + +[commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html +[pr]: https://github.com/doorkeeper-gem/doorkeeper-mongodb/compare/ + +If [Hound] catches style violations, +fix them. + +[hound]: https://houndci.com + +Wait for us. +We try to at least comment on pull requests within one business day. +We may suggest changes. + +Thank you for your contribution! diff --git a/Gemfile b/Gemfile index e72821f..00bdf63 100644 --- a/Gemfile +++ b/Gemfile @@ -1,28 +1,8 @@ -source "https://rubygems.org" +ENV['rails'] ||= '4.2.0' -gem 'doorkeeper', github: 'jasl/doorkeeper', branch: 'extract-orm-specifics' +source 'https://rubygems.org' -# Defaults. For supported versions check .travis.yml -ENV['orm'] ||= 'mongoid4' -ENV['rails'] ||= ENV['orm'] == 'mongoid4' ? '~> 4.1.2' : '~> 3.2.13' - -gem 'rails', ENV['rails'] - -case ENV['orm'] -when 'active_record' - gem 'activerecord' - -when 'mongoid2' - gem 'mongoid', '~> 2' - -when 'mongoid3' - gem 'mongoid', '~> 3' - -when 'mongoid4' - gem 'mongoid', '~> 4' - -when 'mongo_mapper' - gem 'mongo_mapper', '~> 0' -end +gem 'rails', "~> #{ENV['rails']}" +gem "doorkeeper" gemspec diff --git a/README.md b/README.md index cedec0a..055b2db 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,59 @@ -# Doorkeeper bundle +# doorkeeper-mongodb extension -==== +## Installation -Doorkeeper's extracted ORM specifics. +doorkeeper-mongodb provides doorkeeper support to MongoMapper, Mongoid 2, 3 and 4. +To start using it, add to your Gemfile: -including: +``` ruby +gem 'doorkeeper-mongodb' +``` -- Mongoid2 -- Mongoid3 -- Mongoid4 -- Mongo mapper +Run [doorkeeper’s installation generator]: -### License + rails generate doorkeeper:install -MIT. +[doorkeeper’s installation generator]: https://github.com/doorkeeper-gem/doorkeeper#installation + +This will install the doorkeeper initializer into +`config/initializers/doorkeeper.rb`. + +Set the ORM configuration: + +``` ruby +Doorkeeper.configure do + orm :mongoid2 # or :mongoid3, :mongoid4, :mongo_mapper +end +``` + +### Mongoid indexes + +Make sure you create indexes for doorkeeper models. You can do this either by +running `rake db:mongoid:create_indexes` or (if you're using Mongoid 2) by +adding `autocreate_indexes: true` to your `config/mongoid.yml` + + +### MongoMapper indexes + +Generate the `db/indexes.rb` file and create indexes for the doorkeeper models: + + rails generate doorkeeper:mongo_mapper:indexes + rake db:index + + +## Tests + +To run tests, clone this repository and run `rake`. It will copy and run +doorkeeper’s original test suite, after configuring the ORM according to the +variables defined in `.travis.yml` file. + +To run locally, you need to choose a gemfile, with a command similar to: + +``` +$ export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile.mongoid4.rb +``` + +--- + +Please refer to https://github.com/doorkeeper-gem/doorkeeper for instructions on +doorkeeper’s project. diff --git a/Rakefile b/Rakefile index 78c14c4..db23caf 100644 --- a/Rakefile +++ b/Rakefile @@ -1,24 +1,28 @@ -begin - require 'bundler/setup' -rescue LoadError - puts 'You must `gem install bundler` and `bundle install` to run rake tasks' -end - +require 'bundler/setup' require 'rspec/core/rake_task' -require 'rdoc/task' +desc 'Default: run specs.' +task :default => :spec -RDoc::Task.new(:rdoc) do |rdoc| - rdoc.rdoc_dir = 'rdoc' - rdoc.title = 'DoorkeeperOrms' - rdoc.options << '--line-numbers' - rdoc.rdoc_files.include('lib/**/*.rb') +task :load_doorkeeper do + `git submodule init` + `git submodule update` + `cp -r doorkeeper/spec .` + `bundle exec rspec` end -Bundler::GemHelper.install_tasks +RSpec::Core::RakeTask.new(:spec) do |config| + config.verbose = false +end -desc "Run all specs" -RSpec::Core::RakeTask.new(:spec) +Rake::Task["spec"].enhance [:load_doorkeeper] -desc 'Default: run specs.' -task :default => :spec \ No newline at end of file +namespace :doorkeeper do + desc "Install doorkeeper in dummy app" + task :install do + cd 'spec/dummy' + system 'bundle exec rails g doorkeeper:install --force' + end +end + +Bundler::GemHelper.install_tasks diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..d8858dd --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,21 @@ +en: + orm: &orm + attributes: + doorkeeper/application: + name: 'Name' + redirect_uri: 'Redirect URI' + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: 'cannot contain a fragment.' + invalid_uri: 'must be a valid URI.' + relative_uri: 'must be an absolute URI.' + secured_uri: 'must be an HTTPS/SSL URI.' + + mongoid: + <<: *orm + + mongo_mapper: + <<: *orm diff --git a/doorkeeper b/doorkeeper new file mode 160000 index 0000000..0b0031e --- /dev/null +++ b/doorkeeper @@ -0,0 +1 @@ +Subproject commit 0b0031e759334a4db8c815aed34483d140416660 diff --git a/doorkeeper-mongodb.gemspec b/doorkeeper-mongodb.gemspec new file mode 100644 index 0000000..610f3e5 --- /dev/null +++ b/doorkeeper-mongodb.gemspec @@ -0,0 +1,32 @@ +$:.push File.expand_path("../lib", __FILE__) + +# Maintain your gem's version: +require "doorkeeper-mongodb/version" + +# Describe your gem and declare its dependencies: +Gem::Specification.new do |s| + s.name = "doorkeeper-mongodb" + s.version = DoorkeeperMongodb::VERSION + s.authors = ["jasl"] + s.email = ["jasl9187@hotmail.com"] + s.homepage = "http://github.com/doorkeeper-gem/doorkeeper-mongodb" + s.summary = "Doorkeeper mongoid 2, 3, 4 and mongo_mapper ORMs" + s.description = "Doorkeeper mongoid 2, 3, 4 and mongo_mapper ORMs" + s.license = "MIT" + + s.files = Dir["lib/**/*", "MIT-LICENSE", "Rakefile", "README.md"] + s.test_files = Dir["spec/**/*"] + + s.add_dependency "doorkeeper", "~> 2.2.0" + + s.add_development_dependency "sqlite3", "~> 1.3.5" + s.add_development_dependency "rspec-rails", "~> 3.2.0" + s.add_development_dependency "capybara", "~> 2.3.0" + s.add_development_dependency "generator_spec", "~> 0.9.0" + s.add_development_dependency "factory_girl", "~> 4.5.0" + s.add_development_dependency "timecop", "~> 0.7.0" + s.add_development_dependency "database_cleaner", "~> 1.3.0" + s.add_development_dependency "rspec-activemodel-mocks", "~> 1.0.0" + s.add_development_dependency "bcrypt-ruby", "~> 3.0.1" + s.add_development_dependency "pry", "~> 0.10.0" +end diff --git a/doorkeeper-orms.gemspec b/doorkeeper-orms.gemspec deleted file mode 100644 index f75b31d..0000000 --- a/doorkeeper-orms.gemspec +++ /dev/null @@ -1,26 +0,0 @@ -$:.push File.expand_path("../lib", __FILE__) - -# Maintain your gem's version: -require "doorkeeper-orms/version" - -# Describe your gem and declare its dependencies: -Gem::Specification.new do |s| - s.name = "doorkeeper-orms" - s.version = DoorkeeperOrms::VERSION - s.authors = ["jasl"] - s.email = ["jasl9187@hotmail.com"] - s.homepage = "http://github.com/doorkeeper-gem/doorkeeper-orms" - s.summary = "Doorkeeper with extracted ORM specifics, including mongoid 2-4 and mongo_mapper." - s.description = "Doorkeeper with extracted ORM specifics, including mongoid 2-4 and mongo_mapper" - s.license = "MIT" - - s.files = Dir["lib/**/*", "MIT-LICENSE", "Rakefile", "README.md"] - s.test_files = Dir["spec/**/*"] - - s.add_dependency "rails", ">= 3.1" - - s.add_development_dependency "rspec-rails", "~> 2.99.0" - s.add_development_dependency "factory_girl", "~> 4.4.0" - s.add_development_dependency "timecop", "~> 0.7.0" - s.add_development_dependency "database_cleaner", "~> 1.3.0" -end diff --git a/gemfiles/Gemfile.common.rb b/gemfiles/Gemfile.common.rb new file mode 100644 index 0000000..c011553 --- /dev/null +++ b/gemfiles/Gemfile.common.rb @@ -0,0 +1,8 @@ +ENV['rails'] ||= '4.2.0' + +source 'https://rubygems.org' + +gem 'rails', "~> #{ENV['rails']}" +gem "doorkeeper" + +gemspec path: '../' diff --git a/gemfiles/Gemfile.mongo_mapper.rb b/gemfiles/Gemfile.mongo_mapper.rb new file mode 100644 index 0000000..223fc39 --- /dev/null +++ b/gemfiles/Gemfile.mongo_mapper.rb @@ -0,0 +1,5 @@ +gemfile = 'gemfiles/Gemfile.common.rb' +instance_eval IO.read(gemfile), gemfile + +gem 'mongo_mapper' +gem 'bson_ext' diff --git a/gemfiles/Gemfile.mongoid2.rb b/gemfiles/Gemfile.mongoid2.rb new file mode 100644 index 0000000..b766725 --- /dev/null +++ b/gemfiles/Gemfile.mongoid2.rb @@ -0,0 +1,5 @@ +gemfile = 'gemfiles/Gemfile.common.rb' +instance_eval IO.read(gemfile), gemfile + +gem 'mongoid', '~> 2' +gem 'bson_ext' diff --git a/gemfiles/Gemfile.mongoid3.rb b/gemfiles/Gemfile.mongoid3.rb new file mode 100644 index 0000000..c418b20 --- /dev/null +++ b/gemfiles/Gemfile.mongoid3.rb @@ -0,0 +1,4 @@ +gemfile = 'gemfiles/Gemfile.common.rb' +instance_eval IO.read(gemfile), gemfile + +gem 'mongoid', '~> 3' diff --git a/gemfiles/Gemfile.mongoid4.rb b/gemfiles/Gemfile.mongoid4.rb new file mode 100644 index 0000000..5088363 --- /dev/null +++ b/gemfiles/Gemfile.mongoid4.rb @@ -0,0 +1,4 @@ +gemfile = 'gemfiles/Gemfile.common.rb' +instance_eval IO.read(gemfile), gemfile + +gem 'mongoid', '~> 4' diff --git a/lib/doorkeeper_bundle.rb b/lib/doorkeeper-mongodb.rb similarity index 69% rename from lib/doorkeeper_bundle.rb rename to lib/doorkeeper-mongodb.rb index 9ed872f..dcbdbbd 100644 --- a/lib/doorkeeper_bundle.rb +++ b/lib/doorkeeper-mongodb.rb @@ -1,7 +1,9 @@ -require 'doorkeeper/orm/mongo_mapper' +require 'doorkeeper-mongodb/version' + require 'doorkeeper/orm/mongoid2' require 'doorkeeper/orm/mongoid3' require 'doorkeeper/orm/mongoid4' +require 'doorkeeper/orm/mongo_mapper' -module DoorkeeperOrms +module DoorkeeperMongodb end diff --git a/lib/doorkeeper-mongodb/version.rb b/lib/doorkeeper-mongodb/version.rb new file mode 100644 index 0000000..ba6f600 --- /dev/null +++ b/lib/doorkeeper-mongodb/version.rb @@ -0,0 +1,3 @@ +module DoorkeeperMongodb + VERSION = "3.0.0" +end diff --git a/lib/doorkeeper-orms/version.rb b/lib/doorkeeper-orms/version.rb deleted file mode 100644 index 214f38f..0000000 --- a/lib/doorkeeper-orms/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module DoorkeeperOrms - VERSION = "0.0.1" -end diff --git a/lib/doorkeeper/orm/mongo_mapper.rb b/lib/doorkeeper/orm/mongo_mapper.rb index dba80c0..7522110 100644 --- a/lib/doorkeeper/orm/mongo_mapper.rb +++ b/lib/doorkeeper/orm/mongo_mapper.rb @@ -6,6 +6,14 @@ def self.initialize_models! require 'doorkeeper/orm/mongo_mapper/access_token' require 'doorkeeper/orm/mongo_mapper/application' end + + def self.initialize_application_owner! + require 'doorkeeper/models/concerns/ownership' + + Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership + end + + def self.check_requirements!(_config); end end end end diff --git a/lib/doorkeeper/orm/mongo_mapper/access_grant.rb b/lib/doorkeeper/orm/mongo_mapper/access_grant.rb index 81f0bfe..91e7800 100644 --- a/lib/doorkeeper/orm/mongo_mapper/access_grant.rb +++ b/lib/doorkeeper/orm/mongo_mapper/access_grant.rb @@ -1,6 +1,9 @@ module Doorkeeper class AccessGrant include MongoMapper::Document + + include AccessGrantMixin + safe timestamps! @@ -9,14 +12,10 @@ class AccessGrant key :resource_owner_id, ObjectId key :application_id, ObjectId key :token, String + key :scopes, String key :expires_in, Integer key :redirect_uri, String key :revoked_at, DateTime - key :scopes, String - - def scopes=(value) - write_attribute :scopes, value if value.present? - end def self.create_indexes ensure_index :token, unique: true diff --git a/lib/doorkeeper/orm/mongo_mapper/access_token.rb b/lib/doorkeeper/orm/mongo_mapper/access_token.rb index 481e335..603cec5 100644 --- a/lib/doorkeeper/orm/mongo_mapper/access_token.rb +++ b/lib/doorkeeper/orm/mongo_mapper/access_token.rb @@ -1,21 +1,22 @@ module Doorkeeper class AccessToken include MongoMapper::Document + + include AccessTokenMixin + safe timestamps! set_collection_name 'oauth_access_tokens' key :resource_owner_id, ObjectId + key :application_id, ObjectId key :token, String + key :refresh_token, String key :expires_in, Integer key :revoked_at, DateTime key :scopes, String - def scopes=(value) - write_attribute :scopes, value if value.present? - end - def self.last self.sort(:created_at).last end @@ -26,23 +27,17 @@ def self.delete_all_for(application_id, resource_owner) end private_class_method :delete_all_for - def self.last_authorized_token_for(application_id, resource_owner_id) - where(application_id: application_id, - resource_owner_id: resource_owner_id, - revoked_at: nil). - sort(:created_at.desc). - limit(1). - first + def self.create_indexes + ensure_index :token, unique: true + ensure_index [[:refresh_token, 1]], unique: true, sparse: true end - private_class_method :last_authorized_token_for - def refresh_token - self[:refresh_token] + def self.order_method + :sort end - def self.create_indexes - ensure_index :token, unique: true - ensure_index [[:refresh_token, 1]], unique: true, sparse: true + def self.created_at_desc + :created_at.desc end end end diff --git a/lib/doorkeeper/orm/mongo_mapper/application.rb b/lib/doorkeeper/orm/mongo_mapper/application.rb index 4e97e99..96cb9ef 100644 --- a/lib/doorkeeper/orm/mongo_mapper/application.rb +++ b/lib/doorkeeper/orm/mongo_mapper/application.rb @@ -1,6 +1,9 @@ module Doorkeeper class Application include MongoMapper::Document + + include ApplicationMixin + safe timestamps! @@ -14,12 +17,11 @@ class Application key :redirect_uri, String key :scopes, String - def scopes=(value) - write_attribute :scopes, value if value.present? - end - def self.authorized_for(resource_owner) - ids = AccessToken.where(resource_owner_id: resource_owner.id, revoked_at: nil).map(&:application_id) + ids = AccessToken.where( + resource_owner_id: resource_owner.id, + revoked_at: nil + ).map(&:application_id) find(ids) end diff --git a/lib/doorkeeper/orm/mongoid2.rb b/lib/doorkeeper/orm/mongoid2.rb index 43638d7..94d2b4b 100644 --- a/lib/doorkeeper/orm/mongoid2.rb +++ b/lib/doorkeeper/orm/mongoid2.rb @@ -6,6 +6,14 @@ def self.initialize_models! require 'doorkeeper/orm/mongoid2/access_token' require 'doorkeeper/orm/mongoid2/application' end + + def self.initialize_application_owner! + require 'doorkeeper/models/concerns/ownership' + + Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership + end + + def self.check_requirements!(_config); end end end end diff --git a/lib/doorkeeper/orm/mongoid2/access_grant.rb b/lib/doorkeeper/orm/mongoid2/access_grant.rb index b787417..2ac255e 100644 --- a/lib/doorkeeper/orm/mongoid2/access_grant.rb +++ b/lib/doorkeeper/orm/mongoid2/access_grant.rb @@ -4,12 +4,14 @@ module Doorkeeper class AccessGrant include Mongoid::Document include Mongoid::Timestamps + + include AccessGrantMixin include Models::Mongoid2::Scopes self.store_in :oauth_access_grants field :resource_owner_id, type: Integer - field :application_id, type: Hash + field :application_id, type: BSON::ObjectId field :token, type: String field :expires_in, type: Integer field :redirect_uri, type: String diff --git a/lib/doorkeeper/orm/mongoid2/access_token.rb b/lib/doorkeeper/orm/mongoid2/access_token.rb index 9d7300b..ee53cf3 100644 --- a/lib/doorkeeper/orm/mongoid2/access_token.rb +++ b/lib/doorkeeper/orm/mongoid2/access_token.rb @@ -4,12 +4,16 @@ module Doorkeeper class AccessToken include Mongoid::Document include Mongoid::Timestamps + + include AccessTokenMixin include Models::Mongoid2::Scopes self.store_in :oauth_access_tokens field :resource_owner_id, type: Integer + field :application_id, type: BSON::ObjectId field :token, type: String + field :refresh_token, type: String field :expires_in, type: Integer field :revoked_at, type: DateTime @@ -22,18 +26,12 @@ def self.delete_all_for(application_id, resource_owner) end private_class_method :delete_all_for - def self.last_authorized_token_for(application_id, resource_owner_id) - where(application_id: application_id, - resource_owner_id: resource_owner_id, - revoked_at: nil). - order_by([:created_at, :desc]). - limit(1). - first + def self.order_method + :order_by end - private_class_method :last_authorized_token_for - def refresh_token - self[:refresh_token] + def self.created_at_desc + [:created_at, :desc] end end end diff --git a/lib/doorkeeper/orm/mongoid2/application.rb b/lib/doorkeeper/orm/mongoid2/application.rb index 2dfa773..02cf0fc 100644 --- a/lib/doorkeeper/orm/mongoid2/application.rb +++ b/lib/doorkeeper/orm/mongoid2/application.rb @@ -2,6 +2,9 @@ module Doorkeeper class Application include Mongoid::Document include Mongoid::Timestamps + include Models::Mongoid2::Scopes + + include ApplicationMixin self.store_in :oauth_applications diff --git a/lib/doorkeeper/orm/mongoid2/concerns/scopes.rb b/lib/doorkeeper/orm/mongoid2/concerns/scopes.rb index c0fbf12..d98a7b2 100644 --- a/lib/doorkeeper/orm/mongoid2/concerns/scopes.rb +++ b/lib/doorkeeper/orm/mongoid2/concerns/scopes.rb @@ -4,8 +4,9 @@ module Mongoid2 module Scopes extend ActiveSupport::Concern - # It's strange that if not define these after included will raise error in Mongoid 2 and 3, but 4 works well - # see: https://travis-ci.org/jasl/doorkeeper/builds/31586902 + # It's strange that if not define these after included will raise error + # in Mongoid 2 and 3, but 4 works well see: + # https://travis-ci.org/jasl/doorkeeper/builds/31586902 included do def scopes OAuth::Scopes.from_string(self[:scopes]) diff --git a/lib/doorkeeper/orm/mongoid3.rb b/lib/doorkeeper/orm/mongoid3.rb index fc1c1bf..79a4735 100644 --- a/lib/doorkeeper/orm/mongoid3.rb +++ b/lib/doorkeeper/orm/mongoid3.rb @@ -6,6 +6,14 @@ def self.initialize_models! require 'doorkeeper/orm/mongoid3/access_token' require 'doorkeeper/orm/mongoid3/application' end + + def self.initialize_application_owner! + require 'doorkeeper/models/concerns/ownership' + + Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership + end + + def self.check_requirements!(_config); end end end end diff --git a/lib/doorkeeper/orm/mongoid3/access_grant.rb b/lib/doorkeeper/orm/mongoid3/access_grant.rb index 0add2d0..f587bb1 100644 --- a/lib/doorkeeper/orm/mongoid3/access_grant.rb +++ b/lib/doorkeeper/orm/mongoid3/access_grant.rb @@ -4,12 +4,14 @@ module Doorkeeper class AccessGrant include Mongoid::Document include Mongoid::Timestamps + + include AccessGrantMixin include Models::Mongoid3::Scopes self.store_in collection: :oauth_access_grants field :resource_owner_id, type: Moped::BSON::ObjectId - field :application_id, type: Hash + field :application_id, type: Moped::BSON::ObjectId field :token, type: String field :expires_in, type: Integer field :redirect_uri, type: String diff --git a/lib/doorkeeper/orm/mongoid3/access_token.rb b/lib/doorkeeper/orm/mongoid3/access_token.rb index 9c54182..7ef6ff1 100644 --- a/lib/doorkeeper/orm/mongoid3/access_token.rb +++ b/lib/doorkeeper/orm/mongoid3/access_token.rb @@ -4,12 +4,16 @@ module Doorkeeper class AccessToken include Mongoid::Document include Mongoid::Timestamps + + include AccessTokenMixin include Models::Mongoid3::Scopes self.store_in collection: :oauth_access_tokens field :resource_owner_id, type: Moped::BSON::ObjectId + field :application_id, type: Moped::BSON::ObjectId field :token, type: String + field :refresh_token, type: String field :expires_in, type: Integer field :revoked_at, type: DateTime @@ -22,18 +26,12 @@ def self.delete_all_for(application_id, resource_owner) end private_class_method :delete_all_for - def self.last_authorized_token_for(application_id, resource_owner_id) - where(application_id: application_id, - resource_owner_id: resource_owner_id, - revoked_at: nil). - order_by([:created_at, :desc]). - limit(1). - first + def self.order_method + :order_by end - private_class_method :last_authorized_token_for - def refresh_token - self[:refresh_token] + def self.created_at_desc + [:created_at, :desc] end end end diff --git a/lib/doorkeeper/orm/mongoid3/application.rb b/lib/doorkeeper/orm/mongoid3/application.rb index 2441278..d5ffaef 100644 --- a/lib/doorkeeper/orm/mongoid3/application.rb +++ b/lib/doorkeeper/orm/mongoid3/application.rb @@ -2,6 +2,9 @@ module Doorkeeper class Application include Mongoid::Document include Mongoid::Timestamps + include Models::Mongoid3::Scopes + + include ApplicationMixin self.store_in collection: :oauth_applications diff --git a/lib/doorkeeper/orm/mongoid3/concerns/scopes.rb b/lib/doorkeeper/orm/mongoid3/concerns/scopes.rb index 2cad094..269d998 100644 --- a/lib/doorkeeper/orm/mongoid3/concerns/scopes.rb +++ b/lib/doorkeeper/orm/mongoid3/concerns/scopes.rb @@ -4,6 +4,9 @@ module Mongoid3 module Scopes extend ActiveSupport::Concern + # It's strange that if not define these after included will raise error + # in Mongoid 2 and 3, but 4 works well see: + # https://travis-ci.org/jasl/doorkeeper/builds/31586902 included do def scopes OAuth::Scopes.from_string(self[:scopes]) @@ -16,7 +19,7 @@ def scopes_string def includes_scope?(*required_scopes) required_scopes.blank? || required_scopes.any? { |s| scopes.exists?(s.to_s) } end - + def scopes=(value) write_attribute :scopes, value if value.present? end diff --git a/lib/doorkeeper/orm/mongoid4.rb b/lib/doorkeeper/orm/mongoid4.rb index 1c9d7fd..27d7e28 100644 --- a/lib/doorkeeper/orm/mongoid4.rb +++ b/lib/doorkeeper/orm/mongoid4.rb @@ -6,6 +6,14 @@ def self.initialize_models! require 'doorkeeper/orm/mongoid4/access_token' require 'doorkeeper/orm/mongoid4/application' end + + def self.initialize_application_owner! + require 'doorkeeper/models/concerns/ownership' + + Doorkeeper::Application.send :include, Doorkeeper::Models::Ownership + end + + def self.check_requirements!(_config); end end end end diff --git a/lib/doorkeeper/orm/mongoid4/access_grant.rb b/lib/doorkeeper/orm/mongoid4/access_grant.rb index 01b9d1e..a2014d2 100644 --- a/lib/doorkeeper/orm/mongoid4/access_grant.rb +++ b/lib/doorkeeper/orm/mongoid4/access_grant.rb @@ -4,12 +4,14 @@ module Doorkeeper class AccessGrant include Mongoid::Document include Mongoid::Timestamps + + include AccessGrantMixin include Models::Mongoid4::Scopes self.store_in collection: :oauth_access_grants field :resource_owner_id, type: BSON::ObjectId - field :application_id, type: Hash + field :application_id, type: BSON::ObjectId field :token, type: String field :expires_in, type: Integer field :redirect_uri, type: String diff --git a/lib/doorkeeper/orm/mongoid4/access_token.rb b/lib/doorkeeper/orm/mongoid4/access_token.rb index 6906061..6d9c385 100644 --- a/lib/doorkeeper/orm/mongoid4/access_token.rb +++ b/lib/doorkeeper/orm/mongoid4/access_token.rb @@ -4,12 +4,16 @@ module Doorkeeper class AccessToken include Mongoid::Document include Mongoid::Timestamps + + include AccessTokenMixin include Models::Mongoid4::Scopes self.store_in collection: :oauth_access_tokens field :resource_owner_id, type: BSON::ObjectId + field :application_id, type: BSON::ObjectId field :token, type: String + field :refresh_token, type: String field :expires_in, type: Integer field :revoked_at, type: DateTime @@ -22,18 +26,12 @@ def self.delete_all_for(application_id, resource_owner) end private_class_method :delete_all_for - def self.last_authorized_token_for(application_id, resource_owner_id) - where(application_id: application_id, - resource_owner_id: resource_owner_id, - revoked_at: nil). - order_by([:created_at, :desc]). - limit(1). - first + def self.order_method + :order_by end - private_class_method :last_authorized_token_for - def refresh_token - self[:refresh_token] + def self.created_at_desc + [:created_at, :desc] end end end diff --git a/lib/doorkeeper/orm/mongoid4/application.rb b/lib/doorkeeper/orm/mongoid4/application.rb index 2441278..18b1cff 100644 --- a/lib/doorkeeper/orm/mongoid4/application.rb +++ b/lib/doorkeeper/orm/mongoid4/application.rb @@ -2,6 +2,9 @@ module Doorkeeper class Application include Mongoid::Document include Mongoid::Timestamps + include Models::Mongoid4::Scopes + + include ApplicationMixin self.store_in collection: :oauth_applications diff --git a/spec/dummy/Rakefile b/spec/dummy/Rakefile deleted file mode 100644 index 3645852..0000000 --- a/spec/dummy/Rakefile +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env rake -# Add your own tasks in files placed in lib/tasks ending in .rake, -# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. - -require File.expand_path('../config/application', __FILE__) - -Dummy::Application.load_tasks diff --git a/spec/dummy/app/controllers/application_controller.rb b/spec/dummy/app/controllers/application_controller.rb deleted file mode 100644 index e8065d9..0000000 --- a/spec/dummy/app/controllers/application_controller.rb +++ /dev/null @@ -1,3 +0,0 @@ -class ApplicationController < ActionController::Base - protect_from_forgery -end diff --git a/spec/dummy/app/controllers/custom_authorizations_controller.rb b/spec/dummy/app/controllers/custom_authorizations_controller.rb deleted file mode 100644 index b490d27..0000000 --- a/spec/dummy/app/controllers/custom_authorizations_controller.rb +++ /dev/null @@ -1,7 +0,0 @@ -class CustomAuthorizationsController < ::ApplicationController - %w(index show new create edit update destroy).each do |action| - define_method action do - render nothing: true - end - end -end diff --git a/spec/dummy/app/controllers/full_protected_resources_controller.rb b/spec/dummy/app/controllers/full_protected_resources_controller.rb deleted file mode 100644 index 1e23568..0000000 --- a/spec/dummy/app/controllers/full_protected_resources_controller.rb +++ /dev/null @@ -1,12 +0,0 @@ -class FullProtectedResourcesController < ApplicationController - before_filter -> { doorkeeper_authorize! :admin }, only: :show - before_filter :doorkeeper_authorize!, only: :index - - def index - render text: 'index' - end - - def show - render text: 'show' - end -end diff --git a/spec/dummy/app/controllers/home_controller.rb b/spec/dummy/app/controllers/home_controller.rb deleted file mode 100644 index 6b05eb8..0000000 --- a/spec/dummy/app/controllers/home_controller.rb +++ /dev/null @@ -1,17 +0,0 @@ -class HomeController < ApplicationController - def index - end - - def sign_in - session[:user_id] = if Rails.env.development? - User.first || User.create!(name: 'Joe', password: 'sekret') - else - User.first - end - redirect_to '/' - end - - def callback - render text: 'ok' - end -end diff --git a/spec/dummy/app/controllers/metal_controller.rb b/spec/dummy/app/controllers/metal_controller.rb deleted file mode 100644 index f52a512..0000000 --- a/spec/dummy/app/controllers/metal_controller.rb +++ /dev/null @@ -1,11 +0,0 @@ -class MetalController < ActionController::Metal - include AbstractController::Callbacks - include ActionController::Head - include Doorkeeper::Rails::Helpers - - before_filter :doorkeeper_authorize! - - def index - self.response_body = { ok: true }.to_json - end -end diff --git a/spec/dummy/app/controllers/semi_protected_resources_controller.rb b/spec/dummy/app/controllers/semi_protected_resources_controller.rb deleted file mode 100644 index 5886799..0000000 --- a/spec/dummy/app/controllers/semi_protected_resources_controller.rb +++ /dev/null @@ -1,11 +0,0 @@ -class SemiProtectedResourcesController < ApplicationController - before_filter :doorkeeper_authorize!, only: :index - - def index - render text: 'protected index' - end - - def show - render text: 'non protected show' - end -end diff --git a/spec/dummy/app/helpers/application_helper.rb b/spec/dummy/app/helpers/application_helper.rb deleted file mode 100644 index 2dbb236..0000000 --- a/spec/dummy/app/helpers/application_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -module ApplicationHelper - def current_user - @current_user ||= User.find_by_id(session[:user_id]) - end -end diff --git a/spec/dummy/app/models/user.rb b/spec/dummy/app/models/user.rb deleted file mode 100644 index c206725..0000000 --- a/spec/dummy/app/models/user.rb +++ /dev/null @@ -1,28 +0,0 @@ -case DOORKEEPER_ORM -when :mongoid2, :mongoid3, :mongoid4 - class User - include Mongoid::Document - include Mongoid::Timestamps - - field :name, type: String - field :password, type: String - end -when :mongo_mapper - class User - include MongoMapper::Document - timestamps! - - key :name, String - key :password, String - end -end - -class User - if ::Rails.version.to_i < 4 - attr_accessible :name, :password - end - - def self.authenticate!(name, password) - User.where(name: name, password: password).first - end -end diff --git a/spec/dummy/app/views/home/index.html.erb b/spec/dummy/app/views/home/index.html.erb deleted file mode 100644 index e69de29..0000000 diff --git a/spec/dummy/app/views/layouts/application.html.erb b/spec/dummy/app/views/layouts/application.html.erb deleted file mode 100644 index 8988b5d..0000000 --- a/spec/dummy/app/views/layouts/application.html.erb +++ /dev/null @@ -1,14 +0,0 @@ - - - - Dummy - <%= csrf_meta_tags %> - - - -<%= link_to "Sign in", '/sign_in' %> - -<%= yield %> - - - diff --git a/spec/dummy/config.ru b/spec/dummy/config.ru deleted file mode 100644 index 1989ed8..0000000 --- a/spec/dummy/config.ru +++ /dev/null @@ -1,4 +0,0 @@ -# This file is used by Rack-based servers to start the application. - -require ::File.expand_path('../config/environment', __FILE__) -run Dummy::Application diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb deleted file mode 100644 index 91578f8..0000000 --- a/spec/dummy/config/application.rb +++ /dev/null @@ -1,54 +0,0 @@ -require File.expand_path('../boot', __FILE__) - -require 'action_controller/railtie' -require 'sprockets/railtie' - -Bundler.require :default - -orm = if [:mongoid2, :mongoid3, :mongoid4].include?(DOORKEEPER_ORM) - Mongoid.load!(File.join(File.dirname(File.expand_path(__FILE__)), "#{DOORKEEPER_ORM}.yml")) - :mongoid - else - DOORKEEPER_ORM - end - -require "#{orm}/railtie" - -module Dummy - class Application < Rails::Application - # Settings in config/environments/* take precedence over those specified here. - # Application configuration should go into files in config/initializers - # -- all .rb files in that directory are automatically loaded. - - # Only load the plugins named here, in the order given (default is alphabetical). - # :all can be used as a placeholder for all plugins not explicitly named. - # config.plugins = [ :exception_notification, :ssl_requirement, :all ] - - # Activate observers that should always be running. - # config.active_record.observers = :cacher, :garbage_collector, :forum_observer - - if defined?(ActiveRecord) && Rails.version.to_i < 4 - config.active_record.whitelist_attributes = true - end - - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. - # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - # config.time_zone = 'Central Time (US & Canada)' - - # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - config.i18n.load_path += Dir[Rails.root.join('../../', 'config/locales', '*.{rb,yml}').to_s] - # config.i18n.default_locale = :en - - # Configure the default encoding used in templates for Ruby 1.9. - config.encoding = 'utf-8' - - # Configure sensitive parameters which will be filtered from the log file. - config.filter_parameters += [:password] - - # Enable the asset pipeline - config.assets.enabled = true - - # Version of your assets, change this if you want to expire all your assets - config.assets.version = '1.0' - end -end diff --git a/spec/dummy/config/boot.rb b/spec/dummy/config/boot.rb deleted file mode 100644 index d0d2cdd..0000000 --- a/spec/dummy/config/boot.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'rubygems' -require 'bundler/setup' - -DOORKEEPER_ORM = (ENV['orm'] || 'mongoid').to_sym unless defined?(DOORKEEPER_ORM) - -$LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) diff --git a/spec/dummy/config/environment.rb b/spec/dummy/config/environment.rb deleted file mode 100644 index 3da5eb9..0000000 --- a/spec/dummy/config/environment.rb +++ /dev/null @@ -1,5 +0,0 @@ -# Load the rails application -require File.expand_path('../application', __FILE__) - -# Initialize the rails application -Dummy::Application.initialize! diff --git a/spec/dummy/config/environments/development.rb b/spec/dummy/config/environments/development.rb deleted file mode 100644 index df00f8a..0000000 --- a/spec/dummy/config/environments/development.rb +++ /dev/null @@ -1,29 +0,0 @@ -Dummy::Application.configure do - # Settings specified here will take precedence over those in config/application.rb - - # In the development environment your application's code is reloaded on - # every request. This slows down response time but is perfect for development - # since you don't have to restart the web server when you make code changes. - config.cache_classes = false - - # Show full error reports and disable caching - config.consider_all_requests_local = true - config.action_controller.perform_caching = false - - # Don't care if the mailer can't send - # config.action_mailer.raise_delivery_errors = false - - # Print deprecation notices to the Rails logger - config.active_support.deprecation = :log - - # Only use best-standards-support built into browsers - config.action_dispatch.best_standards_support = :builtin - - # Do not compress assets - config.assets.compress = false - - # Expands the lines which load the assets - config.assets.debug = true - - config.eager_load = false -end diff --git a/spec/dummy/config/environments/production.rb b/spec/dummy/config/environments/production.rb deleted file mode 100644 index 5c18740..0000000 --- a/spec/dummy/config/environments/production.rb +++ /dev/null @@ -1,62 +0,0 @@ -Dummy::Application.configure do - # Settings specified here will take precedence over those in config/application.rb - - # Code is not reloaded between requests - config.cache_classes = true - - # Full error reports are disabled and caching is turned on - config.consider_all_requests_local = false - config.action_controller.perform_caching = true - - # Disable Rails's static asset server (Apache or nginx will already do this) - config.serve_static_assets = false - - # Compress JavaScripts and CSS - config.assets.compress = true - - # Don't fallback to assets pipeline if a precompiled asset is missed - config.assets.compile = false - - # Generate digests for assets URLs - config.assets.digest = true - - # Defaults to Rails.root.join("public/assets") - # config.assets.manifest = YOUR_PATH - - # Specifies the header that your server uses for sending files - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx - - # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. - # config.force_ssl = true - - # See everything in the log (default is :info) - # config.log_level = :debug - - # Use a different logger for distributed setups - # config.logger = SyslogLogger.new - - # Use a different cache store in production - # config.cache_store = :mem_cache_store - - # Enable serving of images, stylesheets, and JavaScripts from an asset server - # config.action_controller.asset_host = "http://assets.example.com" - - # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) - # config.assets.precompile += %w( search.js ) - - # Disable delivery errors, bad email addresses will be ignored - # config.action_mailer.raise_delivery_errors = false - - # Enable threaded mode - # config.threadsafe! - - # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # the I18n.default_locale when a translation can not be found) - config.i18n.fallbacks = true - - # Send deprecation notices to registered listeners - config.active_support.deprecation = :notify - - config.eager_load = true -end diff --git a/spec/dummy/config/environments/test.rb b/spec/dummy/config/environments/test.rb deleted file mode 100644 index b8890bd..0000000 --- a/spec/dummy/config/environments/test.rb +++ /dev/null @@ -1,51 +0,0 @@ -Dummy::Application.configure do - # Settings specified here will take precedence over those in config/application.rb - - # The test environment is used exclusively to run your application's - # test suite. You never need to work with it otherwise. Remember that - # your test database is "scratch space" for the test suite and is wiped - # and recreated between test runs. Don't rely on the data there! - config.cache_classes = true - - # Configure static asset server for tests with Cache-Control for performance - config.serve_static_assets = true - config.static_cache_control = 'public, max-age=3600' - - if Rails.version.to_i < 4 - # Log error messages when you accidentally call methods on nil - config.whiny_nils = true - end - - if Rails.version.to_i >= 4 - # Do not eager load code on boot. This avoids loading your whole application - # just for the purpose of running a single test. If you are using a tool that - # preloads Rails for running tests, you may have to set it to true. - config.eager_load = false - config.i18n.enforce_available_locales = true - end - - # Show full error reports and disable caching - config.consider_all_requests_local = true - config.action_controller.perform_caching = false - - # Raise exceptions instead of rendering exception templates - config.action_dispatch.show_exceptions = false - - # Disable request forgery protection in test environment - config.action_controller.allow_forgery_protection = false - - # Tell Action Mailer not to deliver emails to the real world. - # The :test delivery method accumulates sent emails in the - # ActionMailer::Base.deliveries array. - # config.action_mailer.delivery_method = :test - - # Use SQL instead of Active Record's schema dumper when creating the test database. - # This is necessary if your schema can't be completely dumped by the schema dumper, - # like if you have constraints or database-specific column types - # config.active_record.schema_format = :sql - - # Print deprecation notices to the stderr - config.active_support.deprecation = :stderr - - config.eager_load = true -end diff --git a/spec/dummy/config/initializers/backtrace_silencers.rb b/spec/dummy/config/initializers/backtrace_silencers.rb deleted file mode 100644 index 59385cd..0000000 --- a/spec/dummy/config/initializers/backtrace_silencers.rb +++ /dev/null @@ -1,7 +0,0 @@ -# Be sure to restart your server when you modify this file. - -# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. -# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } - -# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. -# Rails.backtrace_cleaner.remove_silencers! diff --git a/spec/dummy/config/initializers/doorkeeper.rb b/spec/dummy/config/initializers/doorkeeper.rb deleted file mode 100644 index cc93511..0000000 --- a/spec/dummy/config/initializers/doorkeeper.rb +++ /dev/null @@ -1,58 +0,0 @@ -Doorkeeper.configure do - # Change the ORM that doorkeeper will use - orm DOORKEEPER_ORM - - # This block will be called to check whether the - # resource owner is authenticated or not - resource_owner_authenticator do - # Put your resource owner authentication logic here. - # e.g. User.find_by_id(session[:user_id]) || redirect_to(new_user_session_url) - User.where(id: session[:user_id]).first || redirect_to(root_url, alert: 'Needs sign in.') - end - - # If you want to restrict the access to the web interface for - # adding oauth authorized applications you need to declare the - # block below - # admin_authenticator do - # # Put your admin authentication logic here. - # Admin.find_by_id(session[:admin_id]) || redirect_to(new_admin_session_url) - # end - - # Authorization Code expiration time (default 10 minutes). - # access_token_expires_in 10.minutes - - # Access token expiration time (default 2 hours) - # If you want to disable expiration, set this to nil. - # access_token_expires_in 2.hours - - # Issue access tokens with refresh token (disabled by default) - use_refresh_token - - # Define access token scopes for your provider - # For more information go to - # https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes - default_scopes :public - optional_scopes :write, :update - - # Change the way client credentials are retrieved from the request object. - # By default it retrieves first from `HTTP_AUTHORIZATION` header and - # fallsback to `:client_id` and `:client_secret` from `params` object - # Check out the wiki for mor information on customization - # client_credentials :from_basic, :from_params - - # Change the way access token is authenticated from the request object. - # By default it retrieves first from `HTTP_AUTHORIZATION` header and - # fallsback to `:access_token` or `:bearer_token` from `params` object - # Check out the wiki for mor information on customization - # access_token_methods :from_bearer_authorization, :from_access_token_param, :from_bearer_param - - # Change the native redirect uri for client apps - # When clients register with the following redirect uri, they won't be redirected to any server and the authorization code will be displayed within the provider - # The value can be any string. Use nil to disable this feature. When disabled, clients must provide a valid URL - # (Similar behaviour: https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi) - # - # native_redirect_uri 'urn:ietf:wg:oauth:2.0:oob' - - # WWW-Authenticate Realm (default 'Doorkeeper'). - realm 'Doorkeeper' -end diff --git a/spec/dummy/config/initializers/secret_token.rb b/spec/dummy/config/initializers/secret_token.rb deleted file mode 100644 index 3d2daab..0000000 --- a/spec/dummy/config/initializers/secret_token.rb +++ /dev/null @@ -1,9 +0,0 @@ -# Be sure to restart your server when you modify this file. - -# Your secret key for verifying the integrity of signed cookies. -# If you change this key, all old signed cookies will become invalid! -# Make sure the secret is at least 30 characters and all random, -# no regular words or you'll be exposed to dictionary attacks. -Dummy::Application.config.secret_key_base = - Dummy::Application.config.secret_token = - 'c00157b5a1bb6181792f0f4a8a080485de7bab9987e6cf159dc74c4f0573345c1bfa713b5d756e1491fc0b098567e8a619e2f8d268eda86a20a720d05d633780' diff --git a/spec/dummy/config/initializers/session_store.rb b/spec/dummy/config/initializers/session_store.rb deleted file mode 100644 index 952473f..0000000 --- a/spec/dummy/config/initializers/session_store.rb +++ /dev/null @@ -1,8 +0,0 @@ -# Be sure to restart your server when you modify this file. - -Dummy::Application.config.session_store :cookie_store, key: '_dummy_session' - -# Use the database for sessions instead of the cookie-based default, -# which shouldn't be used to store highly confidential information -# (create the session table with "rails generate session_migration") -# Dummy::Application.config.session_store :active_record_store diff --git a/spec/dummy/config/initializers/wrap_parameters.rb b/spec/dummy/config/initializers/wrap_parameters.rb deleted file mode 100644 index 999df20..0000000 --- a/spec/dummy/config/initializers/wrap_parameters.rb +++ /dev/null @@ -1,14 +0,0 @@ -# Be sure to restart your server when you modify this file. -# -# This file contains settings for ActionController::ParamsWrapper which -# is enabled by default. - -# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. -ActiveSupport.on_load(:action_controller) do - wrap_parameters format: [:json] -end - -# Disable root element in JSON by default. -ActiveSupport.on_load(:active_record) do - self.include_root_in_json = false -end diff --git a/spec/dummy/config/locales/doorkeeper.en.yml b/spec/dummy/config/locales/doorkeeper.en.yml deleted file mode 100644 index 60527e6..0000000 --- a/spec/dummy/config/locales/doorkeeper.en.yml +++ /dev/null @@ -1,5 +0,0 @@ -en: - doorkeeper: - scopes: - public: "Access your public data" - write: "Update your data" diff --git a/spec/dummy/config/mongo.yml b/spec/dummy/config/mongo.yml deleted file mode 100644 index 4fa128b..0000000 --- a/spec/dummy/config/mongo.yml +++ /dev/null @@ -1,11 +0,0 @@ -defaults: &defaults - host: 127.0.0.1 - port: 27017 - -development: - <<: *defaults - database: doorkeeper-mongomapper-development - -test: - <<: *defaults - database: doorkeeper-mongomapper-test-suite diff --git a/spec/dummy/config/mongoid2.yml b/spec/dummy/config/mongoid2.yml deleted file mode 100644 index 93c7c05..0000000 --- a/spec/dummy/config/mongoid2.yml +++ /dev/null @@ -1,9 +0,0 @@ -development: - database: doorkeeper-development - persist_in_safe_mode: true - autocreate_indexes: true - -test: - database: doorkeeper-mongoid2-test - persist_in_safe_mode: true - autocreate_indexes: true diff --git a/spec/dummy/config/mongoid3.yml b/spec/dummy/config/mongoid3.yml deleted file mode 100644 index 6f8304c..0000000 --- a/spec/dummy/config/mongoid3.yml +++ /dev/null @@ -1,18 +0,0 @@ -development: - sessions: - default: - database: doorkeeper-mongoid3-development - hosts: - - localhost:27017 - options: - consistency: :strong - safe: true -test: - sessions: - default: - database: doorkeeper-mongoid3-test - hosts: - - localhost:27017 - options: - consistency: :strong - safe: true diff --git a/spec/dummy/config/mongoid4.yml b/spec/dummy/config/mongoid4.yml deleted file mode 100644 index dd06d0d..0000000 --- a/spec/dummy/config/mongoid4.yml +++ /dev/null @@ -1,19 +0,0 @@ -development: - sessions: - default: - database: doorkeeper-mongoid4-development - hosts: - - localhost:27017 - options: - write: - w: 1 - -test: - sessions: - default: - database: doorkeeper-mongoid4-test - hosts: - - localhost:27017 - options: - write: - w: 1 diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb deleted file mode 100644 index ada394a..0000000 --- a/spec/dummy/config/routes.rb +++ /dev/null @@ -1,52 +0,0 @@ -Rails.application.routes.draw do - use_doorkeeper - use_doorkeeper scope: 'scope' - - scope 'inner_space' do - use_doorkeeper scope: 'scope' do - controllers authorizations: 'custom_authorizations', - tokens: 'custom_authorizations', - applications: 'custom_authorizations', - token_info: 'custom_authorizations' - - as authorizations: 'custom_auth', - tokens: 'custom_token', - token_info: 'custom_token_info' - end - end - - scope 'space' do - use_doorkeeper do - controllers authorizations: 'custom_authorizations', - tokens: 'custom_authorizations', - applications: 'custom_authorizations', - token_info: 'custom_authorizations' - - as authorizations: 'custom_auth', - tokens: 'custom_token', - token_info: 'custom_token_info' - end - end - - scope 'outer_space' do - use_doorkeeper do - controllers authorizations: 'custom_authorizations', - tokens: 'custom_authorizations', - token_info: 'custom_authorizations' - - as authorizations: 'custom_auth', - tokens: 'custom_token', - token_info: 'custom_token_info' - - skip_controllers :tokens, :applications, :token_info - end - end - - get 'metal.json' => 'metal#index' - - get '/callback', to: 'home#callback' - get '/sign_in', to: 'home#sign_in' - resources :semi_protected_resources - resources :full_protected_resources - root to: 'home#index' -end diff --git a/spec/dummy/public/404.html b/spec/dummy/public/404.html deleted file mode 100644 index 9a48320..0000000 --- a/spec/dummy/public/404.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - The page you were looking for doesn't exist (404) - - - - - -
-

The page you were looking for doesn't exist.

-

You may have mistyped the address or the page may have moved.

-
- - diff --git a/spec/dummy/public/422.html b/spec/dummy/public/422.html deleted file mode 100644 index 83660ab..0000000 --- a/spec/dummy/public/422.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - The change you wanted was rejected (422) - - - - - -
-

The change you wanted was rejected.

-

Maybe you tried to change something you didn't have access to.

-
- - diff --git a/spec/dummy/public/500.html b/spec/dummy/public/500.html deleted file mode 100644 index b80307f..0000000 --- a/spec/dummy/public/500.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - We're sorry, but something went wrong (500) - - - - - -
-

We're sorry, but something went wrong.

-

We've been notified about this issue and we'll take a look at it shortly.

-
- - diff --git a/spec/dummy/public/favicon.ico b/spec/dummy/public/favicon.ico deleted file mode 100644 index e69de29..0000000 diff --git a/spec/dummy/script/rails b/spec/dummy/script/rails deleted file mode 100755 index f8da2cf..0000000 --- a/spec/dummy/script/rails +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env ruby -# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. - -APP_PATH = File.expand_path('../../config/application', __FILE__) -require File.expand_path('../../config/boot', __FILE__) -require 'rails/commands' diff --git a/spec/factories/access_grant.rb b/spec/factories/access_grant.rb deleted file mode 100644 index 2a5c9e6..0000000 --- a/spec/factories/access_grant.rb +++ /dev/null @@ -1,9 +0,0 @@ -FactoryGirl.define do - factory :access_grant, class: Doorkeeper::AccessGrant do - sequence(:resource_owner_id) { |n| n } - application - redirect_uri 'https://app.com/callback' - expires_in 100 - scopes 'public write' - end -end diff --git a/spec/factories/access_token.rb b/spec/factories/access_token.rb deleted file mode 100644 index 48cd6e5..0000000 --- a/spec/factories/access_token.rb +++ /dev/null @@ -1,11 +0,0 @@ -FactoryGirl.define do - factory :access_token, class: Doorkeeper::AccessToken do - sequence(:resource_owner_id) { |n| n } - application - expires_in 2.hours - - factory :clientless_access_token do - application nil - end - end -end diff --git a/spec/factories/application.rb b/spec/factories/application.rb deleted file mode 100644 index 749f2c0..0000000 --- a/spec/factories/application.rb +++ /dev/null @@ -1,6 +0,0 @@ -FactoryGirl.define do - factory :application, class: Doorkeeper::Application do - sequence(:name) { |n| "Application #{n}" } - redirect_uri 'https://app.com/callback' - end -end diff --git a/spec/models/doorkeeper/access_grant_spec.rb b/spec/models/doorkeeper/access_grant_spec.rb deleted file mode 100644 index 37b3351..0000000 --- a/spec/models/doorkeeper/access_grant_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'spec_helper_integration' - -describe Doorkeeper::AccessGrant do - subject { FactoryGirl.build(:access_grant) } - - it { should be_valid } - - it_behaves_like 'an accessible token' - it_behaves_like 'a revocable token' - it_behaves_like 'a unique token' do - let(:factory_name) { :access_grant } - end - - describe 'validations' do - it 'is invalid without resource_owner_id' do - subject.resource_owner_id = nil - should_not be_valid - end - - it 'is invalid without application_id' do - subject.application_id = nil - should_not be_valid - end - - it 'is invalid without token' do - subject.save - subject.token = nil - should_not be_valid - end - - it 'is invalid without expires_in' do - subject.expires_in = nil - should_not be_valid - end - end -end diff --git a/spec/models/doorkeeper/access_token_spec.rb b/spec/models/doorkeeper/access_token_spec.rb deleted file mode 100644 index 261b874..0000000 --- a/spec/models/doorkeeper/access_token_spec.rb +++ /dev/null @@ -1,226 +0,0 @@ -require 'spec_helper_integration' - -module Doorkeeper - describe AccessToken do - subject { FactoryGirl.build(:access_token) } - - it { should be_valid } - - it_behaves_like 'an accessible token' - it_behaves_like 'a revocable token' - it_behaves_like 'a unique token' do - let(:factory_name) { :access_token } - end - - describe :refresh_token do - it 'has empty refresh token if it was not required' do - token = FactoryGirl.create :access_token - expect(token.refresh_token).to be_nil - end - - it 'generates a refresh token if it was requested' do - token = FactoryGirl.create :access_token, use_refresh_token: true - expect(token.refresh_token).not_to be_nil - end - - it 'is not valid if token exists' do - token1 = FactoryGirl.create :access_token, use_refresh_token: true - token2 = FactoryGirl.create :access_token, use_refresh_token: true - token2.send :write_attribute, :refresh_token, token1.refresh_token - expect(token2).not_to be_valid - end - - it 'expects database to raise an error if refresh tokens are the same' do - token1 = FactoryGirl.create :access_token, use_refresh_token: true - token2 = FactoryGirl.create :access_token, use_refresh_token: true - expect do - token2.write_attribute :refresh_token, token1.refresh_token - token2.save(validate: false) - end.to raise_error - end - end - - describe 'validations' do - it 'is valid without resource_owner_id' do - # For client credentials flow - subject.resource_owner_id = nil - should be_valid - end - end - - describe '#same_credential?' do - - context 'with default parameters' do - - let(:resource_owner_id) { 100 } - let(:application) { FactoryGirl.create :application } - let(:default_attributes) do - { application: application, resource_owner_id: resource_owner_id } - end - let(:access_token1) { FactoryGirl.create :access_token, default_attributes } - - context 'the second token has the same owner and same app' do - let(:access_token2) { FactoryGirl.create :access_token, default_attributes } - it 'success' do - expect(access_token1.same_credential?(access_token2)).to be_truthy - end - end - - context 'the second token has same owner and different app' do - let(:other_application) { FactoryGirl.create :application } - let(:access_token2) { FactoryGirl.create :access_token, application: other_application, resource_owner_id: resource_owner_id } - - it 'fail' do - expect(access_token1.same_credential?(access_token2)).to be_falsey - end - end - - context 'the second token has different owner and different app' do - - let(:other_application) { FactoryGirl.create :application } - let(:access_token2) { FactoryGirl.create :access_token, application: other_application, resource_owner_id: 42 } - - it 'fail' do - expect(access_token1.same_credential?(access_token2)).to be_falsey - end - end - - context 'the second token has different owner and same app' do - let(:access_token2) { FactoryGirl.create :access_token, application: application, resource_owner_id: 42 } - - it 'fail' do - expect(access_token1.same_credential?(access_token2)).to be_falsey - end - end - end - end - - describe '#acceptable?' do - context 'a token that is not accessible' do - let(:token) { FactoryGirl.create(:access_token, created_at: 6.hours.ago) } - - it 'should return false' do - expect(token.acceptable?(nil)).to be false - end - end - - context 'a token that has the incorrect scopes' do - let(:token) { FactoryGirl.create(:access_token) } - - it 'should return false' do - expect(token.acceptable?(['public'])).to be false - end - end - - context 'a token is acceptable with the correct scopes' do - let(:token) do - token = FactoryGirl.create(:access_token) - token[:scopes] = 'public' - token - end - - it 'should return true' do - expect(token.acceptable?(['public'])).to be true - end - end - end - - describe '.revoke_all_for' do - let(:resource_owner) { double(id: 100) } - let(:application) { FactoryGirl.create :application } - let(:default_attributes) do - { application: application, resource_owner_id: resource_owner.id } - end - - it 'revokes all tokens for given application and resource owner' do - FactoryGirl.create :access_token, default_attributes - AccessToken.revoke_all_for application.id, resource_owner - AccessToken.all.each do |token| - expect(token).to be_revoked - end - end - - it 'matches application' do - FactoryGirl.create :access_token, default_attributes.merge(application: FactoryGirl.create(:application)) - AccessToken.revoke_all_for application.id, resource_owner - expect(AccessToken.all).not_to be_empty - end - - it 'matches resource owner' do - FactoryGirl.create :access_token, default_attributes.merge(resource_owner_id: 90) - AccessToken.revoke_all_for application.id, resource_owner - expect(AccessToken.all).not_to be_empty - end - end - - describe '.matching_token_for' do - let(:resource_owner_id) { 100 } - let(:application) { FactoryGirl.create :application } - let(:scopes) { Doorkeeper::OAuth::Scopes.from_string('public write') } - let(:default_attributes) do - { application: application, resource_owner_id: resource_owner_id, scopes: scopes.to_s } - end - - it 'returns only one token' do - token = FactoryGirl.create :access_token, default_attributes - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to eq(token) - end - - it 'accepts resource owner as object' do - resource_owner = double(to_key: true, id: 100) - token = FactoryGirl.create :access_token, default_attributes - last_token = AccessToken.matching_token_for(application, resource_owner, scopes) - expect(last_token).to eq(token) - end - - it 'accepts nil as resource owner' do - token = FactoryGirl.create :access_token, default_attributes.merge(resource_owner_id: nil) - last_token = AccessToken.matching_token_for(application, nil, scopes) - expect(last_token).to eq(token) - end - - it 'excludes revoked tokens' do - FactoryGirl.create :access_token, default_attributes.merge(revoked_at: 1.day.ago) - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to be_nil - end - - it 'matches the application' do - token = FactoryGirl.create :access_token, default_attributes.merge(application: FactoryGirl.create(:application)) - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to be_nil - end - - it 'matches the resource owner' do - FactoryGirl.create :access_token, default_attributes.merge(resource_owner_id: 2) - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to be_nil - end - - it 'matches the scopes' do - FactoryGirl.create :access_token, default_attributes.merge(scopes: 'public email') - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to be_nil - end - - it 'returns the last created token' do - FactoryGirl.create :access_token, default_attributes.merge(created_at: 1.day.ago) - token = FactoryGirl.create :access_token, default_attributes - last_token = AccessToken.matching_token_for(application, resource_owner_id, scopes) - expect(last_token).to eq(token) - end - - it 'returns as_json hash' do - token = FactoryGirl.create :access_token, default_attributes - token_hash = { resource_owner_id: token.resource_owner_id, - scopes: token.scopes, - expires_in_seconds: token.expires_in_seconds, - application: { uid: token.application.uid } - } - expect(token.as_json).to eq token_hash - end - end - - end -end diff --git a/spec/models/doorkeeper/application_spec.rb b/spec/models/doorkeeper/application_spec.rb deleted file mode 100644 index c4def9e..0000000 --- a/spec/models/doorkeeper/application_spec.rb +++ /dev/null @@ -1,177 +0,0 @@ -require 'spec_helper_integration' - -module Doorkeeper - describe Application do - include OrmHelper - - let(:require_owner) { Doorkeeper.configuration.instance_variable_set('@confirm_application_owner', true) } - let(:unset_require_owner) { Doorkeeper.configuration.instance_variable_set('@confirm_application_owner', false) } - let(:new_application) { FactoryGirl.build(:application) } - - let(:uid) { SecureRandom.hex(8) } - let(:secret) { SecureRandom.hex(8) } - - context 'application_owner is enabled' do - before do - Doorkeeper.configure do - orm DOORKEEPER_ORM - enable_application_owner - end - end - - context 'application owner is not required' do - before(:each) do - unset_require_owner - end - - it 'is valid given valid attributes' do - expect(new_application).to be_valid - end - end - - context 'application owner is required' do - before(:each) do - require_owner - @owner = mock_application_owner - end - - it 'is invalid without an owner' do - expect(new_application).not_to be_valid - end - - it 'is valid with an owner' do - new_application.owner = @owner - expect(new_application).to be_valid - end - end - end - - it 'is invalid without a name' do - new_application.name = nil - expect(new_application).not_to be_valid - end - - it 'generates uid on create' do - expect(new_application.uid).to be_nil - new_application.save - expect(new_application.uid).not_to be_nil - end - - it 'generates uid on create unless one is set' do - new_application.uid = uid - new_application.save - expect(new_application.uid).to eq(uid) - end - - it 'is invalid without uid' do - new_application.save - new_application.uid = nil - expect(new_application).not_to be_valid - end - - it 'is invalid without redirect_uri' do - new_application.save - new_application.redirect_uri = nil - expect(new_application).not_to be_valid - end - - it 'checks uniqueness of uid' do - app1 = FactoryGirl.create(:application) - app2 = FactoryGirl.create(:application) - app2.uid = app1.uid - expect(app2).not_to be_valid - end - - it 'expects database to throw an error when uids are the same' do - app1 = FactoryGirl.create(:application) - app2 = FactoryGirl.create(:application) - app2.uid = app1.uid - expect { app2.save!(validate: false) }.to raise_error - end - - it 'generate secret on create' do - expect(new_application.secret).to be_nil - new_application.save - expect(new_application.secret).not_to be_nil - end - - it 'generate secret on create unless one is set' do - new_application.secret = secret - new_application.save - expect(new_application.secret).to eq(secret) - end - - it 'is invalid without secret' do - new_application.save - new_application.secret = nil - expect(new_application).not_to be_valid - end - - describe 'destroy related models on cascade' do - before(:each) do - new_application.save - end - - it 'should destroy its access grants' do - FactoryGirl.create(:access_grant, application: new_application) - expect { new_application.destroy }.to change { Doorkeeper::AccessGrant.count }.by(-1) - end - - it 'should destroy its access tokens' do - FactoryGirl.create(:access_token, application: new_application) - FactoryGirl.create(:access_token, application: new_application, revoked_at: Time.now) - expect do - new_application.destroy - end.to change { Doorkeeper::AccessToken.count }.by(-2) - end - end - - describe :authorized_for do - let(:resource_owner) { double(:resource_owner, id: 10) } - - it 'is empty if the application is not authorized for anyone' do - expect(Application.authorized_for(resource_owner)).to be_empty - end - - it 'returns only application for a specific resource owner' do - FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id + 1) - token = FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id) - expect(Application.authorized_for(resource_owner)).to eq([token.application]) - end - - it 'excludes revoked tokens' do - FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id, revoked_at: 2.days.ago) - expect(Application.authorized_for(resource_owner)).to be_empty - end - - it 'returns all applications that have been authorized' do - token1 = FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id) - token2 = FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id) - expect(Application.authorized_for(resource_owner)).to eq([token1.application, token2.application]) - end - - it 'returns only one application even if it has been authorized twice' do - application = FactoryGirl.create(:application) - FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id, application: application) - FactoryGirl.create(:access_token, resource_owner_id: resource_owner.id, application: application) - expect(Application.authorized_for(resource_owner)).to eq([application]) - end - - it 'should fail to mass assign a new application', if: ::Rails::VERSION::MAJOR < 4 do - mass_assign = { name: 'Something', - redirect_uri: 'http://somewhere.com/something', - uid: 123, - secret: 'something' } - expect(Application.create(mass_assign).uid).not_to eq(123) - end - end - - describe :authenticate do - it 'finds the application via uid/secret' do - app = FactoryGirl.create :application - authenticated = Application.by_uid_and_secret(app.uid, app.secret) - expect(authenticated).to eq(app) - end - end - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb deleted file mode 100644 index 717cc18..0000000 --- a/spec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '../lib')) \ No newline at end of file diff --git a/spec/spec_helper_integration.rb b/spec/spec_helper_integration.rb deleted file mode 100644 index 82e785d..0000000 --- a/spec/spec_helper_integration.rb +++ /dev/null @@ -1,39 +0,0 @@ -ENV['RAILS_ENV'] ||= 'test' -DOORKEEPER_ORM = (ENV['orm'] || 'mongoid4').to_sym - -$LOAD_PATH.unshift File.dirname(__FILE__) - -require 'dummy/config/environment' -require 'rspec/rails' -require 'rspec/autorun' -require 'timecop' -require 'database_cleaner' - -Rails.logger.info "====> Doorkeeper.orm = #{Doorkeeper.configuration.orm.inspect}" -Rails.logger.info "====> Rails version: #{Rails.version}" -Rails.logger.info "====> Ruby version: #{RUBY_VERSION}" - -orm_name = Doorkeeper.configuration.orm.to_s.include?('mongoid') ? :mongoid : Doorkeeper.configuration.orm -require "support/orm/#{orm_name}" - -ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../') - -Dir["#{File.dirname(__FILE__)}/support/{dependencies,helpers,shared}/*.rb"].each { |f| require f } - -RSpec.configure do |config| - config.infer_spec_type_from_file_location! - config.mock_with :rspec - - config.infer_base_class_for_anonymous_controllers = false - - config.before do - DatabaseCleaner.start - Doorkeeper.configure { orm DOORKEEPER_ORM } - end - - config.after do - DatabaseCleaner.clean - end - - config.order = 'random' -end diff --git a/spec/support/dependencies/factory_girl.rb b/spec/support/dependencies/factory_girl.rb deleted file mode 100644 index eb4d27b..0000000 --- a/spec/support/dependencies/factory_girl.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'factory_girl' -FactoryGirl.find_definitions diff --git a/spec/support/helpers/model_helper.rb b/spec/support/helpers/model_helper.rb deleted file mode 100644 index a955440..0000000 --- a/spec/support/helpers/model_helper.rb +++ /dev/null @@ -1,45 +0,0 @@ -module ModelHelper - def client_exists(client_attributes = {}) - @client = FactoryGirl.create(:application, client_attributes) - end - - def create_resource_owner - @resource_owner = User.create!(name: 'Joe', password: 'sekret') - end - - def authorization_code_exists(options = {}) - @authorization = FactoryGirl.create(:access_grant, options) - end - - def access_grant_should_exist_for(client, resource_owner) - grant = Doorkeeper::AccessGrant.first - expect(grant.application).to eq(client) - grant.resource_owner_id == resource_owner.id - end - - def access_token_should_exist_for(client, resource_owner) - grant = Doorkeeper::AccessToken.first - expect(grant.application).to eq(client) - grant.resource_owner_id == resource_owner.id - end - - def access_grant_should_not_exist - expect(Doorkeeper::AccessGrant.all).to be_empty - end - - def access_token_should_not_exist - expect(Doorkeeper::AccessToken.all).to be_empty - end - - def access_grant_should_have_scopes(*args) - grant = Doorkeeper::AccessGrant.first - expect(grant.scopes).to eq(Doorkeeper::OAuth::Scopes.from_array(args)) - end - - def access_token_should_have_scopes(*args) - grant = Doorkeeper::AccessToken.first - expect(grant.scopes).to eq(Doorkeeper::OAuth::Scopes.from_array(args)) - end -end - -RSpec.configuration.send :include, ModelHelper, type: :request diff --git a/spec/support/orm/mongo_mapper.rb b/spec/support/orm/mongo_mapper.rb deleted file mode 100644 index 4a56b52..0000000 --- a/spec/support/orm/mongo_mapper.rb +++ /dev/null @@ -1,25 +0,0 @@ -DatabaseCleaner[:mongo_mapper].strategy = :truncation -DatabaseCleaner[:mongo_mapper].clean_with :truncation - -RSpec.configure do |config| - config.before :suite do - Doorkeeper::Application.create_indexes - Doorkeeper::AccessGrant.create_indexes - Doorkeeper::AccessToken.create_indexes - end -end - -module Doorkeeper - class PlaceholderApplicationOwner - include ::MongoMapper::Document - - set_collection_name 'placeholder_application_owners' - many :applications, class: Doorkeeper::Application - end - - module OrmHelper - def mock_application_owner - PlaceholderApplicationOwner.new - end - end -end diff --git a/spec/support/orm/mongoid.rb b/spec/support/orm/mongoid.rb deleted file mode 100644 index 7b18018..0000000 --- a/spec/support/orm/mongoid.rb +++ /dev/null @@ -1,30 +0,0 @@ -DatabaseCleaner[:mongoid].strategy = :truncation -DatabaseCleaner[:mongoid].clean_with :truncation - -RSpec.configure do |config| - config.before do - Doorkeeper::Application.create_indexes - Doorkeeper::AccessGrant.create_indexes - Doorkeeper::AccessToken.create_indexes - end -end - -module Doorkeeper - class PlaceholderApplicationOwner - include Mongoid::Document - - if ::Mongoid::VERSION >= '3' - self.store_in collection: :placeholder_application_owners - else - self.store_in :placeholder_application_owners - end - - has_many :applications - end - - module OrmHelper - def mock_application_owner - PlaceholderApplicationOwner.new - end - end -end diff --git a/spec/support/shared/models_shared_examples.rb b/spec/support/shared/models_shared_examples.rb deleted file mode 100644 index 9489a3e..0000000 --- a/spec/support/shared/models_shared_examples.rb +++ /dev/null @@ -1,52 +0,0 @@ -shared_examples 'an accessible token' do - describe :accessible? do - it 'is accessible if token is not expired' do - allow(subject).to receive(:expired?).and_return(false) - should be_accessible - end - - it 'is not accessible if token is expired' do - allow(subject).to receive(:expired?).and_return(true) - should_not be_accessible - end - end -end - -shared_examples 'a revocable token' do - describe :accessible? do - before { subject.save! } - - it 'is accessible if token is not revoked' do - expect(subject).to be_accessible - end - - it 'is not accessible if token is revoked' do - subject.revoke - expect(subject).not_to be_accessible - end - end -end - -shared_examples 'a unique token' do - describe :token do - it 'is generated before validation' do - expect { subject.valid? }.to change { subject.token }.from(nil) - end - - it 'is not valid if token exists' do - token1 = FactoryGirl.create factory_name - token2 = FactoryGirl.create factory_name - token2.token = token1.token - expect(token2).not_to be_valid - end - - it 'expects database to throw an error when tokens are the same' do - token1 = FactoryGirl.create factory_name - token2 = FactoryGirl.create factory_name - token2.token = token1.token - expect do - token2.save!(validate: false) - end.to raise_error - end - end -end From 9df682843f87972f84b758b6314e9af10cb86f59 Mon Sep 17 00:00:00 2001 From: Tute Costa Date: Tue, 5 May 2015 00:24:42 -0400 Subject: [PATCH 2/2] Add ORM specifics to spec --- .travis.yml | 1 - Gemfile | 8 -------- Rakefile | 2 +- doorkeeper | 2 +- doorkeeper-mongodb.gemspec | 3 --- gemfiles/Gemfile.common.rb | 2 +- spec/dummy/app/models/user.rb | 28 ++++++++++++++++++++++++++++ spec/dummy/config/mongo.yml | 11 +++++++++++ spec/dummy/config/mongoid2.yml | 9 +++++++++ spec/dummy/config/mongoid3.yml | 18 ++++++++++++++++++ spec/dummy/config/mongoid4.yml | 19 +++++++++++++++++++ spec/support/orm/mongo_mapper.rb | 10 ++++++++++ spec/support/orm/mongoid.rb | 10 ++++++++++ spec/support/orm/mongoid2.rb | 1 + spec/support/orm/mongoid3.rb | 1 + spec/support/orm/mongoid4.rb | 1 + 16 files changed, 111 insertions(+), 15 deletions(-) delete mode 100644 Gemfile create mode 100644 spec/dummy/app/models/user.rb create mode 100644 spec/dummy/config/mongo.yml create mode 100644 spec/dummy/config/mongoid2.yml create mode 100644 spec/dummy/config/mongoid3.yml create mode 100644 spec/dummy/config/mongoid4.yml create mode 100644 spec/support/orm/mongo_mapper.rb create mode 100644 spec/support/orm/mongoid.rb create mode 100644 spec/support/orm/mongoid2.rb create mode 100644 spec/support/orm/mongoid3.rb create mode 100644 spec/support/orm/mongoid4.rb diff --git a/.travis.yml b/.travis.yml index 3b5082f..23dff69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,6 @@ env: - rails=4.2.0 gemfile: - - Gemfile - gemfiles/Gemfile.mongoid2.rb - gemfiles/Gemfile.mongoid3.rb - gemfiles/Gemfile.mongoid4.rb diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 00bdf63..0000000 --- a/Gemfile +++ /dev/null @@ -1,8 +0,0 @@ -ENV['rails'] ||= '4.2.0' - -source 'https://rubygems.org' - -gem 'rails', "~> #{ENV['rails']}" -gem "doorkeeper" - -gemspec diff --git a/Rakefile b/Rakefile index db23caf..b84b07d 100644 --- a/Rakefile +++ b/Rakefile @@ -7,7 +7,7 @@ task :default => :spec task :load_doorkeeper do `git submodule init` `git submodule update` - `cp -r doorkeeper/spec .` + `cp -r -n doorkeeper/spec .` `bundle exec rspec` end diff --git a/doorkeeper b/doorkeeper index 0b0031e..7fe4940 160000 --- a/doorkeeper +++ b/doorkeeper @@ -1 +1 @@ -Subproject commit 0b0031e759334a4db8c815aed34483d140416660 +Subproject commit 7fe4940786de5b310f30d1ea0bef832abe82fa31 diff --git a/doorkeeper-mongodb.gemspec b/doorkeeper-mongodb.gemspec index 610f3e5..fd777b8 100644 --- a/doorkeeper-mongodb.gemspec +++ b/doorkeeper-mongodb.gemspec @@ -26,7 +26,4 @@ Gem::Specification.new do |s| s.add_development_dependency "factory_girl", "~> 4.5.0" s.add_development_dependency "timecop", "~> 0.7.0" s.add_development_dependency "database_cleaner", "~> 1.3.0" - s.add_development_dependency "rspec-activemodel-mocks", "~> 1.0.0" - s.add_development_dependency "bcrypt-ruby", "~> 3.0.1" - s.add_development_dependency "pry", "~> 0.10.0" end diff --git a/gemfiles/Gemfile.common.rb b/gemfiles/Gemfile.common.rb index c011553..3be75ac 100644 --- a/gemfiles/Gemfile.common.rb +++ b/gemfiles/Gemfile.common.rb @@ -3,6 +3,6 @@ source 'https://rubygems.org' gem 'rails', "~> #{ENV['rails']}" -gem "doorkeeper" +gem 'doorkeeper' gemspec path: '../' diff --git a/spec/dummy/app/models/user.rb b/spec/dummy/app/models/user.rb new file mode 100644 index 0000000..d274316 --- /dev/null +++ b/spec/dummy/app/models/user.rb @@ -0,0 +1,28 @@ +case DOORKEEPER_ORM.to_s +when /mongoid/ + class User + include Mongoid::Document + include Mongoid::Timestamps + + field :name, type: String + field :password, type: String + end +when "mongo_mapper" + class User + include MongoMapper::Document + timestamps! + + key :name, String + key :password, String + end +end + +class User + if ::Rails.version.to_i < 4 || defined?(::ProtectedAttributes) + attr_accessible :name, :password + end + + def self.authenticate!(name, password) + User.where(name: name, password: password).first + end +end diff --git a/spec/dummy/config/mongo.yml b/spec/dummy/config/mongo.yml new file mode 100644 index 0000000..4fa128b --- /dev/null +++ b/spec/dummy/config/mongo.yml @@ -0,0 +1,11 @@ +defaults: &defaults + host: 127.0.0.1 + port: 27017 + +development: + <<: *defaults + database: doorkeeper-mongomapper-development + +test: + <<: *defaults + database: doorkeeper-mongomapper-test-suite diff --git a/spec/dummy/config/mongoid2.yml b/spec/dummy/config/mongoid2.yml new file mode 100644 index 0000000..93c7c05 --- /dev/null +++ b/spec/dummy/config/mongoid2.yml @@ -0,0 +1,9 @@ +development: + database: doorkeeper-development + persist_in_safe_mode: true + autocreate_indexes: true + +test: + database: doorkeeper-mongoid2-test + persist_in_safe_mode: true + autocreate_indexes: true diff --git a/spec/dummy/config/mongoid3.yml b/spec/dummy/config/mongoid3.yml new file mode 100644 index 0000000..6f8304c --- /dev/null +++ b/spec/dummy/config/mongoid3.yml @@ -0,0 +1,18 @@ +development: + sessions: + default: + database: doorkeeper-mongoid3-development + hosts: + - localhost:27017 + options: + consistency: :strong + safe: true +test: + sessions: + default: + database: doorkeeper-mongoid3-test + hosts: + - localhost:27017 + options: + consistency: :strong + safe: true diff --git a/spec/dummy/config/mongoid4.yml b/spec/dummy/config/mongoid4.yml new file mode 100644 index 0000000..dd06d0d --- /dev/null +++ b/spec/dummy/config/mongoid4.yml @@ -0,0 +1,19 @@ +development: + sessions: + default: + database: doorkeeper-mongoid4-development + hosts: + - localhost:27017 + options: + write: + w: 1 + +test: + sessions: + default: + database: doorkeeper-mongoid4-test + hosts: + - localhost:27017 + options: + write: + w: 1 diff --git a/spec/support/orm/mongo_mapper.rb b/spec/support/orm/mongo_mapper.rb new file mode 100644 index 0000000..8f4733a --- /dev/null +++ b/spec/support/orm/mongo_mapper.rb @@ -0,0 +1,10 @@ +DatabaseCleaner[:mongo_mapper].strategy = :truncation +DatabaseCleaner[:mongo_mapper].clean_with :truncation + +RSpec.configure do |config| + config.before :suite do + Doorkeeper::Application.create_indexes + Doorkeeper::AccessGrant.create_indexes + Doorkeeper::AccessToken.create_indexes + end +end diff --git a/spec/support/orm/mongoid.rb b/spec/support/orm/mongoid.rb new file mode 100644 index 0000000..2073842 --- /dev/null +++ b/spec/support/orm/mongoid.rb @@ -0,0 +1,10 @@ +DatabaseCleaner[:mongoid].strategy = :truncation +DatabaseCleaner[:mongoid].clean_with :truncation + +RSpec.configure do |config| + config.before do + Doorkeeper::Application.create_indexes + Doorkeeper::AccessGrant.create_indexes + Doorkeeper::AccessToken.create_indexes + end +end diff --git a/spec/support/orm/mongoid2.rb b/spec/support/orm/mongoid2.rb new file mode 100644 index 0000000..8f79aff --- /dev/null +++ b/spec/support/orm/mongoid2.rb @@ -0,0 +1 @@ +require_relative "mongoid.rb" diff --git a/spec/support/orm/mongoid3.rb b/spec/support/orm/mongoid3.rb new file mode 100644 index 0000000..8f79aff --- /dev/null +++ b/spec/support/orm/mongoid3.rb @@ -0,0 +1 @@ +require_relative "mongoid.rb" diff --git a/spec/support/orm/mongoid4.rb b/spec/support/orm/mongoid4.rb new file mode 100644 index 0000000..8f79aff --- /dev/null +++ b/spec/support/orm/mongoid4.rb @@ -0,0 +1 @@ +require_relative "mongoid.rb"