lita-openvpnas 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2ea239c826e325e1ff971172be235aba600c264
4
- data.tar.gz: 28c39d30f1353b51a1e8faca59aae67178fb06e6
3
+ metadata.gz: 988f886884de8479fd6eadab31adaa89b101e60a
4
+ data.tar.gz: 8c820c371be6d4d0da57c6306b407634aab6888a
5
5
  SHA512:
6
- metadata.gz: e3d3de3042b4634b1b2a59066c15984d39c5172dc6555577d0651d8af0f11e3de37081c4e363344cbd2b376111e04eb9ce91d6a69a69c6b60b42703925d5efdd
7
- data.tar.gz: 5395eb10b54f2e298c84ab3f843f7a3a77cda2a04ac59a0cd2987957452f1a6e56cc041cc0608069f7ad0b036b1efb2a3086fa7e8411064acbc677b6fce50944
6
+ metadata.gz: ec8cc8e0ab4d93ad3dabc7bdd7377b8c3bf005d673c45a7cab3b2df0b18da54503acdb116e463781c12ecdbf0d901aa0f944031686cb7d062849f5d762df03f9
7
+ data.tar.gz: 7d2898bcf2a54f76f35647134a18df5223569259e906e7fd91cb9ce61237766d44465fa74c6e4479f1b28bda5c5a75e676ec62ef277ce346044f27708b30b613
data/.rubocop.yml ADDED
@@ -0,0 +1,19 @@
1
+ Documentation:
2
+ Exclude:
3
+ - lib/lita/handlers/openvpnas.rb
4
+
5
+ FileName:
6
+ Exclude:
7
+ - lib/lita-openvpnas.rb
8
+
9
+ Metrics/LineLength:
10
+ Max: 100
11
+
12
+ Metrics/AbcSize:
13
+ Max: 25
14
+
15
+ Metrics/MethodLength:
16
+ Max: 25
17
+
18
+ Metrics/ClassLength:
19
+ Max: 150
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -23,3 +23,5 @@ gem "lita-openvpnas"
23
23
  #### Unlock the Google Authenticator for a User
24
24
  openvpn otp unlock <user>
25
25
 
26
+ #### List Currently Connected VPN users
27
+ openvpn active users
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new(:rubocop)
5
7
 
6
- task default: :spec
8
+ task default: [:spec, :rubocop]
@@ -1,14 +1,15 @@
1
- require "lita"
1
+ require 'lita'
2
2
  require 'rye'
3
3
  require 'timeout'
4
+ require 'json'
4
5
 
5
6
  Lita.load_locales Dir[File.expand_path(
6
- File.join("..", "..", "locales", "*.yml"), __FILE__
7
+ File.join('..', '..', 'locales', '*.yml'), __FILE__
7
8
  )]
8
9
 
9
- require "lita/handlers/openvpnas"
10
+ require 'lita/handlers/openvpnas'
10
11
 
11
12
  Lita::Handlers::Openvpnas.template_root File.expand_path(
12
- File.join("..", "..", "templates"),
13
- __FILE__
13
+ File.join('..', '..', 'templates'),
14
+ __FILE__
14
15
  )
@@ -11,7 +11,16 @@ module Lita
11
11
  :openvpn_as_otp_unlock,
12
12
  command: true,
13
13
  help: {
14
- "openvpn otp unlock <user>" => "Unlock the OTP Authenticator for an OpenVPN AS user."
14
+ 'openvpn otp unlock <user>' => 'Unlock the OTP Authenticator for an OpenVPN AS user.'
15
+ }
16
+ )
17
+
18
+ route(
19
+ /(openvpn)\s+(active)\s+(users)/i,
20
+ :openvpn_as_active_users,
21
+ command: true,
22
+ help: {
23
+ 'openvpn active users' => 'List the currently connected OpenVPN users.'
15
24
  }
16
25
  )
17
26
 
@@ -20,10 +29,57 @@ module Lita
20
29
  ssh_user = config.ssh_user || 'lita'
21
30
  ssh_host = config.hostname
22
31
  path_to_sacli = config.sacli_dir || '/usr/local/openvpn_as/scripts'
23
- username = response.user.name.split(/\s/).first
24
32
 
25
- response.reply("#{username}, let me unlock that user's OpenVPN authenticator for you.")
33
+ response.reply_with_mention t('replies.otp_unlock.working')
34
+
35
+ command = "./sacli -u #{user} --lock 0 GoogleAuthLock 2>&1"
36
+ exception = over_ssh(ssh_user, ssh_host, command, path_to_sacli)[1]
37
+
38
+ if exception
39
+ response.reply_with_mention t('replies.otp_unlock.failure')
40
+ response.reply '/code ' + exception.message
41
+ end
42
+
43
+ # build a reply
44
+ response.reply_with_mention t('replies.otp_unlock.success', user: user)
45
+ end
46
+
47
+ def openvpn_as_active_users(response)
48
+ ssh_user = config.ssh_user || 'lita'
49
+ ssh_host = config.hostname
50
+ path_to_sacli = config.sacli_dir || '/usr/local/openvpn_as/scripts'
51
+
52
+ response.reply_with_mention t('replies.active_users.working')
26
53
 
54
+ command = './sacli VPNStatus 2>&1'
55
+ result, exception = over_ssh(ssh_user, ssh_host, command, path_to_sacli)
56
+
57
+ if exception
58
+ response.reply_with_mention t('replies.active_users.failure')
59
+ response.reply '/code ' + exception.message
60
+ end
61
+
62
+ # Figure out who is connected and what their client IP is
63
+ clients = extract_clients(result)
64
+
65
+ # build a reply
66
+ response.reply_with_mention t('replies.active_users.failure', number: clients.size.to_s)
67
+ response.reply '/code ' + clients.each { |client, ip| "#{client} @ #{ip}" }.join("\n")
68
+ end
69
+
70
+ private
71
+
72
+ def extract_clients(json_data)
73
+ clients = []
74
+ JSON.parse(json_data).values.each do |data|
75
+ data['client_list'].each do |client|
76
+ clients << { user: client[0], ip: client[2] }
77
+ end
78
+ end
79
+ clients
80
+ end
81
+
82
+ def over_ssh(_user, _host, command, cwd = '/tmp')
27
83
  exception = nil
28
84
 
29
85
  remote = Rye::Box.new(
@@ -34,14 +90,14 @@ module Lita
34
90
  )
35
91
 
36
92
  result = begin
37
- Timeout::timeout(60) do
38
- remote.cd path_to_sacli
93
+ Timeout.timeout(60) do
94
+ remote.cd cwd
39
95
  # Need to use sudo
40
96
  remote.enable_sudo
41
97
  # scary...
42
98
  remote.disable_safe_mode
43
99
 
44
- remote.execute "./sacli -u #{user} --lock 0 GoogleAuthLock 2>&1"
100
+ remote.execute command
45
101
  end
46
102
  rescue Rye::Err => e
47
103
  exception = e
@@ -50,14 +106,7 @@ module Lita
50
106
  ensure
51
107
  remote.disconnect
52
108
  end
53
-
54
- if exception
55
- response.reply_with_mention "That OpenVPN authenticator didn't seem to unlock... ;-("
56
- response.reply "/code " + exception.message
57
- end
58
-
59
- # build a reply
60
- response.reply_with_mention("That OpenVPN authenticator is now available for #{user}!")
109
+ [result, exception]
61
110
  end
62
111
 
63
112
  Lita.register_handler(self)
@@ -1,26 +1,27 @@
1
1
  Gem::Specification.new do |spec|
2
- spec.name = "lita-openvpnas"
3
- spec.version = "0.1.2"
4
- spec.authors = ["Jonathan Gnagy"].sort
5
- spec.email = ["jgnagy@knuedge.com"]
6
- spec.description = "Some basic OpenVPN Access Server interactions for Lita"
7
- spec.summary = "Allow the Lita bot to handle requests for OpenVPN Access Server tasks"
8
- spec.homepage = "https://github.com/knuedge/lita-openvpnas"
9
- spec.license = "MIT"
10
- spec.metadata = { "lita_plugin_type" => "handler" }
2
+ spec.name = 'lita-openvpnas'
3
+ spec.version = '0.1.3'
4
+ spec.authors = ['Jonathan Gnagy'].sort
5
+ spec.email = ['jgnagy@knuedge.com']
6
+ spec.description = 'Some basic OpenVPN Access Server interactions for Lita'
7
+ spec.summary = 'Allow the Lita bot to handle requests for OpenVPN Access Server tasks'
8
+ spec.homepage = 'https://github.com/knuedge/lita-openvpnas'
9
+ spec.license = 'MIT'
10
+ spec.metadata = { 'lita_plugin_type' => 'handler' }
11
11
 
12
- spec.files = `git ls-files`.split($/)
12
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
13
13
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
- spec.require_paths = ["lib"]
15
+ spec.require_paths = ['lib']
16
16
 
17
- spec.add_runtime_dependency "lita", "~> 4.7"
18
- spec.add_runtime_dependency "rye"
17
+ spec.add_runtime_dependency 'lita', '~> 4.7'
18
+ spec.add_runtime_dependency 'rye'
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.3"
21
- spec.add_development_dependency "pry-byebug"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rack-test"
24
- spec.add_development_dependency "rspec", '~> 3.0'
20
+ spec.add_development_dependency 'bundler', '~> 1.3'
21
+ spec.add_development_dependency 'pry-byebug'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'rack-test'
24
+ spec.add_development_dependency 'rspec', '~> 3.0'
25
+ spec.add_development_dependency 'rubocop'
25
26
  spec.add_development_dependency 'travis', '~> 1.8'
26
27
  end
data/locales/en.yml CHANGED
@@ -2,3 +2,12 @@ en:
2
2
  lita:
3
3
  handlers:
4
4
  openvpnas:
5
+ replies:
6
+ otp_unlock:
7
+ working: let me unlock that user's OpenVPN authenticator for you.
8
+ failure: That OpenVPN authenticator didn't seem to unlock... ;-(
9
+ success: "That OpenVPN authenticator is now available for %{user}!"
10
+ active_users:
11
+ working: let me see who is connected.
12
+ failure: The OpenVPN server didn't like my query... ;-(
13
+ success: "There are %{number} clients connect to the OpenVPN server:"
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Lita::Handlers::Openvpnas, lita_handler: true do
4
4
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require "lita-openvpnas"
2
- require "lita/rspec"
1
+ require 'lita-openvpnas'
2
+ require 'lita/rspec'
3
3
 
4
4
  # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
5
  # was generated with Lita 4, the compatibility mode should be left disabled.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-openvpnas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-10 00:00:00.000000000 Z
11
+ date: 2016-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: travis
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +144,7 @@ extensions: []
130
144
  extra_rdoc_files: []
131
145
  files:
132
146
  - ".gitignore"
147
+ - ".rubocop.yml"
133
148
  - ".travis.yml"
134
149
  - CONTRIBUTING.md
135
150
  - Gemfile