summaryrefslogtreecommitdiffstats
path: root/lib/puppet/ssl
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-03-10 10:37:57 -0700
committerLuke Kanies <luke@madstop.com>2008-04-15 21:34:04 -0500
commitec5bdf3b2d089d53f1f8fd986df83768564e79ac (patch)
treef2246b87471efe1f4b2689afb2a4abc1d2319843 /lib/puppet/ssl
parentbb87464f75cf3ea2e17bb660e7d1880bc36e141f (diff)
The basics for the certificate and certificate request
indirection terminii are done. I need to move most of the test code to a shared behaviour now.
Diffstat (limited to 'lib/puppet/ssl')
-rw-r--r--lib/puppet/ssl/base.rb40
-rw-r--r--lib/puppet/ssl/certificate.rb14
-rw-r--r--lib/puppet/ssl/certificate_request.rb13
-rw-r--r--lib/puppet/ssl/key.rb13
4 files changed, 53 insertions, 27 deletions
diff --git a/lib/puppet/ssl/base.rb b/lib/puppet/ssl/base.rb
new file mode 100644
index 000000000..87cbea4b5
--- /dev/null
+++ b/lib/puppet/ssl/base.rb
@@ -0,0 +1,40 @@
+require 'puppet/ssl'
+
+# The base class for wrapping SSL instances.
+class Puppet::SSL::Base
+ def self.wraps(klass)
+ @wrapped_class = klass
+ end
+
+ def self.wrapped_class
+ raise(Puppet::DevError, "%s has not declared what class it wraps" % self) unless defined?(@wrapped_class)
+ @wrapped_class
+ end
+
+ attr_accessor :name, :content
+
+ def generate
+ raise Puppet::DevError, "%s did not override 'generate'" % self.class
+ end
+
+ def initialize(name)
+ @name = name
+ end
+
+ # Read content from disk appropriately.
+ def read(path)
+ @content = wrapped_class.new(File.read(path))
+ end
+
+ # Convert our thing to pem.
+ def to_s
+ return "" unless content
+ content.to_pem
+ end
+
+ private
+
+ def wrapped_class
+ self.class.wrapped_class
+ end
+end
diff --git a/lib/puppet/ssl/certificate.rb b/lib/puppet/ssl/certificate.rb
index 7a5f97452..9a89b4530 100644
--- a/lib/puppet/ssl/certificate.rb
+++ b/lib/puppet/ssl/certificate.rb
@@ -1,19 +1,15 @@
-require 'puppet/ssl'
+require 'puppet/ssl/base'
# The class that manages all aspects of our SSL certificates --
# private keys, public keys, requests, etc.
-class Puppet::SSL::Certificate
- extend Puppet::Indirector
+class Puppet::SSL::Certificate < Puppet::SSL::Base
+ # This is defined from the base class
+ wraps OpenSSL::X509::Certificate
+ extend Puppet::Indirector
indirects :certificate #, :terminus_class => :file
- attr_accessor :name, :content
-
def generate
raise Puppet::DevError, "Cannot generate certificates directly; they must be generated during signing"
end
-
- def initialize(name)
- @name = name
- end
end
diff --git a/lib/puppet/ssl/certificate_request.rb b/lib/puppet/ssl/certificate_request.rb
index ce3aff477..67f0f23c6 100644
--- a/lib/puppet/ssl/certificate_request.rb
+++ b/lib/puppet/ssl/certificate_request.rb
@@ -1,13 +1,12 @@
-require 'puppet/ssl'
+require 'puppet/ssl/base'
# This constant just exists for us to use for adding our request terminii.
-class Puppet::SSL::CertificateRequest # :nodoc:
- extend Puppet::Indirector
+class Puppet::SSL::CertificateRequest < Puppet::SSL::Base
+ wraps OpenSSL::X509::Request
+ extend Puppet::Indirector
indirects :certificate_request #, :terminus_class => :file
- attr_reader :name, :content
-
# How to create a certificate request with our system defaults.
def generate(key)
Puppet.info "Creating a new SSL certificate request for %s" % name
@@ -20,8 +19,4 @@ class Puppet::SSL::CertificateRequest # :nodoc:
@content = csr
end
-
- def initialize(name)
- @name = name
- end
end
diff --git a/lib/puppet/ssl/key.rb b/lib/puppet/ssl/key.rb
index 0a207f320..18bf2a4cb 100644
--- a/lib/puppet/ssl/key.rb
+++ b/lib/puppet/ssl/key.rb
@@ -1,21 +1,16 @@
-require 'puppet/ssl'
+require 'puppet/ssl/base'
require 'puppet/indirector'
# Manage private and public keys as a pair.
-class Puppet::SSL::Key
- extend Puppet::Indirector
+class Puppet::SSL::Key < Puppet::SSL::Base
+ wraps OpenSSL::PKey::RSA
+ extend Puppet::Indirector
indirects :key #, :terminus_class => :file
- attr_accessor :name, :content
-
# Knows how to create keys with our system defaults.
def generate
Puppet.info "Creating a new SSL key for %s" % name
@content = OpenSSL::PKey::RSA.new(Puppet[:keylength])
end
-
- def initialize(name)
- @name = name
- end
end