]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
updated `leap test init` to work with openvpn service levels.
authorelijah <elijah@riseup.net>
Sun, 17 Mar 2013 20:34:30 +0000 (13:34 -0700)
committerelijah <elijah@riseup.net>
Sun, 17 Mar 2013 20:34:30 +0000 (13:34 -0700)
lib/leap_cli/commands/ca.rb
lib/leap_cli/commands/test.rb
lib/leap_cli/requirements.rb

index 07e0f10d6fe7e08eab4e3c0a68eafb62c882c92a..2df7c97296843b560e363769dd81054c9b3020e6 100644 (file)
@@ -177,6 +177,9 @@ module LeapCli; module Commands
     write_file!(cert_file, root.to_pem)
   end
 
+  #
+  # returns true if the certs associated with +node+ need to be regenerated.
+  #
   def cert_needs_updating?(node)
     if !file_exists?([:node_x509_cert, node.name], [:node_x509_key, node.name])
       return true
@@ -237,17 +240,19 @@ module LeapCli; module Commands
     write_file!([:node_x509_cert, node.name], cert.to_pem)
   end
 
-  def generate_test_client_cert
+  #
+  # yields client key and cert suitable for testing
+  #
+  def generate_test_client_cert(prefix=nil)
     cert = CertificateAuthority::Certificate.new
     cert.serial_number.number = cert_serial_number(provider.domain)
-    cert.subject.common_name = random_common_name(provider.domain)
+    cert.subject.common_name = [prefix, random_common_name(provider.domain)].join
     cert.not_before = yesterday
     cert.not_after  = years_from_yesterday(1)
     cert.key_material.generate_key(1024) # just for testing, remember!
     cert.parent = client_ca_root
     cert.sign! client_test_signing_profile
-    write_file! :test_client_key, cert.key_material.private_key.to_pem
-    write_file! :test_client_cert, cert.to_pem
+    yield cert.key_material.private_key.to_pem, cert.to_pem
   end
 
   def ca_root
index 1da4f6d84d1d5ca73f7871a904e18446f9d777fe..3f0feb02d5b083f14623e507c1c7be16eee444a3 100644 (file)
@@ -5,8 +5,7 @@ module LeapCli; module Commands
     test.desc 'Creates files needed to run tests.'
     test.command :init do |init|
       init.action do |global_options,options,args|
-        generate_test_client_cert
-        generate_test_client_openvpn_config
+        generate_test_client_openvpn_configs
       end
     end
 
@@ -22,14 +21,25 @@ module LeapCli; module Commands
 
   private
 
-  def generate_test_client_openvpn_config
+  #
+  # generates a whole bunch of openvpn configs that can be used to connect to different openvpn gateways
+  #
+  def generate_test_client_openvpn_configs
+    assert_config! 'provider.ca.client_certificates.unlimited_prefix'
+    assert_config! 'provider.ca.client_certificates.limited_prefix'
     template = read_file! Path.find_file(:test_client_openvpn_template)
-
     ['production', 'testing', 'local', 'development'].each do |env|
-      vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']
+      vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_limited' => true]
+      if vpn_nodes.any?
+        generate_test_client_cert(provider.ca.client_certificates.limited_prefix) do |key, cert|
+          write_file! [:test_openvpn_config, env+'_limited'], Util.erb_eval(template, binding)
+        end
+      end
+      vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_unlimited' => true]
       if vpn_nodes.any?
-        config = Util.erb_eval(template, binding)
-        write_file! [:test_openvpn_config, env], config
+        generate_test_client_cert(provider.ca.client_certificates.unlimited_prefix) do |key, cert|
+          write_file! [:test_openvpn_config, env+'_unlimited'], Util.erb_eval(template, binding)
+        end
       end
     end
   end
index aa3be5086deadd7fcd2051f87f75e08d859fe7a4..f1f09520ad455b25cc95167118b9409198d2705d 100644 (file)
@@ -12,6 +12,8 @@ module LeapCli
     "provider.ca.server_certificates.digest",
     "provider.ca.name",
     "provider.ca.bit_size",
-    "provider.ca.life_span"
+    "provider.ca.life_span",
+    "provider.ca.client_certificates.unlimited_prefix",
+    "provider.ca.client_certificates.limited_prefix"
   ]
 end