apiotics 0.2.6 → 0.2.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6919be7f896c869fdd2e20947c61afdf41dd12bc
4
- data.tar.gz: 152f2bc9fc9d0eff1b58100f2e48e1baeef650d2
3
+ metadata.gz: 1e25c98184861bff100688037a23340b6be5385e
4
+ data.tar.gz: f97ad7382054e1e67090a64f83aff5f12b7ac340
5
5
  SHA512:
6
- metadata.gz: cb533fdf78271769d7a762d7fed4dd9c1359410cf5978498710d54b2f1c1c501f7e4bf54269741fafe339414fae4087a091c68641ed4e5404b5aa211a9556ee1
7
- data.tar.gz: 7d973e60f7d1dfd218ccd72cb2211203d452d2969bccce44ea01884c413b01813676adfe89d9106218735826fe884b1c0f59161095a5415240305327e3a088e8
6
+ metadata.gz: 568dfad8b2116d196a085861cd3dfea958c57945482c6bb84b8f68024e3bc692df39d71fc7ba45166bd8aeebe2156fc17ce104ac48e3c10d0fb8e3adbc8f8a65
7
+ data.tar.gz: bce6b5fd058002e67bda0273c035b0794af6e712c9ddbb7a7a3d90418fc3627969045ab51456cf9e195be7a7f0b02c460f6594c930d0f78fae8c215cd8b25768
@@ -294,6 +294,174 @@ module Apiotics
294
294
  end
295
295
  end
296
296
 
297
+ def self.check_sd_card_scripts
298
+ status = nil
299
+ download_directory = Rails.root.join('lib', 'sd_card')
300
+ Dir.mkdir download_directory unless Dir.exist?(download_directory)
301
+ download_directory = Rails.root.join('lib', 'sd_card', 'downloads')
302
+ Dir.mkdir download_directory unless Dir.exist?(download_directory)
303
+ Dir.chdir download_directory
304
+ system = nil
305
+ if Hardware.mac == true
306
+ system = "mac"
307
+ elsif Hardware.linux == true
308
+ system = "linux"
309
+ end
310
+ downloaded = false
311
+ unless system == nil
312
+ if system == "mac"
313
+ if File.exist?("#{download_directory}/brand_image.mac.sh")
314
+ downloaded = true
315
+ end
316
+ elsif system == "linux"
317
+ if File.exist?("#{download_directory}/brand_image.sh")
318
+ downloaded = true
319
+ end
320
+ end
321
+ if downloaded == false
322
+ scripts = Apiotics::Portal.sd_scripts(system)
323
+ File.write("#{download_directory}/sd_scripts.tgz")
324
+ `tar xvzf #{download_directory}/sd_scripts.tgz -C #{download_directory}`
325
+ `rm #{download_directory}/sd_scripts.tgz`
326
+ end
327
+ if system == "mac"
328
+ if File.exist?("#{download_directory}/brand_image.mac.sh")
329
+ status = download_directory
330
+ end
331
+ elsif system == "linux"
332
+ if File.exist?("#{download_directory}/brand_image.sh")
333
+ status = download_directory
334
+ end
335
+ end
336
+ end
337
+ return status
338
+ end
339
+
340
+ def self.get_sd_image(download_directory, worker_name)
341
+ Dir.chdir download_directory
342
+ image_path = "#{download_directory}/#{worker_name}.img.gz"
343
+ unless File.exist?(image_path)
344
+ Apiotics::Portal.get_sd_image(download_directory, worker_name)
345
+ #zip_path = "#{download_directory}/#{worker_name}.img.gz"
346
+ #`gunzip -c #{zip_path} > #{image_path}`
347
+ #`rm #{zip_path}`
348
+ end
349
+ return image_path
350
+ end
351
+
352
+ def self.sd_config_file(worker_name, name, download_directory)
353
+ worker_directory = download_directory + "/#{worker_name.downcase}"
354
+ Dir.mkdir worker_directory unless Dir.exist?(worker_directory)
355
+ config_file_path = "#{worker_directory}/#{worker_name.downcase}.json"
356
+ if File.exist?(config_file_path)
357
+ config = File.read(config_file_path)
358
+ config = JSON.parse(config)
359
+ else
360
+ config = {}
361
+ end
362
+ config["port"] = "8883"
363
+ config["download"] = true
364
+ config["public_key"] = Apiotics.configuration.public_key
365
+ config["private_key"] = Apiotics.configuration.private_key
366
+ if name == nil || name == ""
367
+ config["name"] = ""
368
+ else
369
+ config["name"] = name.to_s
370
+ end
371
+ config["portal"] = Apiotics.configuration.portal
372
+ config["message_validation"] = false
373
+ config["local_server"] = "localhost"
374
+ config["local_port"] = "8001"
375
+ config["containers"] = false
376
+ config["driver_logging"] = true
377
+ File.write(config_file_path, config.to_json)
378
+ config_file_path
379
+ end
380
+
381
+ def self.brand_sd_image(download_directory, image_path, wifi_settings, config_file_path)
382
+ status = false
383
+ branding_script_path == nil
384
+ if Hardware.mac == true
385
+ branding_script_path = "#{download_directory}/brand_image.mac.sh"
386
+ elsif Hardware.linux == true
387
+ branding_script_path = "#{download_directory}/brand_image.sh"
388
+ end
389
+ if branding_script_path != nil
390
+ `#{branding_script_path} #{image_path} #{wifi_settings["ssid"]} #{wifi_settings["password"]} #{config_file_path} dhcp`
391
+ status = true
392
+ else
393
+ puts "Unrecognized system architecture, exiting."
394
+ end
395
+ status
396
+ end
397
+
398
+ def self.find_smallest_disk
399
+ small_disk_size = 99999999999999999999
400
+ small_disk = "no_disk"
401
+ disks = {}
402
+ output = `df -k`
403
+ lines = output.split("\n")
404
+ i = 0
405
+ lines.each do |line|
406
+ lines[i] = line.split(" ")
407
+ i += 1
408
+ end
409
+ gigabyte_scaling = 1024 * 1024
410
+ lines.each do |line|
411
+ length = line.count
412
+ unless line[length - 1] == "/"
413
+ disks[line[0]] = line[1].to_i / gigabyte_scaling
414
+ end
415
+ end
416
+ disks.each do |disk, size|
417
+ if size < small_disk_size && size > 4 && disk[0..3] == "/dev"
418
+ small_disk_size = size
419
+ small_disk = disk
420
+ end
421
+ end
422
+ return small_disk
423
+ end
424
+ end
425
+
426
+ def self.burn_sd_image(download_directory, image_path, disk)
427
+ puts "Burning #{image_path} to #{disk}..."
428
+ if Hardware.mac == true
429
+ execute_path = download_directory + "/burn_image_to_disk.mac.sh"
430
+ elsif Hardware.linux == true
431
+ execute_path = download_directory + "/burn_image_to_disk.sh"
432
+ else
433
+ execute_path = nil
434
+ end
435
+ if execute_path == nil
436
+ puts "This computer is not running a recognized OS. Exiting."
437
+ else
438
+ `#{execute_path} #{image_path} #{disk}`
439
+ end
440
+ end
441
+
442
+ def self.sd_card(worker_name, name, config)
443
+ download_directory = self.check_sd_card_scripts
444
+ if download_directory != nil
445
+ image_path = Hardware.get_sd_image(download_directory, worker_name)
446
+ wifi_settings = Hardware.fetch_wifi
447
+ if wifi_settings != nil
448
+ config_file_path = Hardware.sd_config_file(worker_name, name, download_directory)
449
+ if Hardware.brand_sd_image(download_directory, image_path, wifi_settings, config_file_path)
450
+ disk = Hardware.find_smallest_disk
451
+ if disk != "no_disk"
452
+ Hardware.burn_sd_image(download_directory, image_path, disk)
453
+ else
454
+ puts "No plausible SD card disk found. Please insert an SD card into your computer. Exiting."
455
+ end
456
+ end
457
+ else
458
+ puts "No WiFi settings found. Please run rake firmware:wifi[ssid,password,security_mode] to set your default wifi settings"
459
+ end
460
+ else
461
+ puts "SD card installation scripts not available. Exiting."
462
+ end
463
+ end
464
+
297
465
  def self.install(worker_name, name)
298
466
  config = Apiotics::Portal.openocd_worker_config(worker_name)
299
467
  config = JSON.parse(config)
@@ -301,6 +469,8 @@ module Apiotics
301
469
  Hardware.openocd(worker_name, name, config)
302
470
  elsif config["installer"] == "Uniflash 4.3.0"
303
471
  Hardware.uniflash(worker_name, name, config)
472
+ elsif config["installer"] == "SD Card"
473
+ Hardware.sd_card(worker_name, name, config)
304
474
  else
305
475
  puts "Unknown installer for #{worker_name}. Please check the installer settings for the #{worker_name} device on the Apiotics portal.\n"
306
476
  end
@@ -331,14 +501,29 @@ module Apiotics
331
501
 
332
502
  encrypted_wifi_config = args.to_json.apiotics_encrypt(pwd)
333
503
 
334
- download_directory = Rails.root.join('lib', 'uniflash')
335
- Dir.mkdir download_directory unless Dir.exist?(download_directory)
336
- download_directory = Rails.root.join('lib', 'uniflash', 'downloads')
504
+ download_directory = Rails.root.join('lib', 'wifi')
337
505
  Dir.mkdir download_directory unless Dir.exist?(download_directory)
338
506
  Dir.chdir download_directory
339
- path = Rails.root.join('lib', 'uniflash', 'downloads', 'wifi_settings')
507
+ path = Rails.root.join('lib', 'wifi', 'wifi_settings')
340
508
  File.write(path, encrypted_wifi_config)
341
509
  end
342
510
 
511
+ def self.fetch_wifi
512
+ return_hash = nil
513
+ download_directory = Rails.root.join('lib', 'wifi')
514
+ Dir.mkdir download_directory unless Dir.exist?(download_directory)
515
+ Dir.chdir download_directory
516
+ path = Rails.root.join('lib', 'wifi', 'wifi_settings')
517
+ if File.exist?(path)
518
+ pwd = ApioticsSetting.find_by(key: "wifi_key")
519
+ if pwd != nil
520
+ pwd = pwd.value
521
+ encrypted_settings = File.read(path)
522
+ return_hash = encrypted_settings.apiotics_decrypt(pwd)
523
+ end
524
+ end
525
+ return_hash
526
+ end
527
+
343
528
  end
344
529
  end
@@ -250,6 +250,10 @@ module Apiotics
250
250
  response = HTTParty.post("#{Apiotics.configuration.portal}api/openocd", :query => {:public_key => Apiotics.configuration.public_key, :private_key => Apiotics.configuration.private_key, :system => system}).body
251
251
  end
252
252
 
253
+ def self.sd_scripts(system)
254
+ response = HTTParty.post("#{Apiotics.configuration.portal}api/sd_scripts", :query => {:public_key => Apiotics.configuration.public_key, :private_key => Apiotics.configuration.private_key, :system => system}).body
255
+ end
256
+
253
257
  def self.openocd_worker_config(worker_name)
254
258
  response = HTTParty.post("#{Apiotics.configuration.portal}api/openocd_details", :query => {:public_key => Apiotics.configuration.public_key, :private_key => Apiotics.configuration.private_key, :worker => worker_name}).body
255
259
  end
@@ -262,6 +266,18 @@ module Apiotics
262
266
  }
263
267
  end
264
268
 
269
+ def self.get_sd_image(download_directory, worker_name)
270
+ filename = "#{download_directory}/#{worker_name}.img.gz"
271
+ File.open(filename, "w") do |file|
272
+ puts "Downloading image.."
273
+ response = HTTParty.post("#{Apiotics.configuration.portal}api/download", :query => {:public_key => Apiotics.configuration.public_key, :private_key => Apiotics.configuration.private_key, :worker => worker_name}, stream_body: true) do |fragment|
274
+ print "."
275
+ file.write(fragment)
276
+ end
277
+ end
278
+ File.unlink(filename)
279
+ end
280
+
265
281
  def self.register_client
266
282
  response = HTTParty.post("#{Apiotics.configuration.portal}api/register_client", :query => {:public_key => Apiotics.configuration.public_key, :private_key => Apiotics.configuration.private_key}).body
267
283
  hash = JSON.parse(response)
@@ -1,3 +1,3 @@
1
1
  module Apiotics
2
- VERSION = '0.2.6'
2
+ VERSION = '0.2.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiotics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - MicroArx Corporation
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-18 00:00:00.000000000 Z
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails