diff options
| -rw-r--r-- | app/assets/javascripts/application.js | 13 | ||||
| -rw-r--r-- | app/views/layouts/application.html.haml | 1 | ||||
| -rw-r--r-- | certs/app/controllers/certs_controller.rb | 7 | ||||
| -rw-r--r-- | certs/app/models/cert.rb | 57 | ||||
| -rw-r--r-- | certs/app/models/leap_ca/cert.rb | 56 | ||||
| -rw-r--r-- | certs/config/locales/en.yml | 2 | ||||
| -rw-r--r-- | certs/test/functional/certs_controller_test.rb | 6 | ||||
| -rw-r--r-- | certs/test/unit/cert_pool_test.rb | 35 | ||||
| -rw-r--r-- | certs/test/unit/cert_test.rb | 46 | ||||
| -rw-r--r-- | core/lib/leap_web_core/dependencies.rb | 1 | ||||
| -rw-r--r-- | core/lib/leap_web_core/ui_dependencies.rb | 1 | ||||
| -rw-r--r-- | help/app/controllers/tickets_controller.rb | 8 | ||||
| -rw-r--r-- | help/app/views/tickets/_new_comment.html.haml | 2 | ||||
| -rw-r--r-- | help/app/views/tickets/index.html.haml | 5 | ||||
| -rw-r--r-- | help/app/views/tickets/new.html.haml | 2 | ||||
| -rw-r--r-- | help/app/views/tickets/show.html.haml | 2 | ||||
| -rw-r--r-- | help/test/functional/tickets_controller_test.rb | 4 | ||||
| -rw-r--r-- | ui_dependencies.rb | 1 | 
18 files changed, 115 insertions, 134 deletions
| diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 3fd641c..e6f6024 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -13,17 +13,14 @@  //= require jquery  //= require jquery_ujs  //= require srp -//= require users -//= require_tree .  //= require bootstrap  //= require bootstrap-editable  //= require bootstrap-editable-rails  //= require bootstrap-editable-inline -//= require jquery.pjax -//= require tickets - -$(function() { -  $('a:not([data-remote]):not([data-behavior]):not([data-skip-pjax])').pjax('[data-pjax-container]'); -});  //= require rails.validations  //= require rails.validations.simple_form + +//= require tickets +//= require users + +//= require_tree . diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index bd03477..e6d22f0 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -19,6 +19,5 @@            .row              .span12                = render 'layouts/messages' -              %div{"data-pjax-container" => ""}                = yield            %footer diff --git a/certs/app/controllers/certs_controller.rb b/certs/app/controllers/certs_controller.rb index 402bef3..d81aea0 100644 --- a/certs/app/controllers/certs_controller.rb +++ b/certs/app/controllers/certs_controller.rb @@ -4,8 +4,11 @@ class CertsController < ApplicationController    # GET /cert    def show -    @cert = Cert.pick_from_pool -    render :text => @cert.zipped, :content_type => 'text/plain' +    @cert = LeapCA::Cert.pick_from_pool +    render :text => @cert.key + @cert.cert, :content_type => 'text/plain' +  rescue RECORD_NOT_FOUND +    flash[:error] = t(:cert_pool_empty) +    redirect_to root_path    end  end diff --git a/certs/app/models/cert.rb b/certs/app/models/cert.rb deleted file mode 100644 index 9a6c98d..0000000 --- a/certs/app/models/cert.rb +++ /dev/null @@ -1,57 +0,0 @@ -class Cert < CouchRest::Model::Base - -  use_database 'client_certificates' - -  timestamps! - -  property :random, Float, :accessible => false - -  before_validation :set_random, :attach_zip, :on => :create - -  validates :random, :presence => true, -    :numericality => {:greater_than => 0, :less_than => 1} - -  validates :zip_attachment, :presence => true - -  design do -    view :by_random -  end - -  class << self -    def sample -      self.by_random.startkey(rand).first || self.by_random.first -    end - -    def pick_from_pool -      cert = self.sample || self.create! -      cert.destroy -      return cert -    rescue RESOURCE_NOT_FOUND -      retry if Cert.by_random.count > 0 -      raise RECORD_NOT_FOUND -    end - -  end - -  def set_random -    self.random = rand -  end - -  def attach_zip -    file = File.open(Rails.root.join("config", "cert")) -    self.create_attachment :file => file, :name => zipname -  end - -  def zipname -    'cert.txt' -  end - -  def zip_attachment -    attachments[zipname] -  end - -  def zipped -    read_attachment(zipname) -  end - -end diff --git a/certs/app/models/leap_ca/cert.rb b/certs/app/models/leap_ca/cert.rb new file mode 100644 index 0000000..9d4f15e --- /dev/null +++ b/certs/app/models/leap_ca/cert.rb @@ -0,0 +1,56 @@ +# +# Model for certificates stored in CouchDB. +# +# This file must be loaded after Config has been loaded. +# + +module LeapCA +  class Cert < CouchRest::Model::Base + +# No config yet.    use_database LeapCA::Config.db_name +    use_database 'client_certificates' + +    timestamps! + +    property :key, String                          # the client private RSA key +    property :cert, String                         # the client x509 certificate, signed by the CA +    property :valid_until, Time                    # expiration time of the client certificate +    property :random, Float, :accessible => false  # used to help pick a random cert by the webapp + +    before_validation :set_random, :on => :create + +    validates :key, :presence => true +    validates :cert, :presence => true +    validates :random, :presence => true +    validates :random, :numericality => {:greater_than => 0, :less_than => 1} + +    design do +      view :by_random +    end + +    def set_random +      self.random = rand +    end + +    class << self +      def sample +        self.by_random.startkey(rand).first || self.by_random.first +      end + +      def pick_from_pool +        cert = self.sample +        raise RECORD_NOT_FOUND unless cert +        cert.destroy +        return cert +      rescue RESOURCE_NOT_FOUND +        retry if self.by_random.count > 0 +        raise RECORD_NOT_FOUND +      end + +      def valid_attributes_hash +        {:key => "ABCD", :cert => "A123"} +      end +    end + +  end +end diff --git a/certs/config/locales/en.yml b/certs/config/locales/en.yml new file mode 100644 index 0000000..18e4f47 --- /dev/null +++ b/certs/config/locales/en.yml @@ -0,0 +1,2 @@ +en: +  cert_pool_empty: "Sorry the Cert pool is empty, please check back later." diff --git a/certs/test/functional/certs_controller_test.rb b/certs/test/functional/certs_controller_test.rb index 9bba8c0..3d6946e 100644 --- a/certs/test/functional/certs_controller_test.rb +++ b/certs/test/functional/certs_controller_test.rb @@ -12,10 +12,10 @@ class CertsControllerTest < ActionController::TestCase    test "should send cert" do      login -    cert = stub :zipped => "adsf", :zipname => "cert_stub.zip" -    Cert.expects(:pick_from_pool).returns(cert) +    cert = stub :cert => "adsf", :key => "key" +    LeapCA::Cert.expects(:pick_from_pool).returns(cert)      get :show      assert_response :success -    assert_equal cert.zipped, @response.body +    assert_equal cert.key + cert.cert, @response.body    end  end diff --git a/certs/test/unit/cert_pool_test.rb b/certs/test/unit/cert_pool_test.rb index 24ace57..06f7ce0 100644 --- a/certs/test/unit/cert_pool_test.rb +++ b/certs/test/unit/cert_pool_test.rb @@ -3,49 +3,50 @@ require 'test_helper'  class CertPoolTest < ActiveSupport::TestCase    setup do -    2.times { Cert.create! } +    2.times { LeapCA::Cert.create(LeapCA::Cert.valid_attributes_hash) }    end    teardown do -    Cert.all.each {|c| c.destroy} +    LeapCA::Cert.all.each {|c| c.destroy}    end    test "picks random sample" do -    Cert.create! # with 3 certs chances are pretty low we pick the same one 40 times. +    # with 3 certs chances are pretty low we pick the same one 40 times. +    LeapCA::Cert.create! LeapCA::Cert.valid_attributes_hash      picked = [] -    first = Cert.sample.id -    current = Cert.sample.id +    first = LeapCA::Cert.sample.id +    current = LeapCA::Cert.sample.id      40.times do        break if current != first -      current = Cert.sample.id +      current = LeapCA::Cert.sample.id      end      assert_not_equal current, first    end    test "picks cert from the pool" do -    assert_difference "Cert.count", -1 do -      cert = Cert.pick_from_pool +    assert_difference "LeapCA::Cert.count", -1 do +      cert = LeapCA::Cert.pick_from_pool      end    end    test "err's out if all certs have been destroyed" do -    sample = Cert.first.tap{|c| c.destroy} -    Cert.all.each {|c| c.destroy} +    sample = LeapCA::Cert.first.tap{|c| c.destroy} +    LeapCA::Cert.all.each {|c| c.destroy}      assert_raises RECORD_NOT_FOUND do -      Cert.expects(:sample).returns(sample) -      cert = Cert.pick_from_pool +      LeapCA::Cert.expects(:sample).returns(sample) +      cert = LeapCA::Cert.pick_from_pool      end    end    test "picks other cert if first pick has been destroyed" do -    first = Cert.first.tap{|c| c.destroy} -    second = Cert.first -    Cert.expects(:sample).at_least_once. +    first = LeapCA::Cert.first.tap{|c| c.destroy} +    second = LeapCA::Cert.first +    LeapCA::Cert.expects(:sample).at_least_once.        returns(first).        then.returns(second) -    cert = Cert.pick_from_pool +    cert = LeapCA::Cert.pick_from_pool      assert_equal second, cert -    assert_nil Cert.first +    assert_nil LeapCA::Cert.first    end  end diff --git a/certs/test/unit/cert_test.rb b/certs/test/unit/cert_test.rb index 9362da2..0b21d0b 100644 --- a/certs/test/unit/cert_test.rb +++ b/certs/test/unit/cert_test.rb @@ -3,47 +3,37 @@ require 'test_helper'  class CertTest < ActiveSupport::TestCase    setup do -    @sample = Cert.new -    @sample.set_random -    @sample.attach_zip +    @sample = LeapCA::Cert.new LeapCA::Cert.valid_attributes_hash    end -  test "certs come with attachments" do -    assert @sample.has_attachment? "cert.txt" -  end - -  test "cert.zip_attachment returns couchDB attachment" do -    assert_equal "text/plain", @sample.zip_attachment["content_type"] -  end - -  test "cert.zipped returns the actual data" do -    @sample.save # This is required ! -    assert lines = @sample.zipped.split("\n") -    assert_equal 56, lines.count -    assert_equal "-----BEGIN RSA PRIVATE KEY-----", lines.first.chomp -    assert_equal "-----END CERTIFICATE-----", lines.last.chomp -  end - -  test "cert.zipname returns name for the zip file" do -    assert_equal "cert.txt", @sample.zipname +  test "stub cert for testing is valid" do +    assert @sample.valid?    end -  test "test data is valid" do +  test "setting random on create validation" do +    @sample.random = "asdf"      assert @sample.valid? +    assert @sample.random.is_a? Float +    assert @sample.random >= 0 +    assert @sample.random < 1    end    test "validates random" do -    @sample.stubs(:set_random) -    [0, 1, nil, "asdf"].each do |invalid| +    @sample.save # make sure we are past the on_create +    assert @sample.valid? +    ["asdf", 1, 2, -0.1, nil, "asdf"].each do |invalid|        @sample.random = invalid        assert !@sample.valid?, "#{invalid} should not be a valid value for random"      end    end -  test "validates attachment" do -    @sample.stubs(:attach_zip) -    @sample.delete_attachment(@sample.zipname) -    assert !@sample.valid?, "Cert should require zipped attachment" +  test "validates key" do +    @sample.key = nil +    assert !@sample.valid?, "Cert should require key"    end +  test "validates cert" do +    @sample.cert = nil +    assert !@sample.valid?, "Cert should require cert" +  end  end diff --git a/core/lib/leap_web_core/dependencies.rb b/core/lib/leap_web_core/dependencies.rb index 00ef515..7f6ca87 100644 --- a/core/lib/leap_web_core/dependencies.rb +++ b/core/lib/leap_web_core/dependencies.rb @@ -11,7 +11,6 @@ module LeapWebCore        "haml" =>  "~> 3.1.7",        "bootstrap-sass" => "~> 2.0.4",        "jquery-rails" => nil, -      "pjax_rails" => nil,        "simple_form" => nil      } diff --git a/core/lib/leap_web_core/ui_dependencies.rb b/core/lib/leap_web_core/ui_dependencies.rb index 8ca9b91..e0a0b86 100644 --- a/core/lib/leap_web_core/ui_dependencies.rb +++ b/core/lib/leap_web_core/ui_dependencies.rb @@ -2,7 +2,6 @@ require "haml"  require "bootstrap-sass"  require "jquery-rails"  require "simple_form" -require "pjax_rails"  if Rails.env == "development"    require "haml-rails" diff --git a/help/app/controllers/tickets_controller.rb b/help/app/controllers/tickets_controller.rb index db9bc82..297de30 100644 --- a/help/app/controllers/tickets_controller.rb +++ b/help/app/controllers/tickets_controller.rb @@ -39,6 +39,7 @@ class TicketsController < ApplicationController    def show      @ticket = Ticket.find(params[:id]) +    @comment = TicketComment.new      if !@ticket        redirect_to tickets_path, :alert => "No such ticket"        return @@ -53,9 +54,7 @@ class TicketsController < ApplicationController      if !ticket_access_denied?        if params[:post] #currently changes to title or is_open status -        if @ticket.update_attributes(params[:post]) #this saves ticket, so @ticket.changed? will be false -          tick_updated = true -        end +        @ticket.attributes = params[:post]          # TODO: do we want to keep the history of title changes? one possibility was adding a comment that said something like 'user changed the title from a to b'        else @@ -64,9 +63,8 @@ class TicketsController < ApplicationController          @ticket.close if params[:commit] == @reply_close_str #this overrides is_open selection          # what if there is an update and no new comment? Confirm that there is a new comment to update posted_by:          @ticket.comments.last.posted_by = (current_user ? current_user.id : nil) if @ticket.comments_changed? #protecting posted_by isn't working, so this should protect it. -        tick_updated = true if @ticket.changed? and @ticket.save        end -      if tick_updated +      if @ticket.changed? and @ticket.save          flash[:notice] = 'Ticket was successfully updated.'          if @ticket.is_open            respond_with @ticket diff --git a/help/app/views/tickets/_new_comment.html.haml b/help/app/views/tickets/_new_comment.html.haml index b216311..5697854 100644 --- a/help/app/views/tickets/_new_comment.html.haml +++ b/help/app/views/tickets/_new_comment.html.haml @@ -1,2 +1,2 @@ -= f.simple_fields_for :comments, comment_object do |c| += f.simple_fields_for :comments, @comment do |c|    = c.input :body, :label => 'Comment', :as => :text diff --git a/help/app/views/tickets/index.html.haml b/help/app/views/tickets/index.html.haml index fdbeec5..23a503d 100644 --- a/help/app/views/tickets/index.html.haml +++ b/help/app/views/tickets/index.html.haml @@ -15,8 +15,3 @@ Create a          = render @tickets.all      = paginate @tickets -%div{"data-pjax-container" => ""} -  / PJAX updates will go here -  hmmm - - diff --git a/help/app/views/tickets/new.html.haml b/help/app/views/tickets/new.html.haml index 0ee47ff..ca036a5 100644 --- a/help/app/views/tickets/new.html.haml +++ b/help/app/views/tickets/new.html.haml @@ -2,7 +2,7 @@  = simple_form_for(@ticket, :html => {:novalidate => true})  do |f| #turn off html5 validations to test    = f.input :title    = f.input :email if !current_user  #hmm--might authenticated users want to submit an alternate email? -  = render :partial => 'new_comment', :locals => {:f => f, :comment_object => nil} +  = render :partial => 'new_comment', :locals => {:f => f}    = # regarding_user if not logged in    = # email if not logged in    = f.button :submit diff --git a/help/app/views/tickets/show.html.haml b/help/app/views/tickets/show.html.haml index b9f2ce6..a4f3b5f 100644 --- a/help/app/views/tickets/show.html.haml +++ b/help/app/views/tickets/show.html.haml @@ -25,7 +25,7 @@  = #render @ticket.comments should work if view is in /app/views/comments/_comment  = simple_form_for(@ticket, :html => {:novalidate => true}) do |f| #turn off html5 validations to test -  = render :partial => 'new_comment', :locals => {:f => f, :comment_object => TicketComment.new} +  = render :partial => 'new_comment', :locals => {:f => f}    = f.button :submit, @post_reply_str    - if @ticket.is_open      = f.button :submit, @reply_close_str diff --git a/help/test/functional/tickets_controller_test.rb b/help/test/functional/tickets_controller_test.rb index b29fa17..7060936 100644 --- a/help/test/functional/tickets_controller_test.rb +++ b/help/test/functional/tickets_controller_test.rb @@ -177,9 +177,9 @@ class TicketsControllerTest < ActionController::TestCase      login :is_admin? => true, :email => nil      get :index, {:admin_status => "all", :open_status => "open"} -    assert assigns(:all_tickets).count > 1 # at least 2 tickets +    assert assigns(:all_tickets).count > 1 -    # if we close one ticket, the admin should have 1 less open ticket they admin +    # if we close one ticket, the admin should have 1 less open ticket      assert_difference('assigns[:all_tickets].count', -1) do        assigns(:tickets).first.close        assigns(:tickets).first.save diff --git a/ui_dependencies.rb b/ui_dependencies.rb index 10eac67..c0779c0 100644 --- a/ui_dependencies.rb +++ b/ui_dependencies.rb @@ -2,7 +2,6 @@ gem "haml", "~> 3.1.7"  gem "bootstrap-sass", "~> 2.1.0"  gem "jquery-rails"  gem "simple_form" -gem "pjax_rails"  gem 'client_side_validations'  gem 'client_side_validations-simple_form'  gem 'kaminari', "0.13.0" # for pagination. trying 0.13.0 as there seem to be issues with 0.14.0 when using couchrest  | 
