ruby-ant-server 0.5.0 → 0.6.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
  SHA256:
3
- metadata.gz: 8a2f23c6be6739a4fd249562ffc23438dddaa0a2927035944a3b4b17967c7b9f
4
- data.tar.gz: e49e44b63c4ef5bf3afd292e82a7e23556bcdd73e8d846ddcd3d5e86b21ee4f1
3
+ metadata.gz: 6befcf2bfdc8e67ce383fb20467d1b1fd2fd608b0e7beac423aed30d7483a6e0
4
+ data.tar.gz: 5420a89f2112d28f28c6e43cba260b2fbf6a525202e36c56544b5ca8a2453ada
5
5
  SHA512:
6
- metadata.gz: 28de14cddc343f8fee602d0bf9d475954b232fd01c4ff0f4a4aecdd42700da321b3dce9a6b112fd9d749a7fb344bdb5b02c6faa2301e3fca9603feca5df45216
7
- data.tar.gz: 22826aae6b99887e4adb014d7b1c021ecdd1a0ea4dac0e156bb41f74233dd99e18c1066a2ff67161070cc4559faba66fc03130e0a3c91eead2cc63af2dabd92d
6
+ metadata.gz: 3b4644ce8168d792b9acd7275eb8ea1847d3114643f8362ad608582e94cb3630dae3aa8ae8523ffb8026aeabeaa4e92c27f8b620f4259afd9c2d38ee2a9b4d57
7
+ data.tar.gz: 883d571e5fe1209590c36cb7c188ce8a4bafd055a0a4552609665d0b98ad4b1c3a9a3410e7b20ba3f94f3628457a5d40a249aea606ef6ef7954e2154f4b9221b
@@ -1,2 +1,2 @@
1
- require 'ant'
2
- require 'ant/client/rest_client'
1
+ require_relative '../ant'
2
+ require_relative 'client/rest_client'
File without changes
@@ -11,12 +11,29 @@ module Ant
11
11
  class Base
12
12
  include HTTParty
13
13
  include BasicAuth
14
+
14
15
  def initialize(config)
15
16
  @config = config
17
+ register_certificate
18
+ register_ca
19
+ end
20
+
21
+ def register_certificate
22
+ return unless @config[:client_certificate]
23
+ cert = File.read(@config[:client_certificate])
24
+ self.class.pkcs12(cert, @config[:client_certificate_pass])
25
+ end
26
+
27
+ def register_ca
28
+ return unless @config[:ca_validate]
29
+ puts @config[:ca_validate]
30
+ self.class.ssl_ca_file(@config[:ca_validate])
16
31
  end
17
32
 
18
33
  def configure_request(request)
19
34
  basic_auth(request, @config[:basic_auth]) if @config[:basic_auth]
35
+ request[:verify] = @config[:verify] if @config.key?(:verify)
36
+
20
37
  end
21
38
 
22
39
  def perform_request(method, endpoint, data)
@@ -1,4 +1,3 @@
1
- require 'ant'
2
1
  module Ant
3
2
  module Client
4
3
  module Validator
@@ -0,0 +1,31 @@
1
+ module Ant
2
+ module DRY
3
+ class Daemon
4
+ def initialize(wait_time, attach, proc)
5
+ @proc = proc
6
+ @wait_time = wait_time
7
+ @attach = attach
8
+ @finish = false
9
+ end
10
+
11
+ def task
12
+ loop do
13
+ begin
14
+ @proc.exec
15
+ rescue StandarError => ex
16
+ log_error('Unexpected error', error: ex)
17
+ end
18
+ sleep(@wait_time)
19
+ end
20
+ end
21
+
22
+ def run
23
+ if @attach
24
+ task
25
+ else
26
+ Thread.new(&:task)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -35,6 +35,7 @@ module Ant
35
35
  class AntFail < AntBaseException
36
36
  def initialize(message, code = nil, data = {})
37
37
  code ||= self.class.name.split('::').last
38
+ code = 'BadRequest' if code == 'AntFail'
38
39
  super(message, code, data)
39
40
  end
40
41
  end
@@ -46,6 +47,7 @@ module Ant
46
47
  class AntError < AntBaseException
47
48
  def initialize(message, code = nil, data = {})
48
49
  code ||= self.class.name.split('::').last
50
+ code = 'ServerError' if code == 'AntError'
49
51
  super(message, code, data)
50
52
  end
51
53
  end
@@ -29,6 +29,12 @@ module Ant
29
29
  error!(response, http_code)
30
30
  end
31
31
  end
32
+ base.rescue_from(Grape::Exceptions::Base) do |ex|
33
+ ant_ex = Ant::Exceptions::AntFail.new(ex.message)
34
+ response = Ant::Server::GrapeDecorator
35
+ .handler.call(env, :fail, ant_ex)
36
+ error!(response, 400)
37
+ end
32
38
  base.rescue_from(:all) do |ex|
33
39
  level = :fatal
34
40
  response = Ant::Server::GrapeDecorator.handler.call(env, level, ex)
@@ -5,9 +5,16 @@ module Ant
5
5
  module Exceptions
6
6
  class ObjectAlreadyExists < Ant::Exceptions::AntFail
7
7
  attr_reader :id
8
- def initialize(id)
8
+ def initialize(id, object)
9
+ @id = id
10
+ super("Object #{id} already exists", nil, object)
11
+ end
12
+ end
13
+
14
+ class ValidationErrors < Ant::Exceptions::AntFail
15
+ def initialize(data)
9
16
  @id = id
10
- super("Object #{id} already exists", nil, id: id)
17
+ super('Error while validating object', 'ValidationErrors', data)
11
18
  end
12
19
  end
13
20
 
@@ -21,11 +21,12 @@ module Ant
21
21
  @repository.create(@data)
22
22
  end
23
23
 
24
- def initialize(data, repository = nil)
24
+ def initialize(data)
25
25
  @data = data
26
- @repository = repository || default_repository
27
26
  end
28
27
 
28
+ attr_writer :repository
29
+
29
30
  def to_json(options)
30
31
  @data.to_json(options)
31
32
  end
@@ -19,15 +19,15 @@ module Ant
19
19
 
20
20
  def create(id = nil)
21
21
  data = create_initial_object(id)
22
- raise(ObjectAlreadyExists, data[@id]) if exist?(data[@id])
22
+ existent = exist?(data[@id])
23
+ raise(ObjectAlreadyExists.new(data[@id], existent)) if existent
23
24
  create_(data)
24
25
  end
25
26
 
26
27
  def exist?(id)
27
28
  get(id)
28
- true
29
29
  rescue ObjectNotFound
30
- false
30
+ nil
31
31
  end
32
32
  end
33
33
  end
@@ -10,15 +10,18 @@ module Ant
10
10
 
11
11
  def create(data, source = resource(:default))
12
12
  repository = resource(source)
13
- model = @model.new(data, repository)
13
+ model = @model.new(data)
14
+ model.repository = repository
14
15
  model.create
15
16
  model
16
17
  end
17
18
 
18
19
  def get(id, source = resource(:default))
19
20
  repository = resource(source)
20
- model = repository.get(id)
21
- @model.new(model, repository)
21
+ data = repository.get(id)
22
+ model = @model.new(data)
23
+ model.repository = repository
24
+ model
22
25
  end
23
26
  end
24
27
  end
@@ -0,0 +1,15 @@
1
+ class Schema
2
+ def initialize
3
+ @fields = []
4
+ @constraints = []
5
+ end
6
+
7
+ def add_column(options)
8
+ end
9
+
10
+ def generate_sequel_migration
11
+ end
12
+
13
+ def validate(data)
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ require_relative 'ssl/inventory'
@@ -0,0 +1,51 @@
1
+ require 'openssl'
2
+
3
+ module Ant
4
+ module SSL
5
+ class Certificate
6
+ attr_reader :cert, :key
7
+
8
+ def initialize(config, inventory)
9
+ @config = config
10
+ @inventory = inventory
11
+ @key = OpenSSL::PKey::RSA.new(@config['key_size'])
12
+ @cert = OpenSSL::X509::Certificate.new
13
+ @cert.public_key = @key.public_key
14
+ @extensions = OpenSSL::X509::ExtensionFactory.new
15
+ @extensions.subject_certificate = @cert
16
+ end
17
+
18
+ def create!
19
+ # return if File.file?(@config.key_path)
20
+ @ca = @inventory.ca(@config['parent'])
21
+ configure_details!
22
+ configure_extensions!
23
+ sign!
24
+ save!
25
+ end
26
+
27
+ def configure_details!
28
+ @config.configure_cert_details!(@cert)
29
+ end
30
+
31
+ def configure_extensions!
32
+ @extensions.issuer_certificate = @ca.cert
33
+ @config.configure_extensions!(@cert, @extensions)
34
+ end
35
+
36
+ def sign!
37
+ @cert.issuer = @ca.cert.subject
38
+ @cert.sign(@ca.key, OpenSSL::Digest::SHA256.new)
39
+ end
40
+
41
+ def save!
42
+ File.write(@config.key_path, @key.to_s)
43
+ File.write(@config.crt_path, @cert.to_s)
44
+ end
45
+
46
+ def ca_name
47
+ @config['ca']
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,54 @@
1
+ module Ant
2
+ module SSL
3
+ class Configuration
4
+ ONE_YEAR = 60 * 60 * 24 * 365
5
+
6
+ def initialize(root, group, cert)
7
+ @config = root.merge(group).merge(cert)
8
+ end
9
+
10
+ def saving_directory(type)
11
+ path = @config['saving_directory']
12
+ serial = @config['serial']
13
+ "#{path}/#{serial}.#{type}.pem"
14
+ end
15
+
16
+ def crt_path
17
+ saving_directory('crt')
18
+ end
19
+
20
+ def key_path
21
+ saving_directory('key')
22
+ end
23
+
24
+ def subject_string
25
+ "/C=#{@config['country']}/ST=#{@config['state']}" \
26
+ "/L=#{@config['city']}/O=#{@config['organization']}" \
27
+ "/OU=#{@config['team']}/CN=#{@config['name']}"
28
+ end
29
+
30
+ def configure_cert_details!(cert)
31
+ cert.version = 2
32
+ cert.serial = @config['serial']
33
+ cert.subject = OpenSSL::X509::Name.parse(subject_string)
34
+ cert.not_before = Time.now
35
+ cert.not_after = cert.not_before + ONE_YEAR * @config['expiration']
36
+ end
37
+
38
+ def configure_extensions!(cert, extension_factory)
39
+ @config['extensions'].each do |name, details|
40
+ extension = extension_factory.create_extension(
41
+ name,
42
+ details['details'],
43
+ details['critical']
44
+ )
45
+ cert.add_extension(extension)
46
+ end
47
+ end
48
+
49
+ def [](key)
50
+ @config[key]
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,61 @@
1
+ require_relative 'configuration'
2
+ require_relative 'certificate'
3
+ require_relative 'revocation_list'
4
+
5
+ require 'fileutils'
6
+
7
+ module Ant
8
+ module SSL
9
+ class Inventory
10
+ attr_reader :defaults
11
+
12
+ def initialize(defaults, auth, clients, servers)
13
+ @defaults = defaults
14
+ @authorities = SubInventory.new(auth, self)
15
+ @clients = SubInventory.new(clients, self)
16
+ @servers = SubInventory.new(servers, self)
17
+ end
18
+
19
+ def create_certificates!
20
+ validate_inventories!
21
+ create_directory!
22
+ [@authorities, @clients, @servers].each(&:create_certificates!)
23
+ end
24
+
25
+ def validate_inventories!
26
+ true
27
+ end
28
+
29
+ def create_directory!
30
+ FileUtils.mkdir_p(@defaults['saving_directory'])
31
+ end
32
+
33
+ def ca(name)
34
+ @authorities.ca(name)
35
+ end
36
+ end
37
+
38
+ class SubInventory
39
+ def initialize(configs, inventory)
40
+ defaults = configs['defaults']
41
+ @parent = inventory
42
+ @certificates = configs['certificates'].map do |cert|
43
+ configuration = Configuration.new(
44
+ inventory.defaults,
45
+ defaults,
46
+ cert
47
+ )
48
+ Certificate.new(configuration, inventory)
49
+ end
50
+ end
51
+
52
+ def create_certificates!
53
+ @certificates.each(&:create!)
54
+ end
55
+
56
+ def ca(name)
57
+ @certificates.find { |cert| cert.ca_name == name }
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,7 @@
1
+ module Ant
2
+ module SSL
3
+ class Configuration
4
+
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Ant
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-ant-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilberto Vargas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-14 00:00:00.000000000 Z
11
+ date: 2018-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cute_logger
@@ -232,12 +232,14 @@ files:
232
232
  - lib/ant/client/format/format.rb
233
233
  - lib/ant/client/format/json_format.rb
234
234
  - lib/ant/client/format/url_encoded.rb
235
+ - lib/ant/client/format/xml_format.rb
235
236
  - lib/ant/client/rest_client.rb
236
237
  - lib/ant/client/session/base.rb
237
238
  - lib/ant/client/session/basic_auth.rb
238
239
  - lib/ant/client/validator.rb
239
240
  - lib/ant/client/validator/jsend.rb
240
241
  - lib/ant/client/validator/no_validator.rb
242
+ - lib/ant/dry/daemon.rb
241
243
  - lib/ant/dry/resource_injector.rb
242
244
  - lib/ant/exceptions.rb
243
245
  - lib/ant/nanoservice.rb
@@ -248,11 +250,23 @@ files:
248
250
  - lib/ant/server/nanoservice/datasource/id_generators.rb
249
251
  - lib/ant/server/nanoservice/datasource/json_repository.rb
250
252
  - lib/ant/server/nanoservice/datasource/model.rb
253
+ - lib/ant/server/nanoservice/datasource/mongo.rb
251
254
  - lib/ant/server/nanoservice/datasource/repository.rb
252
255
  - lib/ant/server/nanoservice/datasource/sequel.rb
253
256
  - lib/ant/server/nanoservice/factory.rb
257
+ - lib/ant/server/nanoservice/schema.rb
258
+ - lib/ant/server/nanoservice/validator.rb
259
+ - lib/ant/server/nanoservice/validators/date.rb
260
+ - lib/ant/server/nanoservice/validators/numeric.rb
261
+ - lib/ant/server/nanoservice/validators/relation.rb
262
+ - lib/ant/server/nanoservice/validators/text.rb
254
263
  - lib/ant/server/request_response.rb
255
264
  - lib/ant/server/response.rb
265
+ - lib/ant/ssl.rb
266
+ - lib/ant/ssl/certificate.rb
267
+ - lib/ant/ssl/configuration.rb
268
+ - lib/ant/ssl/inventory.rb
269
+ - lib/ant/ssl/revocation_list.rb
256
270
  - lib/ant/version.rb
257
271
  homepage: https://github.com/KueskiEngineering/ruby-ant-server
258
272
  licenses: