lita-cmd 0.2.0 → 0.3.1

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: 7a968328007af50c23e968ebc0725c7ded9a459f
4
- data.tar.gz: bbe96e910dba404a8cf56dc8408c3dd91f95720b
3
+ metadata.gz: 95c014b178540ac78fea8382a329a46edc1fd3fb
4
+ data.tar.gz: eafa77669e9e74df536f60884ab8e27baaee251f
5
5
  SHA512:
6
- metadata.gz: fc83dc3bc068f71f27fd03ceefc6e539bb8b640e9b320c8c1b27120d277c8394d4abdd6eed65cbe0616654a669844f5711c6043339fb457fd2b29114d249f814
7
- data.tar.gz: d2b1635a2e104d115a553db8bf994160cec4bbc6879f6a8d95b48683c4649f602c554440e452eaf17b3067c9dcf1a2585fac0d80b427aa1eaab27310ff46a6b8
6
+ metadata.gz: 1e7b4d4f78418f742d86a96b6a5e63ed58d4571972a79475c1e53f897d5bd3ef017c57209f866915a73c2b6d0bc6599d6901c6a1f4ac8fefa985c654ae715caa
7
+ data.tar.gz: 50035f127e8286d385a920517b5f7577211a69bd7456016891ee2dd7fe6b78a59649b1b74fdc11fc1a3f78feb2fdbedb2eeeacf8cdf70135d7ba48ca20bc1dce
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## 0.3.0
2
+
3
+ - [6aa45ca](https://github.com/dfinninger/lita-cmd/commit/6aa45ca0acc68c8677562704a0d4436189f102f3): Customize stdout/stderr prefixes and code format.
4
+ - [@DannyBen](https://github.com/DannyBen), [@groob](https://github.com/groob), [@manicholls](https://github.com/manicholls)
5
+ - [0574baa](https://github.com/dfinninger/lita-cmd/commit/0574baa85e422c71cb064b83dd50479f14194fac): Add MIT License
6
+ - [mekhanique](https://github.com/mekhanique)
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2015 Devon Finninger
2
+
3
+
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # lita-cmd
2
2
 
3
- Run scripts from your lita machine and get back the output!
3
+ Run scripts from your lita machine and get the output back.
4
4
 
5
- ## Installation
5
+ ## Install
6
6
 
7
7
  Add lita-cmd to your Lita instance's Gemfile:
8
8
 
@@ -12,88 +12,93 @@ gem "lita-cmd"
12
12
 
13
13
  ## Configuration
14
14
 
15
+ | Config Option | Description | Type | Notes |
16
+ |----------------|--------------------------------------|--------|----------|
17
+ |`scripts_dir` |Full path to location of scripts |`String`|*required*|
18
+ |`stdout_prefix` |Prefix for text returned to STDOUT |`String`| |
19
+ |`stderr_prefix` |Prefix for text returned to STDERR |`String`| |
20
+ |`output_format` |Format string used to encapsulate code|`String`| |
21
+ |`command_prefix`|Command to use for executing scripts |`String`| |
22
+
23
+
24
+ ### Example
25
+
15
26
  ```ruby
16
27
  Lita.configure do |config|
17
- # Lita CMD stuff
28
+ # Lita CMD - required parameters
18
29
  config.handlers.cmd.scripts_dir = "/path/to/dir/you/expose"
30
+
31
+ # Lita CMD - optional parameters
32
+
33
+ # Set the output format. Default: "%s"
34
+ # Note that %s will contain the returned text
35
+ config.handlers.cmd.output_format = "/code %s"
36
+
37
+ # Set the prefix of stdout and stderr.
38
+ config.handlers.cmd.stdout_prefix = ""
39
+ config.handlers.cmd.stderr_prefix = "ERROR: "
40
+
41
+ # Set the prefix for running scripts.
42
+ config.handlers.cmd.command_prefix = "run "
43
+
19
44
  end
20
45
  ```
21
46
 
22
47
  ## Usage
23
48
 
24
- - `cmd-help`
25
- - Query the configured directory for filenames and return them
26
- - `cmd`
27
- - Execute a file in the configured directory
49
+ In your chatroom, try one of these commands
28
50
 
29
- >- dfinninger: `lita cmd-help`
30
- - lita:
31
- ```
32
- devops/secret
33
- hello
34
- name
35
- ```
36
- - dfinninger: `lita cmd hello`
37
- - lita:
38
- ```
39
- Hello!
40
- ```
41
- - dfinninger: `lita cmd name`
42
- - lita:
43
- ```
44
- Your name is: ... well, idk, man...
45
- ```
46
- - dfinninger: `lita cmd name Devon`
47
- - lita:
48
- ```
49
- Your name is: Devon
50
- ```
51
+ ### `lita cmd list`
52
+
53
+ Query the configured directory for filenames and return the list
54
+
55
+ ### `lita cmd <file>`
51
56
 
52
- ### Group Control
57
+ Execute a file in the configured directory
53
58
 
54
- You can now control what groups have access to your Lita scripts!
55
59
 
56
- In your `scripts` dir make some more that match the name of your groups. Only users that are a part of those groups can see/execute those scripts.
60
+ ## Group Control
57
61
 
58
- #### Example
62
+ You can control what groups have access to your Lita scripts.
59
63
 
60
- - scripts dir:
61
- - Basic directory setup
64
+ In your `scripts` directory make a sub directory named after each of your
65
+ groups. Only users that belong to these groups can list and execute the
66
+ scripts inside them.
67
+
68
+ This is the basic directory structure
62
69
 
63
70
  ```
64
71
  scripts/
65
72
  |- devops/
66
- | `- secret
67
- |- hello
68
- `- name
73
+ | - secret_script
74
+ |- script1
75
+ |- script2
69
76
  ```
70
77
 
71
- - `lita cmd-help`
72
- - Help text will show you scripts that you have access to with a prefix
78
+ When you run `lita cmd list` you will only see scripts that you have access
79
+ to. For example:
73
80
 
74
81
  ```
75
- devops/secret
76
- hello
77
- name
78
- ```
82
+ me: lita cmd list
79
83
 
80
- - `lita cmd devops/secret`
81
- - Execute the command. Prefix required!
84
+ lita: devops/secret_script
85
+ script1
86
+ script2
82
87
 
83
- ```
84
- [stdout] I'm a secret!
85
- ```
88
+ me: lita cmd devops/secret_script
86
89
 
87
- A non-priviledged user will only see scripts without the prefix.
90
+ lita: Executing the secret script
91
+ ```
88
92
 
89
93
  ## Notes
90
94
 
91
- - Make sure that your files are executable
92
- - (`chmod +x FILE`)
93
- - Make sure that you've included the correct sha-bang
94
- - `#!/bin/bash`, `#!/usr/bin/env ruby`, etc...
95
+ - The user name of the calling user will be saved in an environment variable
96
+ called `LITA_USER`.
97
+ - Make sure that your files are executables (`chmod +x FILE`)
98
+ - Make sure that your files have the proper sheband (`#!/bin/bash`)
95
99
 
96
- ## Roadmap
100
+ ## Todo
97
101
 
98
102
  - [x] Include support for directory-based access control
99
103
  - [ ] Help text for individual commands
104
+ - [ ] Add tests
@@ -3,37 +3,29 @@ require 'open3'
3
3
  module Lita
4
4
  module Handlers
5
5
  class Cmd < Handler
6
-
7
- config :scripts_dir
8
-
9
- ### CMD-HELP ##############################################
10
-
11
- route(/^\s*cmd-help\s*$/, :cmd_help, command: true, help: {
12
- "cmd-help" => "get a list of scripts available for execution"
13
- })
14
-
15
- route(/^\s*test\s*/) do |resp|
16
- auth = Lita::Robot.new.auth
17
- resp.reply "true" if auth.groups_with_users[:devops].include? resp.user
18
- end
19
-
20
- def cmd_help(resp)
21
- list = get_script_list(resp, config)
22
-
23
- out = list.sort.join("\n")
24
- resp.reply_privately code_blockify(out)
6
+ on :connected, :create_routes
7
+ config :scripts_dir, required: true
8
+
9
+ config :output_format, default: "%s"
10
+ config :stdout_prefix, default: ""
11
+ config :stderr_prefix, default: "ERROR: "
12
+ config :command_prefix, default: "cmd "
13
+
14
+ def create_routes(payload)
15
+ self.class.route(/^\s*#{config.command_prefix}(\S+)\s*(.*)$/, :run_action, command: true, help: {
16
+ "#{config.command_prefix}ACTION" => "run the specified ACTION. use `#{robot.name} #{config.command_prefix}list` for a list of available actions."
17
+ })
25
18
  end
26
19
 
27
- ### CMD ###################################################
28
-
29
- route(/^\s*cmd\s+(\S*)\s*(.*)$/, :cmd, command: true, help: {
30
- "cmd SCRIPT" => "run the SCRIPT specified; use `lita cmd help` for a list"
31
- })
32
-
33
- def cmd(resp)
20
+ def run_action(resp)
34
21
  script = resp.matches[0][0]
35
22
  opts = resp.matches[0][1].split(" ")
36
23
 
24
+ # the script will be the robot name if command_prefix is empty
25
+ return if script =~ /@?#{robot.name}/i
26
+
27
+ return show_help(resp) if script == 'list'
28
+
37
29
  unless user_is_authorized(script, resp, config)
38
30
  resp.reply_privately "Unauthorized to run '#{script}'!"
39
31
  return
@@ -41,9 +33,13 @@ module Lita
41
33
 
42
34
  out = String.new
43
35
  err = String.new
44
- Open3.popen3("#{config.scripts_dir}/#{script}", *opts) do |i, o, e, wait_thread|
45
- o.each { |line| out << "[stdout] #{line}" }
46
- e.each { |line| err << "[stderr] #{line}" }
36
+
37
+ script_path = "#{config.scripts_dir}/#{script}"
38
+ env_vars = { 'LITA_USER' => resp.user.name }
39
+
40
+ Open3.popen3(env_vars, script_path, *opts) do |i, o, e, wait_thread|
41
+ o.each { |line| out << "#{config.stdout_prefix}#{line}" }
42
+ e.each { |line| err << "#{config.stderr_prefix}#{line}" }
47
43
  end
48
44
 
49
45
  if err != String.new
@@ -59,15 +55,21 @@ module Lita
59
55
  ascii_out = out.encode(Encoding.find('ASCII'), encoding_options)
60
56
 
61
57
  ascii_out.split("\n").each_slice(50) do |slice|
62
- resp.reply code_blockify(slice.join("\n"))
58
+ resp.reply code_format(slice.join("\n"))
63
59
  end
64
60
  end
65
61
 
66
- ### HELPERS ############################################
62
+ def show_help(resp)
63
+ list = get_script_list(resp, config)
64
+
65
+ out = list.sort.join("\n")
66
+ resp.reply_privately code_format(out)
67
+ end
67
68
 
68
69
  private
69
- def code_blockify(text)
70
- "```\n#{text}\n```"
70
+
71
+ def code_format(text)
72
+ config.output_format % text
71
73
  end
72
74
 
73
75
  def get_script_list(resp, config)
data/lita-cmd.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-cmd"
3
- spec.version = "0.2.0"
3
+ spec.version = "0.3.1"
4
4
  spec.authors = ["Devon Finninger"]
5
5
  spec.email = ["devon.finninger@peopleadmin.com"]
6
6
  spec.description = "Run commands from Lita"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-cmd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Devon Finninger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-12 00:00:00.000000000 Z
11
+ date: 2015-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -102,8 +102,9 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
- - ".ruby-version"
105
+ - CHANGELOG.md
106
106
  - Gemfile
107
+ - LICENSE
107
108
  - README.md
108
109
  - Rakefile
109
110
  - lib/lita-cmd.rb
@@ -134,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  version: '0'
135
136
  requirements: []
136
137
  rubyforge_project:
137
- rubygems_version: 2.4.3
138
+ rubygems_version: 2.4.8
138
139
  signing_key:
139
140
  specification_version: 4
140
141
  summary: Run commands from Lita
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- ruby-2.1.5@lita-cmd