Skip to content

Instantly share code, notes, and snippets.

@chrisboulton
Last active March 21, 2024 00:59
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 16 You must be signed in to fork a gist
  • Save chrisboulton/5957284 to your computer and use it in GitHub Desktop.
Save chrisboulton/5957284 to your computer and use it in GitHub Desktop.
Quickly convert all of your Viscosity connections into OVPN configuration files for OpenVPN for iOS (bundles certificates and keys in the files too)
config_files = Dir.glob("#{ENV['HOME']}/Library/Application Support/Viscosity/OpenVPN/*/config.conf")
config_files.each do |file|
certificate_files = ['ca', 'cert', 'key', 'tls-auth']
config_dir = File.dirname(file)
connection_name = nil
new_config = []
File.read(file).each do |line|
line.strip!
if line.start_with?('#viscosity name')
connection_name = line.match(/^#viscosity name (.*)/)[1]
next
end
next if line.start_with?('#')
(key, value) = line.split(/\s+/, 2)
if certificate_files.include?(key)
# Special case for tls-auth which is "key direction"
if key == 'tls-auth'
# add direction to config
(value, direction) = value.split(/\s+/)
new_config << "key-direction #{direction}" unless direction.nil?
end
certificate = File.read("#{config_dir}/#{value}")
new_config << "<#{key}>"
new_config << certificate
new_config << "</#{key}>"
next
end
new_config << line
end
raise "Unable to find connection name in #{file}. Aborting." if connection_name.nil?
new_config.unshift("# OpenVPN Config for #{connection_name}")
out_file = "#{connection_name}.ovpn"
File.open(out_file, 'w') { |f| f.write(new_config.join("\n") + "\n") }
puts "wrote #{out_file}"
end
@Abder88
Copy link

Abder88 commented Mar 3, 2014

change line 8 from: File.read(file).each do |line| to File.read(file).each_line do |line|

@macdabby
Copy link

awesome!! this worked on a mac with the change above, thanks for the script!

@iMerica
Copy link

iMerica commented Aug 29, 2015

@SubramanianArun
Copy link

Worked perfectly after the change in line 8 on mac! @chrisboulton & Abder88. . Kudos ! !

@dprothero
Copy link

Worked on my Windows machine to create an .ovpn file for the OpenVPN Connect app on my Android phone. Thanks!

@chrisdag
Copy link

Thank you very much! Allowed me to import a client VPN config into OpenVPn on ipad pro. Total lifesaver before a long flight!

@craigmediaservices
Copy link

Thank you, still works great with the line edit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment