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.
- 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
|