jerakia 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6df8996d25559af0bcf6ad225192a388220ef943
4
- data.tar.gz: 74b262c70e3524dea135723ff97d662f0cba4834
3
+ metadata.gz: ea3f9b99ad3814fc4868f19d64d8f47adf16e940
4
+ data.tar.gz: 0ff66c99cdff190f8047dfce865cc01e749efa19
5
5
  SHA512:
6
- metadata.gz: 580bf363db9ee210ad2f78a9b517d4e47ebbfdc24f5141d6d4cdae96eab10fcc8625a0f494c54cad693bb932dfd7b8773796d842af5fb4c71f6a3125a803a631
7
- data.tar.gz: ed54de2458ad940e5cc581799d17d1b2391af6baa783670f51245f85c1049cecf78dd9446accf1625094f1e778c8f638736e19217255146f0fb7f1bb6286d926
6
+ metadata.gz: 1e291ef9b8af754741a04088d6782d1710d2194da4aedc73ddd6a447078e06ad119afca6c338080683300aa2e89be8adea381dba91468790acbcb5ccc97977d9
7
+ data.tar.gz: 1ffc73296862825e61e8e6eb5ec6c46d6b31b27ce9d47150783879bf4e15762692b9b42fbff07401dd4e15c87aefbb5d84c8c3e53a7bf997ad29af01292e41ff
data/bin/jerakia CHANGED
@@ -4,5 +4,9 @@ lib = File.expand_path('../../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  require 'jerakia/cli'
7
-
8
- Jerakia::CLI.start(ARGV)
7
+ begin
8
+ Jerakia::CLI.start(ARGV)
9
+ rescue Jerakia::Error => e
10
+ STDERR.puts "Error(#{e.class}): #{e.message}"
11
+ exit 1
12
+ end
data/lib/jerakia/cli.rb CHANGED
@@ -16,7 +16,6 @@ class Jerakia
16
16
  include Jerakia::CLI::Secret
17
17
  include Jerakia::CLI::Config
18
18
 
19
-
20
19
  desc 'version', 'Version information'
21
20
  def version
22
21
  puts Jerakia::VERSION
data/lib/jerakia/log.rb CHANGED
@@ -3,8 +3,9 @@ class Jerakia::Log < Jerakia
3
3
  def initialize(level = :info, file = '/var/log/jerakia.log')
4
4
  begin
5
5
  @@logger = Logger.new(file)
6
- rescue Errno::EACCES => e
7
- raise Jerakia::Error, "Error opening log file, #{e.message}"
6
+ rescue Errno::EACCES, Errno::ENOENT => e
7
+ @@logger = Logger.new(STDOUT)
8
+ info("Failed to open logfile: #{e.message}, logs will be directed to STDOUT")
8
9
  end
9
10
 
10
11
  @@level = level
@@ -26,8 +26,12 @@ class Jerakia
26
26
  property :last_seen, DateTime, :default => DateTime.now
27
27
  end
28
28
 
29
- DataMapper.finalize
30
- DataMapper.auto_upgrade!
29
+ begin
30
+ DataMapper.finalize
31
+ DataMapper.auto_upgrade!
32
+ rescue DataObjects::ConnectionError => e
33
+ raise Jerakia::Error, "Unable to open database file in #{Jerakia.config[:databasedir]}: #{e.message}"
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -1,8 +1,9 @@
1
1
  require 'sinatra'
2
2
  require 'jerakia'
3
3
  require 'jerakia/server/auth'
4
- require 'json'
5
4
  require 'jerakia/scope/server'
5
+ require 'json'
6
+ require 'msgpack'
6
7
 
7
8
  class Jerakia
8
9
  class Server
@@ -44,20 +45,44 @@ class Jerakia
44
45
  @authorized_tokens[token] = Time.now
45
46
  end
46
47
 
48
+ def encode_result(data)
49
+ case @content_type
50
+ when :json
51
+ return data.to_json
52
+ when :msgpack
53
+ return data.to_msgpack
54
+ end
55
+ end
56
+
57
+ def determine_content_type!
58
+ if not env.key?('CONTENT_TYPE') or env['CONTENT_TYPE'] == "application/json"
59
+ content_type 'application/json'
60
+ @content_type = :json
61
+ elsif env['CONTENT_TYPE'] == "application/x-msgpack"
62
+ content_type 'application/x-msgpack'
63
+ @content_type = :msgpack
64
+ else
65
+ wrong_media_type("Content type #{env['CONTENT_TYPE']} not supported", 415)
66
+ end
67
+ end
68
+
47
69
  before do
48
70
  authenticate!
49
- content_type 'application/json'
71
+ determine_content_type!
50
72
  end
51
73
 
52
74
  get '/' do
53
75
  auth_denied
54
76
  end
55
77
 
78
+ def wrong_media_type(message, status_code=415)
79
+ halt(status_code, {'Content-Type' => 'text/plain'}, message)
80
+ end
81
+
56
82
  def request_failed(message, status_code=501)
57
- halt(status_code, {
58
- :status => 'failed',
59
- :message => message,
60
- }.to_json)
83
+ halt(status_code,
84
+ encode_result({ :status => 'failed',
85
+ :message => message }))
61
86
  end
62
87
 
63
88
  def mandatory_params(mandatory, params)
@@ -98,31 +123,27 @@ class Jerakia
98
123
  rescue Jerakia::Error => e
99
124
  request_failed(e.message, 501)
100
125
  end
101
- {
102
- :status => 'ok',
103
- :payload => answer.payload
104
- }.to_json
126
+ encode_result({ :status => 'ok',
127
+ :payload => answer.payload})
105
128
  end
106
129
 
107
130
  get '/v1/scope/:realm/:identifier' do
108
131
  resource = Jerakia::Scope::Server.find(params['realm'], params['identifier'])
109
132
  if resource.nil?
110
- halt(404, { :status => 'failed', :message => "No scope data found" }.to_json)
133
+ halt(404,
134
+ encode_result({:status => 'failed',
135
+ :message => "No scope data found"}))
111
136
  else
112
- {
113
- :status => 'ok',
114
- :payload => resource.scope
115
- }.to_json
137
+ encode_result({:status => 'ok',
138
+ :payload => resource.scope})
116
139
  end
117
140
  end
118
141
 
119
142
  put '/v1/scope/:realm/:identifier' do
120
143
  scope = JSON.parse(request.body.read)
121
144
  uuid = Jerakia::Scope::Server.store(params['realm'], params['identifier'], scope)
122
- {
123
- :status => 'ok',
124
- :uuid => uuid
125
- }.to_json
145
+ encode_result({:status => 'ok',
146
+ :uuid => uuid})
126
147
  end
127
148
 
128
149
  get '/v1/scope/:realm/:identifier/uuid' do
@@ -130,10 +151,8 @@ class Jerakia
130
151
  if resource.nil?
131
152
  request_failed('No scope data found', 404)
132
153
  else
133
- {
134
- :status => 'ok',
135
- :uuid => resource.uuid
136
- }.to_json
154
+ encode_result({:status => 'ok',
155
+ :uuid => resource.uuid})
137
156
  end
138
157
  end
139
158
  end
@@ -3,5 +3,5 @@ class Jerakia
3
3
  #
4
4
  # This should be updated when a new gem is released and it is read from the gemspec file
5
5
  #
6
- VERSION = '2.3.0'.freeze
6
+ VERSION = '2.4.0'.freeze
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jerakia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Dunn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-24 00:00:00.000000000 Z
11
+ date: 2017-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: msgpack
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.1'
111
125
  description: Extendable and flexible data lookup system
112
126
  email:
113
127
  executables: