Module: Microkit

Defined in:
lib/microkit.rb,
lib/microkit/item.rb,
lib/microkit/group.rb,
lib/microkit/config.rb,
lib/microkit/permit.rb,
lib/microkit/version.rb,
lib/microkit/microkit.rb,
lib/microkit/publisher.rb,
lib/microkit/config_item.rb,
lib/microkit/http_client.rb,
lib/microkit/feature_item.rb,
lib/microkit/network_controller.rb

Defined Under Namespace

Classes: Config, ConfigItem, Error, FeatureItem, Group, HttpClient, Item, Microkit, NetworkController, Permit, Publisher, Subscription

Constant Summary collapse

VERSION =
"0.1.12"

Class Method Summary collapse

Class Method Details

.clean_base64_padding(base64_string) ⇒ Object



64
65
66
# File 'lib/microkit/microkit.rb', line 64

def self.clean_base64_padding(base64_string)
  base64_string.end_with?("==") ? base64_string[0..-3] : base64_string
end

.decrypt(encrypted, key) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/microkit/microkit.rb', line 53

def self.decrypt (encrypted, key)
  cipher = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
  cipher.decrypt
  cipher.key = Base64.urlsafe_decode64(key)
  cipher.iv = Base64.urlsafe_decode64(encrypted)[0..15]

  # Start the decryption
  encrypted = Base64.urlsafe_decode64(encrypted)[16..-1]
  decrypted = cipher.update(encrypted) + cipher.final
  return decrypted
end

.initialize_kit(key, user = {}, options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/microkit/microkit.rb', line 4

def self.initialize_kit (key, user = {}, options = {}) 
      
  secret_size = 24
  sdk_key = key[0..key.length-secret_size-2]
  secret = key[-secret_size..-1]
  options["api_key"] = sdk_key
  options["user"] = user

  Config.instance.init(options)
  # res = Microkit.instance.network_controller.get_latest_data('init')
  # res = json.loads(res.decode('utf-8'))
  
  # Microkit.instance.config.set("key_vars_values", res["key_vars_values"])
  # Microkit.instance.config_kit = Group('config', Microkit.decrypt(res['config'], secret) if 'config' in res and res['config'] != '' else {})
  # Microkit.instance.features_kit = Group('features', res["features"] if 'features' in res and type(res["features"]) == dict  else {})
  res = NetworkController.instance.get_latest_data('init')
  res = JSON.parse(res)
  config = JSON.parse(self.decrypt(self.clean_base64_padding(res["config"]), secret))
  Config.instance.set("key_vars_values", res["key_vars_values"])
  Microkit.instance.instance_variable_set("@config_kit", Group.new("config", config))
  Microkit.instance.instance_variable_set("@features_kit", Group.new("features", res["features"]))
  Microkit.instance.instance_variable_set("@permissions_kit", Permit.new(Config.instance))
  Microkit.instance.class.module_eval { attr_accessor :config_kit}
  Microkit.instance.class.module_eval { attr_accessor :features_kit}
  Microkit.instance.class.module_eval { attr_accessor :permissions_kit}
  published = Proc.new do |current_val, prev_val|
    res = JSON.parse(current_val)
    config = JSON.parse(self.decrypt(self.clean_base64_padding(res["config"]), secret))
    Microkit.instance.config_kit.update(config)
    Microkit.instance.features_kit.update(res["features"])
  end
  Microkit.instance.subscription = NetworkController.instance.change.subscribe(published)
  if Config.instance.get("polling_on") then 
    NetworkController.instance.start_update_interval
  end
  return Microkit.instance
  
end

.kit_readyObject



43
44
45
46
47
48
49
# File 'lib/microkit/microkit.rb', line 43

def self.kit_ready 
  if  Microkit.instance.instance_variable_defined?(:@config_kit) then 
    Microkit.instance
  else
    nil
  end
end