diff options
| -rw-r--r-- | Gemfile.lock | 4 | ||||
| -rw-r--r-- | core/leap_web_core.gemspec | 2 | ||||
| -rw-r--r-- | core/lib/extensions/couchrest.rb | 35 | ||||
| -rw-r--r-- | core/lib/tasks/leap_web_core_tasks.rake | 29 | ||||
| -rw-r--r-- | users/app/controllers/keys_controller.rb | 12 | ||||
| -rw-r--r-- | users/config/routes.rb | 2 | ||||
| -rw-r--r-- | users/test/functional/keys_controller_test.rb | 32 | 
7 files changed, 100 insertions, 16 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index e6096fd..8d80546 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -25,7 +25,7 @@ PATH      leap_web_core (0.2.5)        couchrest (~> 1.1.3)        couchrest_model (~> 2.0.0) -      couchrest_session_store (~> 0.2.0) +      couchrest_session_store (~> 0.2.1)        json        rails (~> 3.2.11) @@ -110,7 +110,7 @@ GEM        couchrest (~> 1.1.3)        mime-types (>= 1.15)        tzinfo (>= 0.3.22) -    couchrest_session_store (0.2.0) +    couchrest_session_store (0.2.1)        actionpack        couchrest        couchrest_model diff --git a/core/leap_web_core.gemspec b/core/leap_web_core.gemspec index e98c892..c745f00 100644 --- a/core/leap_web_core.gemspec +++ b/core/leap_web_core.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |s|    s.add_dependency "couchrest", "~> 1.1.3"    s.add_dependency "couchrest_model", "~> 2.0.0" -  s.add_dependency "couchrest_session_store", "~> 0.2.0" +  s.add_dependency "couchrest_session_store", "~> 0.2.1"    s.add_dependency "json"  end diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 91dfc1c..84cfbb3 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -47,28 +47,45 @@ module CouchRest          def self.load_all_models_with_engines            self.load_all_models_without_engines            return unless defined?(Rails) -          Dir[Rails.root + 'app/models/**/*.rb'].each do |path| -            require path -          end            Dir[Rails.root + '*/app/models/**/*.rb'].each do |path|              require path            end          end -        def self.all_models_and_proxies -          callbacks = migrate_each_model(find_models) -          callbacks += migrate_each_proxying_model(find_proxying_models) -          cleanup(callbacks) +        class << self +          alias_method_chain :load_all_models, :engines +        end + +        def dump_all_models +          prepare_directory +          find_models.each do |model| +            model.design_docs.each do |design| +              dump_design(model, design) +            end +          end          end +        protected +        def dump_design(model, design) +          dir = prepare_directory model.name.tableize +          filename = design.id.sub('_design/','') + '.json' +          puts dir + filename +          design.checksum +          File.open(dir + filename, "w") do |file| +            file.write(JSON.pretty_generate(design.to_hash)) +          end +        end -        class << self -          alias_method_chain :load_all_models, :engines +        def prepare_directory(dir = '') +          dir = Rails.root + 'tmp' + 'designs' + dir +          Dir.mkdir(dir) unless Dir.exists?(dir) +          return dir          end        end      end +    end    class ModelRailtie diff --git a/core/lib/tasks/leap_web_core_tasks.rake b/core/lib/tasks/leap_web_core_tasks.rake index ae5b79b..ec6abac 100644 --- a/core/lib/tasks/leap_web_core_tasks.rake +++ b/core/lib/tasks/leap_web_core_tasks.rake @@ -1,4 +1,25 @@ -# desc "Explaining what the task does" -# task :leap_web_core do -#   # Task goes here -# end +namespace :couchrest do + +  desc "Dump all the design docs found in each model" +  task :dump => :environment do +    CouchRest::Model::Utils::Migrate.load_all_models +    CouchRest::Model::Utils::Migrate.dump_all_models +  end +end + +namespace :cleanup do +   +  desc "Cleanup all expired session documents" +  task :sessions => :environment do +    # make sure this is the same as in +    #   config/initializers/session_store.rb +    store = CouchRest::Session::Store.new expire_after: 1800 +    store.cleanup(store.expired) +  end + +  desc "Cleanup all expired tokens" +  task :tokens => :environment do +    Token.destroy_all_expired +  end +end + diff --git a/users/app/controllers/keys_controller.rb b/users/app/controllers/keys_controller.rb new file mode 100644 index 0000000..949f2c0 --- /dev/null +++ b/users/app/controllers/keys_controller.rb @@ -0,0 +1,12 @@ +class KeysController < ApplicationController + +  def show +    user = User.find_by_login(params[:login]) +    # layout won't be included if we render text +    # we will show blank page if user doesn't have key (which shouldn't generally occur) +    # and a 404 error if user doesn't exist +    user ? (render text: user.public_key) : (raise ActionController::RoutingError.new('Not Found')) + +  end + +end diff --git a/users/config/routes.rb b/users/config/routes.rb index ccecfd5..69f9cf7 100644 --- a/users/config/routes.rb +++ b/users/config/routes.rb @@ -22,4 +22,6 @@ Rails.application.routes.draw do    get "/.well-known/host-meta" => 'webfinger#host_meta'    get "/webfinger" => 'webfinger#search' +  get "/key/:login" => 'keys#show' +  end diff --git a/users/test/functional/keys_controller_test.rb b/users/test/functional/keys_controller_test.rb new file mode 100644 index 0000000..b69cbc0 --- /dev/null +++ b/users/test/functional/keys_controller_test.rb @@ -0,0 +1,32 @@ +require 'test_helper' + +class KeysControllerTest < ActionController::TestCase + +  test "get existing public key" do +    public_key = 'my public key' +    @user = stub_record :user, :public_key => public_key +    User.stubs(:find_by_login).with(@user.login).returns(@user) +    get :show, :login => @user.login +    assert_response :success +    assert_equal "text/html", response.content_type +    assert_equal public_key, response.body +  end + +  test "get non-existing public key for user" do +    # this isn't a scenerio that should generally occur. +    @user = stub_record :user +    User.stubs(:find_by_login).with(@user.login).returns(@user) +    get :show, :login => @user.login +    assert_response :success +    assert_equal "text/html", response.content_type +    assert_equal '', response.body.strip +  end + +  test "get public key for non-existing user" do +    # raise 404 error if user doesn't exist (doesn't need to be this routing error, but seems fine to assume for now): +    assert_raise(ActionController::RoutingError) { +      get :show, :login => 'asdkljslksjfdlskfj' +    } +  end + +end  | 
