factor 0.1.07 → 0.1.09

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.
@@ -4,24 +4,27 @@ require 'cli/command'
4
4
  module Factor
5
5
  module CLI
6
6
  class CredentialTask < Command
7
+
7
8
 
8
- desc "list [KEY]", "list all the credentials"
9
- #method_option :key, :alias=>"-k", :type=>:string, :desc=>"key reference"
10
- def list(key="")
11
- puts @client.get_credential(key)["value"]
9
+ desc "set SERVICE NAME VALUE", "add a key and value for the credential"
10
+ method_option :key, :type=>:string, :desc=>"File reference containing the symmetric key for encryption"
11
+ def set(service,name,value)
12
+ securet=nil
13
+ if options[:key]
14
+ secret=File.read(options[:key])
15
+ end
16
+ puts @client.set_credential(service,name,value,secret)
12
17
  end
13
-
14
- desc "set KEY VALUE", "add a key and value for the credential"
15
- #method_option :key, :alias=>"-k", :type=>:string, :desc=>"key reference"
16
- #method_option :value, :alias=>"-v", :type=>:string, :desc=>"values"
17
- def set(key,value)
18
- puts @client.set_credential(key,value)
18
+
19
+ desc "list", "get all of the credential"
20
+ def list()
21
+ puts @client.get_credentials()
19
22
  end
20
23
 
21
- # desc "remove KEY", "remove a value from the credentials bag"
22
- # def remove(key)
23
- # puts @client.remove_credential(key)
24
- # end
24
+ desc "remove SERVICE NAME", "remove a value from the credentials bag"
25
+ def remove(service,name)
26
+ puts @client.remove_credential(service,name)
27
+ end
25
28
 
26
29
  end
27
30
  end
@@ -8,6 +8,7 @@ module Factor
8
8
  method_option :tags, :alias=>"-t", :type=>:hash, :desc=>"Optional tags to identify from workflow"
9
9
  method_option :channels, :type=>:array, :desc=>"Optional channel ruby file list for development"
10
10
  method_option :verbose, :type=>:boolean, :desc=>"Display everything"
11
+ method_option :key, :type=>:string, :desc=>"File reference containing the symmetric key for encryption"
11
12
  def start
12
13
  engine = Factor::Runtime::Engine.new(get_config[:email],get_config[:token])
13
14
 
@@ -40,7 +41,11 @@ module Factor
40
41
  say "loading workflows complete" if options.verbose?
41
42
 
42
43
  say "loading credentials from server" if options.verbose?
43
- engine = @client.load_credentials(engine) do |message|
44
+ securet=nil
45
+ if options[:key]
46
+ secret=File.read(options[:key])
47
+ end
48
+ engine = @client.load_credentials(engine,secret) do |message|
44
49
  say " #{message}" if options.verbose?
45
50
  end
46
51
  say "loading credentials complete" if options.verbose?
@@ -4,6 +4,10 @@ require 'zip'
4
4
  require 'zip/zipfilesystem'
5
5
  require 'zip/zip'
6
6
  require 'open-uri'
7
+ require 'digest/sha2'
8
+ require 'openssl'
9
+ require 'base64'
10
+
7
11
 
8
12
  module Factor
9
13
  module Client
@@ -40,11 +44,30 @@ module Factor
40
44
  engine
41
45
  end
42
46
 
43
- def load_credentials(engine,&code)
47
+ def load_credentials(engine,secret=nil,&code)
44
48
  code.call("downloading credential list")
45
- credentials = rest_get("credentials")
49
+ credentials = rest_get("credentials")["value"]
46
50
  code.call("loading credentials")
47
- engine.load_credentials(credentials["value"])
51
+
52
+ if secret
53
+ code.call("decrypting credentials")
54
+ decrypter = OpenSSL::Cipher.new("AES-256-CFB")
55
+ sha256= Digest::SHA2.new(256)
56
+ decrypter.key=Base64.encode64(sha256.digest(secret))
57
+ decrypter.decrypt
58
+ credentials.each do |service,creds|
59
+ creds.each do |credential,value|
60
+ if value["encrypted"]
61
+ decrypted = decrypter.update(Base64.decode64(value["value"])) + decrypter.final
62
+ credentials[service][credential]["value"]=decrypted
63
+ credentials[service][credential]["encrypted"]=false
64
+ end
65
+ end
66
+ end
67
+ code.call("decrypting credentials complete")
68
+ end
69
+
70
+ engine.load_credentials(credentials)
48
71
 
49
72
  engine
50
73
  end
@@ -91,17 +114,31 @@ module Factor
91
114
  end
92
115
 
93
116
 
94
- def set_credential(key,value)
117
+ def set_credential(service,name,value,secret=nil)
95
118
  # this is a PUT not POST because it is technically editing, not creating a new one
96
- rest_put("credentials",{:key=>key,:value=>value})
119
+ credential = {:service=>service,:name=>name,:value=>value}
120
+
121
+ if secret
122
+ payload=value
123
+ sha256= Digest::SHA2.new(256)
124
+ encrypter = OpenSSL::Cipher.new("AES-256-CFB")
125
+ encrypter.encrypt
126
+ encrypter.key=Base64.encode64(sha256.digest(secret))
127
+
128
+ encrypted = Base64.encode64(encrypter.update(value) + encrypter.final)
129
+ credential[:value]=encrypted
130
+ credential[:encrypted]=true
131
+ end
132
+
133
+ rest_post("credentials",credential)
97
134
  end
98
135
 
99
- def get_credential(key="")
100
- rest_get("credentials",{:key=>key})
136
+ def get_credentials()
137
+ rest_get("credentials")
101
138
  end
102
139
 
103
- def remove_credential(key="")
104
- rest_delete("credentials",{:key=>key})
140
+ def remove_credential(service,name)
141
+ rest_delete("credentials",{:service=>service,:name=>name})
105
142
  end
106
143
 
107
144
 
@@ -37,7 +37,7 @@ module Factor
37
37
  @channel_definitions << definition
38
38
  end
39
39
 
40
- def load_credentials credentials
40
+ def load_credentials credentials,secret=nil
41
41
  @credentials["credentials"] = credentials
42
42
  end
43
43
 
@@ -109,7 +109,7 @@ module Factor
109
109
  def call_channel_method(channel_name,action_name,params)
110
110
  channel_module_name = get_channel_module(channel_name)
111
111
  channel_module = @channel_modules[channel_module_name]
112
- action_class = get_action_class(action_name)
112
+ action_class = get_action_class(channel_name,action_name)
113
113
  command = channel_module.const_get(action_class)
114
114
  command.new.do_work(params)
115
115
  end
@@ -120,10 +120,12 @@ module Factor
120
120
  @channel_definitions.select { |channel_definition| channel_definition['name']==channel_name }.first['module_name']
121
121
  end
122
122
 
123
- def get_action_class(action_name)
123
+ def get_action_class(channel_name,action_name)
124
124
  @channel_definitions.each do |channel_definition|
125
- channel_definition['actions'].each do |action|
126
- return action["class_name"] if action['name']==action_name
125
+ if channel_definition['name']==channel_name
126
+ channel_definition['actions'].each do |action|
127
+ return action["class_name"] if action['name']==action_name
128
+ end
127
129
  end
128
130
  end
129
131
  end
@@ -1,5 +1,5 @@
1
1
  require 'rubygems'
2
- require 'json'
2
+ require 'json/ext'
3
3
 
4
4
  module Factor
5
5
  module Runtime
@@ -44,7 +44,9 @@ module Factor
44
44
  end
45
45
 
46
46
  def payload
47
- {"body"=>@body, "workflow_instance_id"=>@workflow_instance_id, "activity_instance_id"=>@activity_instance_id, "last_activity_instance_id"=>@last_activity_instance_id}.to_json
47
+ JSON.generator = JSON::Ext::Generator
48
+ obj = {"body"=>@body, "workflow_instance_id"=>@workflow_instance_id, "activity_instance_id"=>@activity_instance_id, "last_activity_instance_id"=>@last_activity_instance_id}
49
+ JSON.generate(obj)
48
50
  end
49
51
 
50
52
  def from_queue routing_key, payload
@@ -38,11 +38,13 @@ module Factor
38
38
  @queue.subscribe do |headers,payload|
39
39
  message = Message.new
40
40
  message.from_queue headers.routing_key, payload
41
+ puts "[Received Message (#{message.route})] #{message.body.inspect}"
41
42
  code.call(message)
42
43
  end
43
44
  end
44
45
 
45
46
  def send(message,close=false)
47
+ puts "[Sending Message (#{message.route})] #{message.body.inspect}"
46
48
  @exchange.publish(message.payload,:routing_key => message.route)
47
49
  EM.add_timer(1, Proc.new { close}) if close
48
50
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.07
4
+ version: 0.1.09
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-17 00:00:00.000000000 Z
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor