44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Hbc::DSL::Gpg
 | |
|   KEY_PARAMETERS = Set.new [
 | |
|                              :key_id,
 | |
|                              :key_url,
 | |
|                            ]
 | |
| 
 | |
|   VALID_PARAMETERS = Set.new []
 | |
|   VALID_PARAMETERS.merge KEY_PARAMETERS
 | |
| 
 | |
|   attr_accessor(*VALID_PARAMETERS)
 | |
|   attr_accessor :signature
 | |
| 
 | |
|   def initialize(signature, parameters = {})
 | |
|     @parameters = parameters
 | |
|     @signature = Hbc::UnderscoreSupportingURI.parse(signature)
 | |
|     parameters.each do |hkey, hvalue|
 | |
|       raise "invalid 'gpg' parameter: '#{hkey.inspect}'" unless VALID_PARAMETERS.include?(hkey)
 | |
|       writer_method = "#{hkey}=".to_sym
 | |
|       hvalue = Hbc::UnderscoreSupportingURI.parse(hvalue) if hkey == :key_url
 | |
|       valid_id?(hvalue) if hkey == :key_id
 | |
|       send(writer_method, hvalue)
 | |
|     end
 | |
|     return if KEY_PARAMETERS.intersection(parameters.keys).length == 1
 | |
|     raise "'gpg' stanza must include exactly one of: '#{KEY_PARAMETERS.to_a}'"
 | |
|   end
 | |
| 
 | |
|   def valid_id?(id)
 | |
|     legal_lengths = Set.new [8, 16, 40]
 | |
|     is_valid = id.is_a?(String) && legal_lengths.include?(id.length) && id[%r{^[0-9a-f]+$}i]
 | |
|     raise "invalid ':key_id' value: '#{id.inspect}'" unless is_valid
 | |
| 
 | |
|     is_valid
 | |
|   end
 | |
| 
 | |
|   def to_yaml
 | |
|     # bug, :key_url value is not represented as an instance of Hbc::UnderscoreSupportingURI
 | |
|     [@signature, @parameters].to_yaml
 | |
|   end
 | |
| 
 | |
|   def to_s
 | |
|     @signature.to_s
 | |
|   end
 | |
| end
 | 
