modou 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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