lifx_dash 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +9 -1
- data/README.md +9 -0
- data/bin/lifx_dash +13 -9
- data/lib/lifx_dash/configuration.rb +50 -19
- data/lib/lifx_dash/version.rb +1 -1
- data/lifx_dash.gemspec +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2Q0MTdjYWZlZmM1MzQ0ZGE5MWY3YTJmMjM3NmVhNzdmNzZiZmZlMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWVhMDk4N2JhNGIwYmNmODg0YTlhYzU2NjczNWYzZmYzOWMxMzVlMg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDc3ZjhlYzhjNmExYmU5ZGEyNGM4OTE4MGZkMTMzYTBhMTZmMzEwMTE4ZjNj
|
10
|
+
MmY5MTFkNzBjN2Y3YjE4NzcyODEyMjdiMjUxY2I5ZDcxMzdmNjljNDA2Mjk4
|
11
|
+
MzY5ZDlkNTFkZDRjZDMxOGVhYTgyMDJkMDJlZDE3MGNhYjdlYjY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmZlZmQ5MDAwYjgwN2Q1MGU0MWFmODY5YTdiNTIxYmE1ODFjNTlhODlmMzM1
|
14
|
+
Y2Y2OGFiZWQ3MDEzNmE2YzBlYjQ4ZTE2ZDFlZGJiM2E1ZWM4YWM5ZDBhMjIw
|
15
|
+
MDdmMDhkYzU0ZDZjNTcxNDk3MjAyNzljZTBjZWYxYzc4ZmI2ZDc=
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,13 @@ project adheres to [Semantic Versioning][Semver].
|
|
7
7
|
|
8
8
|
* Validation of all command line flag values, iface/mac/token etc.
|
9
9
|
|
10
|
+
## [0.1.3][] (2 Jul 2016)
|
11
|
+
* Mentioning libpcap dependency
|
12
|
+
* Refactoring Configuration - added CONFIG const and fixed sudo home dir issue
|
13
|
+
|
14
|
+
## [0.1.2][] (2 Jul 2016)
|
15
|
+
* YANKED!
|
16
|
+
|
10
17
|
## [0.1.1][] (30 Jun 2016)
|
11
18
|
* Testing auto-releasing gem from Travis CI
|
12
19
|
|
@@ -15,7 +22,8 @@ project adheres to [Semantic Versioning][Semver].
|
|
15
22
|
* Includes dameonizing option for monitor command (writing to a log file)
|
16
23
|
* Built with gli command-suite gem
|
17
24
|
|
18
|
-
[Unreleased]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.
|
25
|
+
[Unreleased]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.3...HEAD
|
26
|
+
[0.1.3]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.1...v0.1.3
|
19
27
|
[0.1.1]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.0...v0.1.1
|
20
28
|
[0.1.0]: https://github.com/matthutchinson/lifx_dash/releases/tag/v0.1.0
|
21
29
|
[Semver]: http://semver.org
|
data/README.md
CHANGED
@@ -29,6 +29,15 @@ A `config` command also exists, allowing you to set default options for
|
|
29
29
|
will also need a wifi network and root access to sniff packets on your network
|
30
30
|
adaptor.
|
31
31
|
|
32
|
+
This gem uses [packet_fu](https://rubygems.org/gems/packetfu) which in turn
|
33
|
+
requires the [libpcap](http://www.tcpdump.org) library. This is probably already
|
34
|
+
available on your machine, if not download the [latest
|
35
|
+
release](http://www.tcpdump.org/#latest-release) or install with your package
|
36
|
+
manager e.g.:
|
37
|
+
|
38
|
+
sudo apt-get install libpcap0.8-dev # UNIX
|
39
|
+
brew install libpcap # homebrew on OSX
|
40
|
+
|
32
41
|
`lifx_dash` is distributed via [RubyGems](https://rubygems.org) and requires
|
33
42
|
[Ruby](https://www.ruby-lang.org) >= 2.0.0.
|
34
43
|
|
data/bin/lifx_dash
CHANGED
@@ -6,7 +6,7 @@ require "lifx_dash"
|
|
6
6
|
include GLI::App
|
7
7
|
|
8
8
|
LOGGER = Logger.new(STDOUT)
|
9
|
-
|
9
|
+
CONFIG = LifxDash::Configuration.new
|
10
10
|
|
11
11
|
program_desc "Toggle LIFX lights with an Amazon Dash button"
|
12
12
|
|
@@ -25,7 +25,11 @@ command :config do |c|
|
|
25
25
|
c.switch [:s, :show]
|
26
26
|
|
27
27
|
c.action do |_global_options, options, _args|
|
28
|
-
|
28
|
+
if options["show"]
|
29
|
+
CONFIG.show
|
30
|
+
else
|
31
|
+
CONFIG.configure
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -38,7 +42,7 @@ packets of their own when you press. Take care to choose the MAC address from
|
|
38
42
|
the ARP packet that occurs only once from a single MAC address."
|
39
43
|
command :snoop do |c|
|
40
44
|
c.desc "Network Interface"
|
41
|
-
c.default_value
|
45
|
+
c.default_value CONFIG["iface"] || "en0"
|
42
46
|
c.flag [:i, :iface]
|
43
47
|
|
44
48
|
c.action do |_global_options, options, _args|
|
@@ -61,30 +65,30 @@ overrride this location."
|
|
61
65
|
command :monitor do |c|
|
62
66
|
|
63
67
|
c.desc "Dash button MAC address"
|
64
|
-
c.default_value
|
68
|
+
c.default_value CONFIG["mac-address"]
|
65
69
|
c.flag [:m, :"mac-address"]
|
66
70
|
|
67
71
|
c.desc "LIFX HTTP API Token"
|
68
|
-
c.default_value
|
72
|
+
c.default_value CONFIG["token"]
|
69
73
|
c.flag [:t, :token]
|
70
74
|
|
71
75
|
c.desc "LIFX Bulb Selector"
|
72
|
-
c.default_value
|
76
|
+
c.default_value CONFIG["selector"] || "all"
|
73
77
|
c.flag [:s, :selector]
|
74
78
|
|
75
79
|
c.desc "Network Interface"
|
76
|
-
c.default_value
|
80
|
+
c.default_value CONFIG["iface"] || "en0"
|
77
81
|
c.flag [:i, :iface]
|
78
82
|
|
79
83
|
c.desc "Log file location (when running as a daemon)"
|
80
|
-
c.default_value
|
84
|
+
c.default_value CONFIG["log-file"] || LifxDash::Daemonizer::LOG_FILE
|
81
85
|
c.flag [:l, :"log-file"]
|
82
86
|
|
83
87
|
c.desc "Dameonize the monitor process"
|
84
88
|
c.switch [:d, :daemonize]
|
85
89
|
|
86
90
|
c.action do |_global_options, options, _args|
|
87
|
-
help_now!("a valid Dash button MAC address option (-m) is required: use `lifx_dash snoop #{options["iface"]}` to find it") unless options["mac-address"]
|
91
|
+
help_now!("a valid Dash button MAC address option (-m) is required: use `lifx_dash snoop -i #{options["iface"]}` to find it") unless options["mac-address"]
|
88
92
|
help_now!("a valid LIFX API Token option (-t) is required: get one from https://cloud.lifx.com/settings") unless options["token"]
|
89
93
|
|
90
94
|
if options["daemonize"]
|
@@ -3,8 +3,8 @@ require "yaml"
|
|
3
3
|
module LifxDash
|
4
4
|
class Configuration
|
5
5
|
|
6
|
-
|
7
|
-
OPTION_PROMPTS
|
6
|
+
CONFIG_FILE_NAME = ".lifx_dash.rc.yml"
|
7
|
+
OPTION_PROMPTS = {
|
8
8
|
"iface" => "Network interface identifier e.g. en0 (choose from ifconfig -l)",
|
9
9
|
"token" => "LIFX API token (get a free personal token at cloud.lifx.com)",
|
10
10
|
"mac-address" => "Dash button MAC address (use lifx_dash snoop to find it)",
|
@@ -12,26 +12,17 @@ module LifxDash
|
|
12
12
|
"log-file" => "Log file location (when running as a daemon)"
|
13
13
|
}
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
YAML.load_file(CONFIG_FILE)
|
18
|
-
else
|
19
|
-
{}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def run(show_config: false)
|
24
|
-
# decide to show config or start configuring
|
25
|
-
show_config ? show : configure
|
15
|
+
def [](key)
|
16
|
+
config_options[key]
|
26
17
|
end
|
27
18
|
|
28
19
|
def show
|
29
|
-
if File.exist?(
|
30
|
-
puts "Configuration file at #{
|
31
|
-
puts File.read(
|
20
|
+
if File.exist?(config_file)
|
21
|
+
puts "Configuration file at #{config_file} ...\n\n"
|
22
|
+
puts File.read(config_file)
|
32
23
|
puts "\nChange these options with `lifx_dash config`"
|
33
24
|
else
|
34
|
-
puts "No configuration file exists at #{
|
25
|
+
puts "No configuration file exists at #{config_file}"
|
35
26
|
end
|
36
27
|
end
|
37
28
|
|
@@ -42,10 +33,37 @@ module LifxDash
|
|
42
33
|
if user_options.values.all?(&:nil?)
|
43
34
|
puts "\nNo options set, configuration is unchanged"
|
44
35
|
else
|
45
|
-
File.open(
|
36
|
+
File.open(config_file, "w") do |file|
|
46
37
|
YAML::dump(user_options, file)
|
47
38
|
end
|
48
|
-
puts "\nConfiguration saved to #{
|
39
|
+
puts "\nConfiguration saved to #{config_file}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def config_file
|
46
|
+
@config_file ||= begin
|
47
|
+
home_dir = ENV["HOME"]
|
48
|
+
|
49
|
+
# when running as sudo on linux, use the sudo users' home dir
|
50
|
+
if platform == :linux &&
|
51
|
+
ENV["SUDO_USER"] &&
|
52
|
+
File.exist?("/home/#{ENV["SUDO_USER"]}")
|
53
|
+
home_dir = "/home/#{ENV["SUDO_USER"]}"
|
54
|
+
end
|
55
|
+
|
56
|
+
File.join(home_dir, CONFIG_FILE_NAME)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def config_options
|
61
|
+
@config_options ||= begin
|
62
|
+
if File.exist?(config_file)
|
63
|
+
YAML.load_file(config_file)
|
64
|
+
else
|
65
|
+
{}
|
66
|
+
end
|
49
67
|
end
|
50
68
|
end
|
51
69
|
|
@@ -56,6 +74,19 @@ module LifxDash
|
|
56
74
|
end
|
57
75
|
end
|
58
76
|
|
77
|
+
def platform
|
78
|
+
case RbConfig::CONFIG['host_os']
|
79
|
+
when /linux/
|
80
|
+
:linux
|
81
|
+
when /darwin/
|
82
|
+
:mac
|
83
|
+
when /(win|w)32/
|
84
|
+
:windows
|
85
|
+
else
|
86
|
+
:unknown
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
59
90
|
def parse_user_input(str)
|
60
91
|
# handle empty strings
|
61
92
|
if str.empty?
|
data/lib/lifx_dash/version.rb
CHANGED
data/lifx_dash.gemspec
CHANGED
@@ -43,6 +43,7 @@ Gem::Specification.new do |spec|
|
|
43
43
|
|
44
44
|
# non-gem dependecies
|
45
45
|
spec.required_ruby_version = ">= 2.0.0"
|
46
|
+
spec.requirements << 'libpcap'
|
46
47
|
spec.requirements << 'an Amazon Dash button'
|
47
48
|
spec.requirements << 'one or more LIFX bulbs'
|
48
49
|
spec.requirements << 'root access'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lifx_dash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Hutchinson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -229,6 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
229
|
- !ruby/object:Gem::Version
|
230
230
|
version: '0'
|
231
231
|
requirements:
|
232
|
+
- libpcap
|
232
233
|
- an Amazon Dash button
|
233
234
|
- one or more LIFX bulbs
|
234
235
|
- root access
|