zold 0.3.3 → 0.3.4

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: 14468d2087e8bc9e62ff62fbf6a8ed863676f547
4
- data.tar.gz: 5a21ba21c87067c1542073e9ac2d4eee0aebd0da
3
+ metadata.gz: 310bfd7583912cdc9abc3b2bb8ff1c3a2d8bdc9a
4
+ data.tar.gz: 6b9c43db3c2534bedf560a2baf8519596e52d187
5
5
  SHA512:
6
- metadata.gz: 0cfa87e3536e8950d6cab5086c9332af1a8d51c4d962554bcc3833c376e82c80edd96da966e0b6321443b4006be7ab6279628bedfa23aafbfaaced04e693fa14
7
- data.tar.gz: 602357b96cf4212800d256c04d001c72563d7b10825c89e79bcf91858b2e45ccf67a208a046761cc2710143efd5e953163825f64e8f81245c2152f288d57b17f
6
+ metadata.gz: 34802e906d21aec4e14ba10f01e4625df22c2e767c470b0167d9879bd7337a83018ea4d7bc506dc9e3deda52c4bbf32624bcd01d8cb4f406bbfd539a82b533e9
7
+ data.tar.gz: 6a4f768f29cea3a6246e7c55261ade7444e3149cfccac4a367a361484b695be2170fabd8e3e9246640ed7bfebf68c15ef41e303d780b78268ab32c73ae38a07f
data/lib/zold/copies.rb CHANGED
@@ -49,6 +49,10 @@ module Zold
49
49
  end
50
50
  end
51
51
 
52
+ def remove(host, port)
53
+ save(load.reject! { |s| s[:host] == host && s[:port] == port })
54
+ end
55
+
52
56
  def add(content, host, port, score, time = Time.now)
53
57
  raise "Content can't be empty" if content.empty?
54
58
  raise 'TCP port must be of type Integer' unless port.is_a?(Integer)
data/lib/zold/key.rb CHANGED
@@ -21,6 +21,7 @@
21
21
  gem 'openssl'
22
22
  require 'openssl'
23
23
  require 'base64'
24
+ require 'tempfile'
24
25
 
25
26
  # The RSA key (either private or public).
26
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -70,7 +71,10 @@ module Zold
70
71
  def rsa
71
72
  text = @body.call.strip
72
73
  unless text.start_with?('-----BEGIN')
73
- text = OpenSSHKeyConverter.decode_pubkey(text.split[1])
74
+ Tempfile.open do |f|
75
+ File.write(f.path, text)
76
+ text = `ssh-keygen -f #{f.path} -e -m pem`
77
+ end
74
78
  end
75
79
  begin
76
80
  OpenSSL::PKey::RSA.new(text)
@@ -80,99 +84,3 @@ module Zold
80
84
  end
81
85
  end
82
86
  end
83
-
84
- # Stolen from: https://gist.github.com/tombh/f66de84fd3a63e670ad9
85
- module OpenSSHKeyConverter
86
- # The components in a openssh .pub / known_host RSA public key.
87
- RSA_COMPONENTS = ['ssh-rsa', :e, :n].freeze
88
- # The components in a openssh .pub / known_host DSA public key.
89
- DSA_COMPONENTS = ['ssh-dss', :p, :q, :g, :pub_key].freeze
90
-
91
- # Encodes a key's public part in the format found in .pub & known_hosts files.
92
- def self.encode_pubkey(key)
93
- case key
94
- when OpenSSL::PKey::RSA
95
- components = RSA_COMPONENTS
96
- when OpenSSL::PKey::DSA
97
- components = DSA_COMPONENTS
98
- else
99
- raise "Unsupported key type #{key.class.name}"
100
- end
101
- components.map! { |c| c.is_a?(Symbol) ? encode_mpi(key.send(c)) : c }
102
- # ruby tries to be helpful and adds new lines every 60 bytes :(
103
- [pack_pubkey_components(components)].pack('m').delete("\n")
104
- end
105
-
106
- # Decodes an openssh public key from the format of .pub & known_hosts files.
107
- def self.decode_pubkey(string)
108
- components = unpack_pubkey_components Base64.decode64(string)
109
- case components.first
110
- when RSA_COMPONENTS.first
111
- ops = RSA_COMPONENTS.zip components
112
- key = OpenSSL::PKey::RSA.new
113
- when DSA_COMPONENTS.first
114
- ops = DSA_COMPONENTS.zip components
115
- key = OpenSSL::PKey::DSA.new
116
- else
117
- raise "Unsupported key type #{components.first}"
118
- end
119
- ops.each do |o|
120
- next unless o.first.is_a? Symbol
121
- key.send "#{o.first}=", decode_mpi(o.last)
122
- end
123
- key
124
- end
125
-
126
- # Loads a serialized key from an IO instance (File, StringIO).
127
- def self.load_key(io)
128
- key_from_string io.read
129
- end
130
-
131
- # Reads a serialized key from a string.
132
- def self.key_from_string(serialized_key)
133
- header = first_line serialized_key
134
- if header.index 'RSA'
135
- OpenSSL::PKey::RSA.new serialized_key
136
- elsif header.index 'DSA'
137
- OpenSSL::PKey::DSA.new serialized_key
138
- else
139
- raise 'Unknown key type'
140
- end
141
- end
142
-
143
- # Extracts the first line of a string.
144
- def self.first_line(string)
145
- string[0, string.index(/\r|\n/) || string.len]
146
- end
147
-
148
- # Unpacks the string components in an openssh-encoded pubkey.
149
- def self.unpack_pubkey_components(str)
150
- cs = []
151
- i = 0
152
- while i < str.length
153
- len = str[i, 4].unpack('N').first
154
- cs << str[i + 4, len]
155
- i += 4 + len
156
- end
157
- cs
158
- end
159
-
160
- # Packs string components into an openssh-encoded pubkey.
161
- def self.pack_pubkey_components(strings)
162
- (strings.map { |s| [s.length].pack('N') }).zip(strings).flatten.join
163
- end
164
-
165
- # Decodes an openssh-mpi-encoded integer.
166
- def self.decode_mpi(mpi_str)
167
- mpi_str.unpack('C*').inject(0) { |a, e| (a << 8) | e }
168
- end
169
-
170
- # Encodes an openssh-mpi-encoded integer.
171
- def self.encode_mpi(n)
172
- chars = []
173
- n = n.to_i
174
- chars << (n & 0xff) && n >>= 8 while n != 0
175
- chars << 0 if chars.empty? || chars.last >= 0x80
176
- chars.reverse.pack('C*')
177
- end
178
- end
@@ -21,7 +21,6 @@
21
21
  STDOUT.sync = true
22
22
 
23
23
  require 'slop'
24
- require 'facter'
25
24
  require 'json'
26
25
  require 'sinatra/base'
27
26
  require 'webrick'
@@ -34,7 +33,6 @@ require_relative '../log'
34
33
  require_relative '../remotes'
35
34
  require_relative '../id'
36
35
  require_relative '../http'
37
- require_relative '../commands/merge'
38
36
 
39
37
  # The web front of the node.
40
38
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -84,15 +82,8 @@ module Zold
84
82
  JSON.pretty_generate(
85
83
  version: VERSION,
86
84
  score: score.to_h,
87
- platform: {
88
- uptime: `uptime`.strip,
89
- # see https://docs.puppet.com/facter/3.3/core_facts.html
90
- kernel: Facter.value(:kernel),
91
- processors: Facter.value(:processors)['count']
92
- },
93
- wallets: {
94
- total: wallets.all.count
95
- },
85
+ uptime: `uptime`.strip,
86
+ wallets: wallets.all.count,
96
87
  farm: settings.farm.to_json,
97
88
  date: `date --iso-8601=seconds -u`.strip,
98
89
  age: (Time.now - settings.start) / (60 * 60),
@@ -118,7 +109,11 @@ module Zold
118
109
  request.body.rewind
119
110
  cps = copies(id)
120
111
  cps.add(request.body.read, 'remote', Remotes::PORT, 0)
112
+ require_relative '../commands/fetch'
113
+ Zold::Fetch.new(remotes: remotes, copies: cps.root).run([id.to_s])
114
+ require_relative '../commands/merge'
121
115
  Zold::Merge.new(wallets: wallets, copies: cps.root).run([id.to_s])
116
+ cps.remove('remote', Remotes::PORT)
122
117
  "Success, #{wallet.id} balance is #{wallet.balance}"
123
118
  end
124
119
 
data/lib/zold/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.3.3'.freeze
26
+ VERSION = '0.3.4'.freeze
27
27
  end
data/resources/remotes CHANGED
@@ -1 +1,2 @@
1
1
  b1.zold.io,80,0
2
+ b2.zold.io,4096,0
data/zold.gemspec CHANGED
@@ -46,7 +46,6 @@ Gem::Specification.new do |s|
46
46
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
47
47
  s.add_runtime_dependency 'cucumber', '1.3.17'
48
48
  s.add_runtime_dependency 'diffy', '3.2.0'
49
- s.add_runtime_dependency 'facter', '2.5.1'
50
49
  s.add_runtime_dependency 'openssl', '2.0.1'
51
50
  s.add_runtime_dependency 'rainbow', '~>3.0'
52
51
  s.add_runtime_dependency 'rake', '12.0.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: facter
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 2.5.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 2.5.1
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: openssl
57
43
  requirement: !ruby/object:Gem::Requirement