modou 0.0.2 → 0.0.3

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/Guardfile +17 -0
  4. data/bin/modou +129 -3
  5. data/lib/modou/version.rb +1 -1
  6. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9426d8cf6038c1c9ccfb4b21d2aefaa28b5c5f91
4
- data.tar.gz: 8a39edb4bd2508b1b122a3a67702e8b033d0c5ba
3
+ metadata.gz: 43dd15681602e57505a9fb26c41a55f306f34a74
4
+ data.tar.gz: 92b3f4df2630f03bc3d496dee71519017996b4a1
5
5
  SHA512:
6
- metadata.gz: 02487019063554e3e900b11859d1a6fe8c0070597538e14712348c524222f0a4170f0a2d9919c91a89d54c158cc25dee640f1305e1fefc2a4b6ed85c2e8bc10e
7
- data.tar.gz: 337bb64db25038d81c5402a0bcf7c0de7853b03287b7850313855a34826ae05dace1b0fe0beb5f39be18b7565a18a915b5821d713a5efd4173ff0c759f6bfd44
6
+ metadata.gz: 1e8f72c23fe9659607a00f60d31137cd6bbfd4736bf5533e65f8a95de8b5d4c7079999e34443693cc21bf42ae0fa393522ca10a880b3eb355ba6964e07162ec2
7
+ data.tar.gz: 5cdd9f7204b361e1d2ae92aad118922f56cc3f563535f655a812d7d03b809e2ad4913bf57d9158f26d7cec9c748e1aab0c101a9972f06021fb12ba1867dcb66c
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in modou.gemspec
4
3
  gemspec
4
+
5
+ group :development, :test do
6
+ gem 'guard'
7
+ gem 'guard-rspec'
8
+ end
@@ -0,0 +1,17 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ # Note: The cmd option is now required due to the increasing number of ways
5
+ # rspec may be run, below are examples of the most common uses.
6
+ # * bundler: 'bundle exec rspec'
7
+ # * bundler binstubs: 'bin/rspec'
8
+ # * spring: 'bin/rsspec' (This will use spring if running and you have
9
+ # installed the spring binstubs per the docs)
10
+ # * zeus: 'zeus rspec' (requires the server to be started separetly)
11
+ # * 'just' rspec: 'rspec'
12
+ guard :rspec, cmd: 'bundle exec rspec' do
13
+ watch(%r{^spec/.+_spec\.rb$})
14
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
15
+ watch('spec/spec_helper.rb') { "spec" }
16
+ end
17
+
data/bin/modou CHANGED
@@ -36,6 +36,8 @@ def save_config(config)
36
36
  end
37
37
 
38
38
  def host
39
+ return ENV['MODOU_HOST'] if ENV['MODOU_HOST']
40
+
39
41
  load_config[get_ssid]['host'] rescue '192.168.18.1'
40
42
  end
41
43
 
@@ -88,9 +90,9 @@ def sign_in
88
90
  require "json"
89
91
  result = post('/api/auth/login', { body: JSON({ "password" => password }) })
90
92
 
91
- cookie = result.headers['Set-Cookie']
93
+ $cookie = result.headers['Set-Cookie']
92
94
 
93
- $auth = { headers: { 'Cookie' => cookie }, timeout: 999 }
95
+ $auth = { headers: { 'Cookie' => $cookie }, timeout: 999 }
94
96
  end
95
97
 
96
98
  def signin_required!
@@ -179,6 +181,20 @@ def print_help
179
181
  puts 'modou devices whitelisted'
180
182
  puts 'modou devices blacklisted'
181
183
  puts 'modou devices graylisted'
184
+
185
+ puts
186
+ puts "========== applications =========="
187
+ puts "modou apps installed"
188
+ # puts "modou apps info APP_ID"
189
+ # puts "modou apps install APP_ID"
190
+ # puts "modou apps install_custom"
191
+
192
+ puts
193
+ puts "========== app store =========="
194
+ puts "modou store list_apps"
195
+ puts "modou store info APP_NAME"
196
+ puts "modou store download APP_NAME"
197
+ puts "modou store install APP_NAME"
182
198
  end
183
199
 
184
200
  def print_version_info
@@ -428,6 +444,112 @@ def devices_control(command)
428
444
  end
429
445
  end
430
446
 
447
+ def apps_control(command)
448
+ signin_required!
449
+
450
+ case command
451
+ when 'installed'
452
+ response = get('/api/plugin/installed_plugins')
453
+
454
+ if response['plugins'].empty?
455
+ puts 'no apps installed.'
456
+ else
457
+ response['plugins'].each do |app|
458
+ table = table_from_response(app)
459
+ puts table
460
+ end
461
+ end
462
+ end
463
+ end
464
+
465
+ ###############################
466
+ # app store
467
+ ###############################
468
+
469
+ def app_get(path)
470
+ store_endpoint = 'http://appstore.ly.md'
471
+ require "httparty"
472
+
473
+ @store_response = HTTParty.get(store_endpoint + path) unless @store_response
474
+
475
+ @store_response
476
+ end
477
+
478
+ def app_name
479
+ ARGV[2]
480
+ end
481
+
482
+ def app_info
483
+ app_get('/list').select { |app| app['name'] == app_name }.first if app_name
484
+ end
485
+
486
+ def app_filename
487
+ "#{app_name}-#{app_info['version']}.mpk" if app_info
488
+ end
489
+
490
+ def app_valid_file?(filename, size, md5_sum)
491
+ full_path = File.expand_path("../../tmp/#{filename}", __FILE__)
492
+
493
+ if File.size(full_path) != size.to_i
494
+ puts "file size mismatch"
495
+ false
496
+ elsif Digest::MD5.file(full_path).hexdigest != md5_sum
497
+ puts "incorrect md5 check sum"
498
+ false
499
+ else
500
+ true
501
+ end
502
+ end
503
+
504
+ def app_download_file!
505
+ `wget #{app_info['url']} -O tmp/#{app_filename}`
506
+ end
507
+
508
+ def store_control(command)
509
+ case command
510
+ when 'list_apps'
511
+ Hash.new.tap do |data|
512
+ app_get('/list').each { |app| data[app['name']] = app['description'] }
513
+
514
+ table = table_from_response(data)
515
+
516
+ puts table
517
+ end
518
+ when 'info'
519
+ if app_info
520
+ table = table_from_response(app_info)
521
+
522
+ puts table
523
+ else
524
+ puts "there is no app named '#{app_name}'"
525
+ end
526
+ when 'download'
527
+ if app_info
528
+ app_download_file!
529
+ else
530
+ puts "there is no app named '#{app_name}'"
531
+ end
532
+ when 'install'
533
+ signin_required!
534
+
535
+ if app_info
536
+ if app_valid_file?(app_filename, app_info['size'], app_info['md5_sum'])
537
+ puts "file already downloaded..."
538
+ else
539
+ app_download_file!
540
+ end
541
+
542
+ cli_command = %{curl -b "#{$cookie}" -F name=#{app_info['name']} -F size=#{app_info['size']} -F file=@./tmp/#{app_filename} http://#{host}/api/plugin/install_custom}
543
+
544
+ `#{cli_command}`
545
+ else
546
+ puts "there is no app named '#{app_name}'"
547
+ end
548
+ else
549
+ puts "unknown command"
550
+ end
551
+ end
552
+
431
553
  ###############################
432
554
  # firmware upgrade
433
555
  ###############################
@@ -555,7 +677,7 @@ end
555
677
  if ARGV.count == 0
556
678
  print_help
557
679
  else
558
- if password.nil?
680
+ if host.nil?
559
681
  prompt_for_config
560
682
  end
561
683
 
@@ -602,6 +724,10 @@ else
602
724
  security_control(ARGV[1])
603
725
  when 'firmware'
604
726
  firmware_control(ARGV[1])
727
+ when 'apps'
728
+ apps_control(ARGV[1])
729
+ when 'store'
730
+ store_control(ARGV[1])
605
731
  else
606
732
  puts "unrecognized command"
607
733
  puts
@@ -1,3 +1,3 @@
1
1
  module Modou
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modou
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Forrest Ye
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-24 00:00:00.000000000 Z
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -132,6 +132,7 @@ extra_rdoc_files: []
132
132
  files:
133
133
  - .gitignore
134
134
  - Gemfile
135
+ - Guardfile
135
136
  - LICENSE.txt
136
137
  - README.md
137
138
  - Rakefile
@@ -158,6 +159,7 @@ files:
158
159
  - spec/fixtures/wan/is_internet_available.json
159
160
  - spec/fixtures/wifi/get_config.json
160
161
  - spec/spec_helper.rb
162
+ - tmp/.gitkeep
161
163
  homepage: ''
162
164
  licenses:
163
165
  - MIT