diff options
| -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 | 46 | ||||
| -rw-r--r-- | certs/config/locales/en.yml | 2 | 
4 files changed, 53 insertions, 59 deletions
| 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..0c32721 --- /dev/null +++ b/certs/app/models/leap_ca/cert.rb @@ -0,0 +1,46 @@ +# +# 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 + +    validates :key, :presence => true +    validates :cert, :presence => true +    validates :random, :presence => true, :numericality => {:greater_than_or_equal_to => 0, :less_than => 1} + +    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 +        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 + +    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." | 
