factor 0.1.07 → 0.1.09

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