jerakia-client 0.1.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 +7 -0
- data/bin/jerakia-client +8 -0
- data/lib/jerakia/client.rb +76 -0
- data/lib/jerakia/client/cli.rb +17 -0
- data/lib/jerakia/client/cli/lookup.rb +113 -0
- data/lib/jerakia/client/error.rb +9 -0
- data/lib/jerakia/client/lookup.rb +9 -0
- data/lib/jerakia/client/scope.rb +18 -0
- data/lib/jerakia/client/token.rb +21 -0
- data/lib/jerakia/client/version.rb +6 -0
- metadata +67 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 899404e16dd30ec067c873af83e69b51f7643f37
|
4
|
+
data.tar.gz: fe2ac9e0f68a145578d9eaabfef449b50b16e2f9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a2f6761ce0df466ed40958289e0b44130e1cb44f497d2348d08bf64bef9a2a39a3e7ee8c651f58d1685d25ad9b026a1cad5152dfa53f0f214b3a3f99a6870795
|
7
|
+
data.tar.gz: 7c5cd46e0ce57593c02c6fbae1cab23c0b61d49fc8493be78f90e1ac679693356e36c16d77e7e0d9a629124c60c7a57c74be677078155a83b5fde79b24562d9b
|
data/bin/jerakia-client
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'jerakia/client/error'
|
3
|
+
require 'jerakia/client/version'
|
4
|
+
require 'jerakia/client/lookup'
|
5
|
+
require 'jerakia/client/scope'
|
6
|
+
require 'jerakia/client/token'
|
7
|
+
require 'uri'
|
8
|
+
require 'json'
|
9
|
+
|
10
|
+
class Jerakia
|
11
|
+
class Client
|
12
|
+
include Jerakia::Client::Lookup
|
13
|
+
include Jerakia::Client::Scope
|
14
|
+
|
15
|
+
attr_reader :config
|
16
|
+
def initialize(opts={})
|
17
|
+
@config = default_config.merge(
|
18
|
+
opts.reject { |k,v| v.nil? }
|
19
|
+
)
|
20
|
+
@token = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_config
|
24
|
+
{
|
25
|
+
:host => 'localhost',
|
26
|
+
:port => 9843,
|
27
|
+
:api => 'v1',
|
28
|
+
:proto => 'http',
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_lookup_options
|
33
|
+
{
|
34
|
+
:policy => :default,
|
35
|
+
:lookup_type => :first,
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def token
|
40
|
+
@token ||= @config[:token]
|
41
|
+
@token ||= Jerakia::Client::Token.load_from_file
|
42
|
+
raise Jerakia::Client::Error, "No authorization token available" if @token.nil?
|
43
|
+
@token
|
44
|
+
end
|
45
|
+
|
46
|
+
def url_address
|
47
|
+
"#{@config[:proto]}://#{@config[:host]}:#{@config[:port]}"
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def get(url_path, params={})
|
52
|
+
headers = { 'X-Authentication' => token }
|
53
|
+
uri_params = '?' + URI.encode_www_form(params)
|
54
|
+
url = url_address + url_path + uri_params
|
55
|
+
begin
|
56
|
+
response = RestClient.get(url, headers)
|
57
|
+
rescue RestClient::Unauthorized => e
|
58
|
+
raise Jerakia::Client::AuthorizationError, "Request not authorized"
|
59
|
+
end
|
60
|
+
return JSON.parse(response.body)
|
61
|
+
end
|
62
|
+
|
63
|
+
def put(url_path, params)
|
64
|
+
headers = { 'X-Authentication' => token }
|
65
|
+
url = url_address + url_path
|
66
|
+
begin
|
67
|
+
response = RestClient.put(url, params.to_json, headers)
|
68
|
+
rescue RestClient::Unauthorized => e
|
69
|
+
raise Jerakia::Client::AuthorizationError, "Request not authorized"
|
70
|
+
end
|
71
|
+
return JSON.parse(response.body)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'jerakia/client'
|
3
|
+
require 'jerakia/client/cli/lookup'
|
4
|
+
|
5
|
+
class Jerakia
|
6
|
+
class Client
|
7
|
+
class CLI < Thor
|
8
|
+
include Jerakia::Client::CLI::Lookup
|
9
|
+
|
10
|
+
desc 'version', 'Version information'
|
11
|
+
def version
|
12
|
+
puts Jerakia::Client::VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
class Jerakia
|
5
|
+
class Client
|
6
|
+
class CLI < Thor
|
7
|
+
module Lookup
|
8
|
+
def self.included(thor)
|
9
|
+
thor.class_eval do
|
10
|
+
desc 'lookup [KEY]', 'Lookup [KEY] with Jerakia'
|
11
|
+
|
12
|
+
option :host,
|
13
|
+
aliases: :H,
|
14
|
+
type: :string,
|
15
|
+
default: nil,
|
16
|
+
desc: 'Hostname or IP to connect to'
|
17
|
+
|
18
|
+
option :port,
|
19
|
+
aliases: :P,
|
20
|
+
type: :string,
|
21
|
+
default: nil,
|
22
|
+
desc: 'Port to connect to'
|
23
|
+
|
24
|
+
option :token,
|
25
|
+
aliases: :T,
|
26
|
+
type: :string,
|
27
|
+
default: nil,
|
28
|
+
desc: "Token to use for authorization, if not provided a jerakia.yaml will be searched for (see docs)"
|
29
|
+
|
30
|
+
option :api,
|
31
|
+
aliases: :a,
|
32
|
+
type: :string,
|
33
|
+
default: nil,
|
34
|
+
desc: 'API Version to implement (see docs)'
|
35
|
+
|
36
|
+
option :policy,
|
37
|
+
aliases: :p,
|
38
|
+
type: :string,
|
39
|
+
default: 'default',
|
40
|
+
desc: 'Lookup policy'
|
41
|
+
option :namespace,
|
42
|
+
aliases: :n,
|
43
|
+
type: :string,
|
44
|
+
default: '',
|
45
|
+
desc: 'Lookup namespace'
|
46
|
+
option :type,
|
47
|
+
aliases: :t,
|
48
|
+
type: :string,
|
49
|
+
default: 'first',
|
50
|
+
desc: 'Lookup type'
|
51
|
+
option :scope,
|
52
|
+
aliases: :s,
|
53
|
+
type: :string,
|
54
|
+
desc: 'Scope handler',
|
55
|
+
default: 'metadata'
|
56
|
+
option :scope_options,
|
57
|
+
type: :hash,
|
58
|
+
desc: 'Key/value pairs to be passed to the scope handler'
|
59
|
+
option :merge_type,
|
60
|
+
aliases: :m,
|
61
|
+
type: :string,
|
62
|
+
default: 'array',
|
63
|
+
desc: 'Merge type'
|
64
|
+
option :verbose,
|
65
|
+
aliases: :v,
|
66
|
+
type: :boolean,
|
67
|
+
desc: 'Print verbose information'
|
68
|
+
option :debug,
|
69
|
+
aliases: :D,
|
70
|
+
type: :boolean,
|
71
|
+
desc: 'Debug information to console, implies --log-level debug'
|
72
|
+
|
73
|
+
option :output,
|
74
|
+
aliases: :o,
|
75
|
+
type: :string,
|
76
|
+
default: 'json',
|
77
|
+
desc: 'Output format, yaml or json'
|
78
|
+
|
79
|
+
def lookup(key)
|
80
|
+
client = Jerakia::Client.new({
|
81
|
+
:host => options[:host],
|
82
|
+
:port => options[:port],
|
83
|
+
:api => options[:api],
|
84
|
+
:token => options[:token],
|
85
|
+
})
|
86
|
+
|
87
|
+
lookup_opts = {
|
88
|
+
:namespace => options[:namespace].split(/::/),
|
89
|
+
:policy => options[:policy].to_sym,
|
90
|
+
:lookup_type => options[:type].to_sym,
|
91
|
+
:merge => options[:merge_type].to_sym,
|
92
|
+
:metadata => options[:metadata] || {},
|
93
|
+
:scope => options[:scope].to_sym,
|
94
|
+
:scope_options => options[:scope_options],
|
95
|
+
:use_schema => options[:schema]
|
96
|
+
}
|
97
|
+
response = client.lookup(key, lookup_opts)
|
98
|
+
answer = response['payload']
|
99
|
+
case options[:output]
|
100
|
+
when 'json'
|
101
|
+
puts answer.to_json
|
102
|
+
when 'yaml'
|
103
|
+
puts answer.to_yaml
|
104
|
+
else
|
105
|
+
raise Jerakia::Client::Error, "Unknown output type #{options[:output]}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Jerakia
|
2
|
+
class Client
|
3
|
+
module Scope
|
4
|
+
|
5
|
+
def send_scope(realm, identifier, scope)
|
6
|
+
put("/v1/scope/#{realm}/#{identifier}", scope)
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_scope_uuid(realm, identifier)
|
10
|
+
get("/v1/scope/#{realm}/#{identifier}/uuid")
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_scope(realm, identifier)
|
14
|
+
get("/v1/scope/#{realm}/#{identifier}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
class Jerakia
|
3
|
+
class Client
|
4
|
+
class Token
|
5
|
+
class << self
|
6
|
+
def load_from_file
|
7
|
+
[
|
8
|
+
File.join(ENV['HOME'], ".jerakia", "jerakia.yaml"),
|
9
|
+
"/etc/jerakia/jerakia.yaml",
|
10
|
+
]. each do |file|
|
11
|
+
if File.exists?(file)
|
12
|
+
config = YAML.load(File.read(file))
|
13
|
+
return config['client_token'] if config['client_token']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
return nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jerakia-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Craig Dunn
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.19'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.19'
|
27
|
+
description: CLI and ruby client libraries for Jerakia Server
|
28
|
+
email:
|
29
|
+
executables:
|
30
|
+
- jerakia-client
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- bin/jerakia-client
|
35
|
+
- lib/jerakia/client.rb
|
36
|
+
- lib/jerakia/client/cli.rb
|
37
|
+
- lib/jerakia/client/cli/lookup.rb
|
38
|
+
- lib/jerakia/client/error.rb
|
39
|
+
- lib/jerakia/client/lookup.rb
|
40
|
+
- lib/jerakia/client/scope.rb
|
41
|
+
- lib/jerakia/client/token.rb
|
42
|
+
- lib/jerakia/client/version.rb
|
43
|
+
homepage: http://jerakia.io
|
44
|
+
licenses:
|
45
|
+
- Apache 2.0
|
46
|
+
metadata: {}
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
requirements: []
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 2.5.1
|
64
|
+
signing_key:
|
65
|
+
specification_version: 4
|
66
|
+
summary: CLI and ruby client libraries for Jerakia Server
|
67
|
+
test_files: []
|