tunnelblick 0.0.6 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []