Completed
Push — master ( fde2ba...d387dd )
by Fike
01:07
created

Validator.handler()   A

Complexity

Conditions 2

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
# frozen_string_literal: true
2
3
require 'tempfile'
4
require 'English'
5
6
require_relative 'generator'
7
require_relative 'exception/invalid_key_exception'
8
9
module AMA
10
  module Chef
11
    module SSHPrivateKeys
12
      # Simple utility for validating provided key pair
13
      class Validator
14
        # @param [AMA::Chef::SSHPrivateKeys::Model::KeyPair] key_pair
15
        def validate!(key_pair)
16
          generated_public_key = generator.generate_public_key(
17
            key_pair.compute_private_key,
18
            key_pair.comment
19
          )
20
          if key_pair.type && key_pair.type != generated_public_key.type
21
            message = "Key was provided with type #{key_pair.type}, but " \
22
              "#{generated_public_key.type} was discovered"
23
            raise_invalid_key_exception(message)
24
          end
25
          public_key = key_pair.public_key
26
          return unless public_key && public_key != generated_public_key.content
27
          message = 'Generated public key differs from provided public key'
28
          raise_invalid_key_exception(message)
29
        end
30
31
        private
32
33
        def generator
34
          return @generator if @generator
35
          @generator = Generator.new(Generator.locate_binary!)
36
        end
37
38
        # @param [String] message
39
        def raise_invalid_key_exception(message)
40
          klass = ::AMA::Chef::SSHPrivateKeys::Exception::InvalidKeyException
41
          raise klass, message
42
        end
43
      end
44
    end
45
  end
46
end
47