jerakia 2.3.0 → 2.4.0

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