Class: Certmeister::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/certmeister/base.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Base

Returns a new instance of Base.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/certmeister/base.rb', line 8

def initialize(config)
  if config.valid?
    @sign_policy = config.sign_policy
    @fetch_policy = config.fetch_policy
    @remove_policy = config.remove_policy
    @ca_cert = config.ca_cert
    @ca_key = config.ca_key
    @store = config.store
    @openssl_digest = config.openssl_digest
  else
    reasons = config.errors.map { |kv| kv.join(' ') }
    raise RuntimeError.new("invalid config: #{reasons.join('; ')}")
  end
end

Instance Method Details

#fetch(request) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/certmeister/base.rb', line 41

def fetch(request)
  subject_to_policy(@fetch_policy, request) do |request|
    if pem = @store.fetch(request[:cn])
      Certmeister::Response.hit(pem)
    else
      Certmeister::Response.miss
    end
  end
end

#remove(request) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/certmeister/base.rb', line 51

def remove(request)
  subject_to_policy(@remove_policy, request) do |request|
    if @store.remove(request[:cn])
      Certmeister::Response.hit
    else
      Certmeister::Response.miss
    end
  end
end

#sign(request) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/certmeister/base.rb', line 23

def sign(request)
  subject_to_policy(@sign_policy, request) do |request|
    begin
      csr = OpenSSL::X509::Request.new(request[:csr])
    rescue OpenSSL::OpenSSLError => e
      Certmeister::Response.error("invalid CSR (#{e.message})")
    else
      if get_cn(csr) == request[:cn]
        pem = create_signed_certificate(csr).to_pem
        @store.store(request[:cn], pem)
        Certmeister::Response.hit(pem)
      else
        Certmeister::Response.error("CSR subject (#{get_cn(csr)}) disagrees with request CN (#{request[:cn]})")
      end
    end
  end
end