tunnelblick 0.0.6 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ require_relative '../tunnel_blick'
2
+
3
+ module TunnelBlick
4
+
5
+ class << self
6
+
7
+ def try_log_info (details)
8
+ details = details
9
+
10
+ if details.public_ip.nil?
11
+ details.public_ip = TunnelBlick.my_ip
12
+ end
13
+
14
+ record = IpAddress[public_ip: details.public_ip]
15
+
16
+ if record.nil?
17
+ IpAddress.new(details.to_h).save
18
+ else
19
+ record.values.merge!(details.to_h)
20
+ record.save
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../tunnel_blick'
2
+
3
+ module TunnelBlick
4
+
5
+ class IpAddress < Sequel::Model; end
6
+
7
+ IpAddress.unrestrict_primary_key
8
+
9
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../tunnel_blick'
2
+
3
+ module TunnelBlick
4
+
5
+ class << self
6
+ attr_accessor :config_dirs, :countries, :providers, :conn_sleep
7
+ attr_accessor :uniq_tries
8
+
9
+ def my_ip
10
+ begin
11
+ open('http://icanhazip.com').read.strip
12
+ rescue => e
13
+ sputs 'Error! Could not get ip!'
14
+ sputs e.message
15
+ sputs e.to_s
16
+ end
17
+ end
18
+
19
+ def set_connect_sleep (sleep)
20
+ TunnelBlick.conn_sleep = sleep
21
+ end
22
+
23
+ def set_countries (*countries)
24
+ TunnelBlick.countries = countries
25
+ end
26
+
27
+ def set_unique_attempts (tries)
28
+ TunnelBlick.uniq_tries = tries
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,108 @@
1
+ require_relative '../tunnel_blick'
2
+
3
+ include Appscript
4
+
5
+ module TunnelBlick
6
+
7
+ class Tunnel
8
+ attr_accessor :tunnel
9
+
10
+ def initialize
11
+ @tunnel = Appscript.app('Tunnelblick.app')
12
+ TunnelBlick.conn_sleep = 3.5 if TunnelBlick.conn_sleep.nil?
13
+ shortlist_configs
14
+ end
15
+
16
+ def get_config_info (config)
17
+ match_provider(config).parse_config(config)
18
+ end
19
+
20
+ def shortlist_configs
21
+ if TunnelBlick.countries.nil?
22
+ @shortlist = vpn_configs
23
+ else
24
+ @shortlist = vpn_configs.select { |config|
25
+ details = get_config_info(config)
26
+ TunnelBlick.countries.include?(details.country)
27
+ }
28
+ end
29
+ @cycle_num = -1
30
+ end
31
+
32
+ def vpn_states; tunnel.configurations.state.get end
33
+
34
+ def vpn_configs; tunnel.configurations.name.get end
35
+
36
+ def connected?; vpn_states.include?('CONNECTED') end
37
+
38
+ def current_config
39
+ if connected?
40
+ position = vpn_states.index('CONNECTED')
41
+ vpn_configs[position]
42
+ else
43
+ nil
44
+ end
45
+ end
46
+
47
+ def connect (num = nil, logging = true)
48
+
49
+ if num.nil?
50
+ target = @shortlist.sample
51
+ else
52
+ target = @shortlist[num]
53
+ end
54
+
55
+ TunnelBlick.ip_db.disconnect
56
+ Sequel::Model.db.disconnect
57
+ print '*'
58
+
59
+ tunnel.connect(target)
60
+ until connected?
61
+ sleep(1)
62
+ print '.'
63
+ end
64
+ puts '$'
65
+ sleep(TunnelBlick.conn_sleep)
66
+
67
+ details = get_config_info(target)
68
+ TunnelBlick.details = details
69
+ my_ip = TunnelBlick.my_ip
70
+
71
+ if logging
72
+
73
+ info = details.dup
74
+ info.public_ip = my_ip
75
+
76
+ test_okay = false
77
+ until test_okay
78
+ sleep(3)
79
+ conn1_okay = TunnelBlick.ip_db.test_connection
80
+ sleep(1)
81
+ conn2_okay = Sequel::Model.db.test_connection
82
+ print '.'
83
+ test_okay = conn1_okay && conn2_okay
84
+ end
85
+ puts '$'
86
+ # Sequel::Model.db = TunnelBlick.ip_db
87
+ TunnelBlick.try_log_info(info)
88
+ end
89
+
90
+ my_ip
91
+ end
92
+
93
+ def disconnect; tunnel.disconnect_all if connected? end
94
+
95
+ def match_provider (config_name)
96
+
97
+ case config_name
98
+ when /\Amy_expressvpn.+/
99
+ TunnelBlick::ExpressVPN
100
+ else
101
+ raise ArgumentError('VPN provider not recognized.')
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
@@ -0,0 +1,3 @@
1
+ module TunnelBlick
2
+ VERSION = "0.1.15"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tunnel_blick/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "tunnelblick"
8
+ spec.version = TunnelBlick::VERSION
9
+ spec.authors = ["StochasticSpr"]
10
+ spec.email = ["ejt.lai@gmail.com"]
11
+
12
+ spec.summary = 'Summary'
13
+ spec.description = 'A controller for the tunnelblick app'
14
+ spec.homepage = 'http://www.placeholder.com'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.license = 'CC-BY-NC-ND-4.0'
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.11"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+
26
+ spec.add_runtime_dependency 'facets', '~> 3.0'
27
+ spec.add_runtime_dependency 'pg', '~> 0.18'
28
+ spec.add_runtime_dependency 'rb-scpt', '~> 1.0'
29
+ spec.add_runtime_dependency 'sequel', '~> 4.32'
30
+ end
metadata CHANGED
@@ -1,67 +1,130 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tunnelblick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
- - Eugene Lai
7
+ - StochasticSpr
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-12 00:00:00.000000000 Z
11
+ date: 2016-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: facets
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
- - - ">="
45
+ - - "~>"
18
46
  - !ruby/object:Gem::Version
19
- version: '0'
47
+ version: '3.0'
20
48
  type: :runtime
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
- - - ">="
52
+ - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '0'
54
+ version: '3.0'
27
55
  - !ruby/object:Gem::Dependency
28
- name: flex_config
56
+ name: pg
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ">="
59
+ - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '0'
61
+ version: '0.18'
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ">="
66
+ - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '0'
68
+ version: '0.18'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rb-scpt
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ">="
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sequel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '0'
89
+ version: '4.32'
48
90
  type: :runtime
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
- - - ">="
94
+ - - "~>"
53
95
  - !ruby/object:Gem::Version
54
- version: '0'
55
- description: To do
56
- email: ejt.lai@gmail.com
96
+ version: '4.32'
97
+ description: A controller for the tunnelblick app
98
+ email:
99
+ - ejt.lai@gmail.com
57
100
  executables: []
58
101
  extensions: []
59
102
  extra_rdoc_files: []
60
103
  files:
104
+ - ".gitignore"
105
+ - ".idea/dictionaries/YCL.xml"
106
+ - ".idea/misc.xml"
107
+ - ".idea/modules.xml"
108
+ - ".idea/tunnel_blick.iml"
109
+ - ".idea/vcs.xml"
110
+ - ".idea/workspace.xml"
111
+ - Gemfile
112
+ - README.md
113
+ - Rakefile
114
+ - bin/console
115
+ - bin/setup
61
116
  - lib/tunnel_blick.rb
62
117
  - lib/tunnel_blick/express_vpn.rb
63
- homepage:
64
- licenses: []
118
+ - lib/tunnel_blick/ip_methods.rb
119
+ - lib/tunnel_blick/logging.rb
120
+ - lib/tunnel_blick/models.rb
121
+ - lib/tunnel_blick/module_methods.rb
122
+ - lib/tunnel_blick/tunnel.rb
123
+ - lib/tunnel_blick/version.rb
124
+ - tunnel_blick.gemspec
125
+ homepage: http://www.placeholder.com
126
+ licenses:
127
+ - CC-BY-NC-ND-4.0
65
128
  metadata: {}
66
129
  post_install_message:
67
130
  rdoc_options: []
@@ -79,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
142
  version: '0'
80
143
  requirements: []
81
144
  rubyforge_project:
82
- rubygems_version: 2.6.1
145
+ rubygems_version: 2.6.2
83
146
  signing_key:
84
147
  specification_version: 4
85
- summary: A controller for Tunnelblick
148
+ summary: Summary
86
149
  test_files: []