| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  | require "utils" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Gpg | 
					
						
							| 
									
										
										
										
											2016-08-10 16:46:58 +01:00
										 |  |  |   def self.find_gpg(executable) | 
					
						
							|  |  |  |     which_all(executable).detect do |gpg| | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |       gpg_short_version = Utils.popen_read(gpg, "--version")[/\d\.\d/, 0] | 
					
						
							|  |  |  |       next unless gpg_short_version | 
					
						
							| 
									
										
										
										
											2017-03-14 17:08:36 -04:00
										 |  |  |       gpg_version = Version.create(gpg_short_version.to_s) | 
					
						
							| 
									
										
										
										
											2017-04-07 16:25:21 -04:00
										 |  |  |       @version = gpg_version | 
					
						
							| 
									
										
										
										
											2017-03-14 17:08:36 -04:00
										 |  |  |       gpg_version == Version.create("2.0") || | 
					
						
							|  |  |  |         gpg_version == Version.create("2.1") | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 16:46:58 +01:00
										 |  |  |   def self.gpg | 
					
						
							|  |  |  |     find_gpg("gpg") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |   def self.gpg2 | 
					
						
							| 
									
										
										
										
											2016-08-10 16:46:58 +01:00
										 |  |  |     find_gpg("gpg2") | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GPG_EXECUTABLE = gpg2 || gpg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def self.available? | 
					
						
							| 
									
										
										
										
											2016-08-10 17:28:24 +01:00
										 |  |  |     File.executable?(GPG_EXECUTABLE.to_s) | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 16:25:21 -04:00
										 |  |  |   def self.version | 
					
						
							|  |  |  |     @version if available? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 04:50:59 +01:00
										 |  |  |   def self.create_test_key(path) | 
					
						
							|  |  |  |     odie "No GPG present to test against!" unless available? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (path/"batch.gpg").write <<-EOS.undent
 | 
					
						
							|  |  |  |       Key-Type: RSA | 
					
						
							|  |  |  |       Key-Length: 2048
 | 
					
						
							|  |  |  |       Subkey-Type: RSA | 
					
						
							|  |  |  |       Subkey-Length: 2048
 | 
					
						
							|  |  |  |       Name-Real: Testing | 
					
						
							|  |  |  |       Name-Email: testing@foo.bar | 
					
						
							|  |  |  |       Expire-Date: 1d | 
					
						
							|  |  |  |       %commit | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |     system GPG_EXECUTABLE, "--batch", "--gen-key", "batch.gpg" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |