factor 0.1.07 → 0.1.09
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cli/credential_task.rb +17 -14
- data/lib/cli/server_task.rb +6 -1
- data/lib/client/client.rb +46 -9
- data/lib/runtime/engine.rb +7 -5
- data/lib/runtime/message.rb +4 -2
- data/lib/runtime/message_bus.rb +2 -0
- metadata +2 -2
data/lib/cli/credential_task.rb
CHANGED
@@ -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 "
|
9
|
-
|
10
|
-
def
|
11
|
-
|
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 "
|
15
|
-
|
16
|
-
|
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
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
data/lib/cli/server_task.rb
CHANGED
@@ -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
|
-
|
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?
|
data/lib/client/client.rb
CHANGED
@@ -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
|
-
|
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(
|
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
|
-
|
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
|
100
|
-
rest_get("credentials"
|
136
|
+
def get_credentials()
|
137
|
+
rest_get("credentials")
|
101
138
|
end
|
102
139
|
|
103
|
-
def remove_credential(
|
104
|
-
rest_delete("credentials",{:
|
140
|
+
def remove_credential(service,name)
|
141
|
+
rest_delete("credentials",{:service=>service,:name=>name})
|
105
142
|
end
|
106
143
|
|
107
144
|
|
data/lib/runtime/engine.rb
CHANGED
@@ -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['
|
126
|
-
|
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
|
data/lib/runtime/message.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/runtime/message_bus.rb
CHANGED
@@ -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.
|
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-
|
12
|
+
date: 2013-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|