jerakia-client 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|