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 |