peatio1.9 0.4.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 +7 -0
- data/.gitignore +16 -0
- data/.rspec +3 -0
- data/.rubocop.yml +8 -0
- data/.simplecov +17 -0
- data/.travis.yml +17 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +107 -0
- data/README.md +35 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/peatio +12 -0
- data/bin/setup +8 -0
- data/lib/peatio.rb +20 -0
- data/lib/peatio/auth/error.rb +18 -0
- data/lib/peatio/auth/jwt_authenticator.rb +127 -0
- data/lib/peatio/command/amqp.rb +9 -0
- data/lib/peatio/command/base.rb +11 -0
- data/lib/peatio/command/db.rb +20 -0
- data/lib/peatio/command/inject.rb +11 -0
- data/lib/peatio/command/root.rb +16 -0
- data/lib/peatio/command/security.rb +30 -0
- data/lib/peatio/command/service.rb +26 -0
- data/lib/peatio/error.rb +18 -0
- data/lib/peatio/executor.rb +64 -0
- data/lib/peatio/injectors/peatio_events.rb +209 -0
- data/lib/peatio/logger.rb +37 -0
- data/lib/peatio/mq/client.rb +30 -0
- data/lib/peatio/mq/events.rb +128 -0
- data/lib/peatio/ranger.rb +106 -0
- data/lib/peatio/security/key_generator.rb +26 -0
- data/lib/peatio/sql/client.rb +19 -0
- data/lib/peatio/sql/schema.rb +72 -0
- data/lib/peatio/version.rb +3 -0
- data/peatio1.9.gemspec +44 -0
- metadata +331 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
module Peatio::MQ
|
2
|
+
class Client
|
3
|
+
class << self
|
4
|
+
attr_accessor :channel, :connection
|
5
|
+
|
6
|
+
def new
|
7
|
+
@options = {
|
8
|
+
host: ENV["RABBITMQ_HOST"] || "0.0.0.0",
|
9
|
+
port: ENV["RABBITMQ_PORT"] || "5672",
|
10
|
+
username: ENV["RABBITMQ_USER"],
|
11
|
+
password: ENV["RABBITMQ_PASSWORD"],
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def connect!
|
16
|
+
@connection = Bunny.new(@options)
|
17
|
+
@connection.start
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_channel!
|
21
|
+
@channel = @connection.create_channel
|
22
|
+
end
|
23
|
+
|
24
|
+
def disconnect
|
25
|
+
@connection.close
|
26
|
+
yield if block_given?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require "socket"
|
2
|
+
|
3
|
+
module Peatio::MQ::Events
|
4
|
+
def self.subscribe!
|
5
|
+
ranger = RangerEvents.new
|
6
|
+
ranger.subscribe
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.publish(type, id, event, payload)
|
10
|
+
@@client ||= begin
|
11
|
+
ranger = RangerEvents.new
|
12
|
+
ranger.connect!
|
13
|
+
ranger
|
14
|
+
end
|
15
|
+
|
16
|
+
@@client.publish(type, id, event, payload) do
|
17
|
+
yield if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Client
|
22
|
+
attr_accessor :streams, :authorized, :user
|
23
|
+
|
24
|
+
@@all = []
|
25
|
+
|
26
|
+
def self.all
|
27
|
+
@@all
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.user(user)
|
31
|
+
@@all.each do |handler|
|
32
|
+
if handler.user == user
|
33
|
+
yield handler
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize(socket, streams)
|
39
|
+
@socket = socket
|
40
|
+
@streams = streams
|
41
|
+
|
42
|
+
@user = ""
|
43
|
+
@authorized = false
|
44
|
+
|
45
|
+
@@all << self
|
46
|
+
end
|
47
|
+
|
48
|
+
def send_payload(message)
|
49
|
+
@socket.send message.to_json
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class RangerEvents
|
54
|
+
attr_accessor :exchange_name
|
55
|
+
|
56
|
+
def initialize
|
57
|
+
@exchange_name = "peatio.events.ranger"
|
58
|
+
end
|
59
|
+
|
60
|
+
def connect!
|
61
|
+
if Peatio::MQ::Client.channel.nil?
|
62
|
+
Peatio::MQ::Client.new
|
63
|
+
Peatio::MQ::Client.connect!
|
64
|
+
Peatio::MQ::Client.create_channel!
|
65
|
+
end
|
66
|
+
@exchange = Peatio::MQ::Client.channel.topic(@exchange_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
def publish(type, id, event, payload)
|
70
|
+
routing_key = [type, id, event].join(".")
|
71
|
+
serialized_data = JSON.dump(payload)
|
72
|
+
|
73
|
+
@exchange.publish(serialized_data, routing_key: routing_key)
|
74
|
+
|
75
|
+
Peatio::Logger::debug { "published event to #{routing_key} " }
|
76
|
+
|
77
|
+
yield if block_given?
|
78
|
+
end
|
79
|
+
|
80
|
+
def subscribe
|
81
|
+
exchange = Peatio::MQ::Client.channel.topic(@exchange_name)
|
82
|
+
|
83
|
+
suffix = "#{Socket.gethostname.split(/-/).last}#{Random.rand(10_000)}"
|
84
|
+
|
85
|
+
queue_name = "#{@topic_name}.ranger.#{suffix}"
|
86
|
+
|
87
|
+
Peatio::MQ::Client.channel
|
88
|
+
.queue(queue_name, durable: false, auto_delete: true)
|
89
|
+
.bind(exchange, routing_key: "#").subscribe do |delivery_info, metadata, payload|
|
90
|
+
|
91
|
+
# type@id@event
|
92
|
+
# type can be public|private
|
93
|
+
# id can be user id or market
|
94
|
+
# event can be anything like order_completed or just trade
|
95
|
+
|
96
|
+
routing_key = delivery_info.routing_key
|
97
|
+
if routing_key.count(".") != 2
|
98
|
+
Peatio::Logger::error do
|
99
|
+
"got invalid routing key from amqp: #{routing_key}"
|
100
|
+
end
|
101
|
+
|
102
|
+
next
|
103
|
+
end
|
104
|
+
|
105
|
+
type, id, event = routing_key.split(".")
|
106
|
+
payload_decoded = JSON.parse payload
|
107
|
+
|
108
|
+
if type == "private"
|
109
|
+
Client.user(id) do |client|
|
110
|
+
if client.streams.include?(event)
|
111
|
+
client.send_payload [event, payload_decoded]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
next
|
116
|
+
end
|
117
|
+
|
118
|
+
stream = [id, event].join(".")
|
119
|
+
|
120
|
+
Client.all.each do |handler|
|
121
|
+
if handler.streams.include?(id) or handler.streams.include?(stream)
|
122
|
+
handler.send_payload [stream, payload_decoded]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Peatio::Ranger
|
2
|
+
class Connection
|
3
|
+
def initialize(authenticator, socket, logger)
|
4
|
+
@authenticator = authenticator
|
5
|
+
@socket = socket
|
6
|
+
@logger = logger
|
7
|
+
@streams = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def send(method, data)
|
11
|
+
payload = JSON.dump(method => data)
|
12
|
+
@logger.debug { payload }
|
13
|
+
@socket.send payload
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle(msg)
|
17
|
+
authorized = false
|
18
|
+
begin
|
19
|
+
data = JSON.parse(msg)
|
20
|
+
|
21
|
+
token = data["jwt"]
|
22
|
+
|
23
|
+
payload = @authenticator.authenticate!(token)
|
24
|
+
|
25
|
+
authorized = true
|
26
|
+
rescue JSON::ParserError
|
27
|
+
rescue => error
|
28
|
+
@logger.error error.message
|
29
|
+
end
|
30
|
+
|
31
|
+
if !authorized
|
32
|
+
send :error, message: "Authentication failed."
|
33
|
+
return
|
34
|
+
end
|
35
|
+
|
36
|
+
@client.user = payload[:uid]
|
37
|
+
@client.authorized = true
|
38
|
+
|
39
|
+
@logger.info "ranger: user #{@client.user} authenticated #{@streams}"
|
40
|
+
|
41
|
+
send :success, message: "Authenticated."
|
42
|
+
end
|
43
|
+
|
44
|
+
def handshake(handshake)
|
45
|
+
query = URI::decode_www_form(handshake.query_string)
|
46
|
+
|
47
|
+
@streams = query.map do |item|
|
48
|
+
if item.first == "stream"
|
49
|
+
item.last
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
@logger.info "ranger: WebSocket connection openned, streams: #{@streams}"
|
54
|
+
|
55
|
+
@client = Peatio::MQ::Events::Client.new(
|
56
|
+
@socket, @streams,
|
57
|
+
)
|
58
|
+
|
59
|
+
@socket.instance_variable_set(:@connection_handler, @client)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.run!(jwt_public_key)
|
64
|
+
host = ENV["RANGER_HOST"] || "0.0.0.0"
|
65
|
+
port = ENV["RANGER_PORT"] || "8081"
|
66
|
+
|
67
|
+
authenticator = Peatio::Auth::JWTAuthenticator.new(jwt_public_key)
|
68
|
+
|
69
|
+
logger = Peatio::Logger.logger
|
70
|
+
logger.info "Starting the server on port #{port}"
|
71
|
+
|
72
|
+
EM.run do
|
73
|
+
Peatio::MQ::Client.new
|
74
|
+
Peatio::MQ::Client.connect!
|
75
|
+
Peatio::MQ::Client.create_channel!
|
76
|
+
|
77
|
+
Peatio::MQ::Events.subscribe!
|
78
|
+
|
79
|
+
EM::WebSocket.start(
|
80
|
+
host: host,
|
81
|
+
port: port,
|
82
|
+
secure: false,
|
83
|
+
) do |socket|
|
84
|
+
connection = Connection.new(authenticator, socket, logger)
|
85
|
+
|
86
|
+
socket.onopen do |handshake|
|
87
|
+
connection.handshake(handshake)
|
88
|
+
end
|
89
|
+
|
90
|
+
socket.onmessage do |msg|
|
91
|
+
connection.handle(msg)
|
92
|
+
end
|
93
|
+
|
94
|
+
socket.onclose do
|
95
|
+
logger.info "ranger: WebSocket connection closed"
|
96
|
+
end
|
97
|
+
|
98
|
+
socket.onerror do |e|
|
99
|
+
logger.error "ranger: WebSocket Error: #{e.message}"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
yield if block_given?
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Peatio::Security
|
4
|
+
class KeyGenerator
|
5
|
+
|
6
|
+
attr_reader :public, :private
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
OpenSSL::PKey::RSA.generate(2048).tap do |pkey|
|
10
|
+
@public = pkey.public_key.to_pem
|
11
|
+
@private = pkey.to_pem
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def save(folder)
|
16
|
+
FileUtils.mkdir_p(folder) unless File.exists?(folder)
|
17
|
+
|
18
|
+
write(File.join(folder, 'rsa-key'), @private)
|
19
|
+
write(File.join(folder, 'rsa-key.pub'), @public)
|
20
|
+
end
|
21
|
+
|
22
|
+
def write(filename, text)
|
23
|
+
File.open(filename, 'w') { |file| file.write(text) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Peatio::Sql
|
2
|
+
class Client
|
3
|
+
attr_accessor :client, :config
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@config = {
|
7
|
+
host: ENV["DATABASE_HOST"] || "localhost",
|
8
|
+
username: ENV["DATABASE_USER"] || "root",
|
9
|
+
password: ENV["DATABASE_PASS"] || "",
|
10
|
+
port: ENV["DATABASE_PORT"] || "3306",
|
11
|
+
database: ENV["DATABASE_NAME"] || "peatio_development",
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def connect
|
16
|
+
@client = Mysql2::Client.new(config)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Peatio::Sql
|
2
|
+
class Schema
|
3
|
+
attr_accessor :client
|
4
|
+
|
5
|
+
def initialize(sql_client)
|
6
|
+
@client = sql_client
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_database(name)
|
10
|
+
client.query("CREATE DATABASE IF NOT EXISTS `#{ name }`;")
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_tables(options = {})
|
14
|
+
statements = []
|
15
|
+
statements << "DROP TABLE IF EXISTS `operations`;" if options[:drop_if_exists]
|
16
|
+
statements << <<-EOF
|
17
|
+
CREATE TABLE IF NOT EXISTS `operations` (
|
18
|
+
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
19
|
+
code TINYINT UNSIGNED NOT NULL,
|
20
|
+
account_id INT UNSIGNED NOT NULL,
|
21
|
+
reference INT UNSIGNED NOT NULL,
|
22
|
+
debit DECIMAL(32, 16) NOT NULL,
|
23
|
+
credit DECIMAL(32, 16) NOT NULL,
|
24
|
+
created_at DATETIME NOT NULL,
|
25
|
+
updated_at DATETIME NOT NULL,
|
26
|
+
PRIMARY KEY (id),
|
27
|
+
INDEX `balance_key` (account_id, debit, credit)
|
28
|
+
) ENGINE = InnoDB;
|
29
|
+
EOF
|
30
|
+
|
31
|
+
statements << "DROP TABLE IF EXISTS `orders`;" if options[:drop_if_exists]
|
32
|
+
statements << <<EOF
|
33
|
+
CREATE TABLE IF NOT EXISTS`orders` (
|
34
|
+
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
35
|
+
`uid` INT(11) UNSIGNED NOT NULL,
|
36
|
+
`bid` VARCHAR(5) NOT NULL,
|
37
|
+
`ask` VARCHAR(5) NOT NULL,
|
38
|
+
`market` VARCHAR(10) NOT NULL,
|
39
|
+
`price` DECIMAL(32,16) DEFAULT NULL,
|
40
|
+
`volume` DECIMAL(32,16) NOT NULL,
|
41
|
+
`fee` DECIMAL(32,16) NOT NULL DEFAULT '0.0000000000000000',
|
42
|
+
`type` TINYINT UNSIGNED NOT NULL,
|
43
|
+
`state` TINYINT UNSIGNED NOT NULL,
|
44
|
+
`created_at` DATETIME NOT NULL,
|
45
|
+
`updated_at` DATETIME NOT NULL,
|
46
|
+
PRIMARY KEY (`id`)
|
47
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
48
|
+
EOF
|
49
|
+
|
50
|
+
statements << "DROP TABLE IF EXISTS `trades`;" if options[:drop_if_exists]
|
51
|
+
statements << <<EOF
|
52
|
+
CREATE TABLE IF NOT EXISTS `trades` (
|
53
|
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
54
|
+
`market` varchar(10) NOT NULL,
|
55
|
+
`volume` decimal(32,16) NOT NULL,
|
56
|
+
`price` decimal(32,16) NOT NULL,
|
57
|
+
`ask_id` int(11) NOT NULL,
|
58
|
+
`bid_id` int(11) NOT NULL,
|
59
|
+
`ask_uid` int(11) NOT NULL,
|
60
|
+
`bid_uid` int(11) NOT NULL,
|
61
|
+
`created_at` datetime NOT NULL,
|
62
|
+
`updated_at` datetime NOT NULL,
|
63
|
+
PRIMARY KEY (`id`)
|
64
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
65
|
+
EOF
|
66
|
+
statements.each do |statement|
|
67
|
+
puts statement
|
68
|
+
client.query(statement)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/peatio1.9.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "peatio/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "peatio1.9"
|
8
|
+
spec.version = Peatio::VERSION
|
9
|
+
spec.authors = ["topdev"]
|
10
|
+
spec.email = ["riguang102@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Peatio is a gem for running critical core services}
|
13
|
+
spec.description = %q{Peatio gem contains microservices and command line tools}
|
14
|
+
spec.homepage = "https://github.com/top1st/peatio-core-1.9"
|
15
|
+
|
16
|
+
# Specify which files should be added to the gem when it is released.
|
17
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
18
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
19
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
|
+
end
|
21
|
+
spec.bindir = "bin"
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
|
25
|
+
spec.add_dependency "clamp"
|
26
|
+
spec.add_dependency "amqp"
|
27
|
+
spec.add_dependency "eventmachine"
|
28
|
+
spec.add_dependency "em-websocket"
|
29
|
+
spec.add_dependency "mysql2"
|
30
|
+
spec.add_dependency "jwt"
|
31
|
+
spec.add_dependency "bunny"
|
32
|
+
|
33
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
34
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
35
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
36
|
+
spec.add_development_dependency "bump"
|
37
|
+
spec.add_development_dependency "em-spec"
|
38
|
+
spec.add_development_dependency "em-websocket-client"
|
39
|
+
spec.add_development_dependency "bunny-mock"
|
40
|
+
spec.add_development_dependency "simplecov"
|
41
|
+
spec.add_development_dependency "simplecov-json"
|
42
|
+
spec.add_development_dependency "rspec_junit_formatter"
|
43
|
+
spec.add_development_dependency "rubocop-github"
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,331 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: peatio1.9
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- topdev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-08-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: clamp
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: amqp
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: eventmachine
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: em-websocket
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mysql2
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: jwt
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: bunny
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: bundler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.16'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.16'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '13.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '13.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: bump
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: em-spec
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: em-websocket-client
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: bunny-mock
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: simplecov
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: simplecov-json
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: rspec_junit_formatter
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: rubocop-github
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
description: Peatio gem contains microservices and command line tools
|
266
|
+
email:
|
267
|
+
- riguang102@gmail.com
|
268
|
+
executables:
|
269
|
+
- console
|
270
|
+
- peatio
|
271
|
+
- setup
|
272
|
+
extensions: []
|
273
|
+
extra_rdoc_files: []
|
274
|
+
files:
|
275
|
+
- ".gitignore"
|
276
|
+
- ".rspec"
|
277
|
+
- ".rubocop.yml"
|
278
|
+
- ".simplecov"
|
279
|
+
- ".travis.yml"
|
280
|
+
- Gemfile
|
281
|
+
- Gemfile.lock
|
282
|
+
- README.md
|
283
|
+
- Rakefile
|
284
|
+
- bin/console
|
285
|
+
- bin/peatio
|
286
|
+
- bin/setup
|
287
|
+
- lib/peatio.rb
|
288
|
+
- lib/peatio/auth/error.rb
|
289
|
+
- lib/peatio/auth/jwt_authenticator.rb
|
290
|
+
- lib/peatio/command/amqp.rb
|
291
|
+
- lib/peatio/command/base.rb
|
292
|
+
- lib/peatio/command/db.rb
|
293
|
+
- lib/peatio/command/inject.rb
|
294
|
+
- lib/peatio/command/root.rb
|
295
|
+
- lib/peatio/command/security.rb
|
296
|
+
- lib/peatio/command/service.rb
|
297
|
+
- lib/peatio/error.rb
|
298
|
+
- lib/peatio/executor.rb
|
299
|
+
- lib/peatio/injectors/peatio_events.rb
|
300
|
+
- lib/peatio/logger.rb
|
301
|
+
- lib/peatio/mq/client.rb
|
302
|
+
- lib/peatio/mq/events.rb
|
303
|
+
- lib/peatio/ranger.rb
|
304
|
+
- lib/peatio/security/key_generator.rb
|
305
|
+
- lib/peatio/sql/client.rb
|
306
|
+
- lib/peatio/sql/schema.rb
|
307
|
+
- lib/peatio/version.rb
|
308
|
+
- peatio1.9.gemspec
|
309
|
+
homepage: https://github.com/top1st/peatio-core-1.9
|
310
|
+
licenses: []
|
311
|
+
metadata: {}
|
312
|
+
post_install_message:
|
313
|
+
rdoc_options: []
|
314
|
+
require_paths:
|
315
|
+
- lib
|
316
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - ">="
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: '0'
|
321
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
322
|
+
requirements:
|
323
|
+
- - ">="
|
324
|
+
- !ruby/object:Gem::Version
|
325
|
+
version: '0'
|
326
|
+
requirements: []
|
327
|
+
rubygems_version: 3.0.3
|
328
|
+
signing_key:
|
329
|
+
specification_version: 4
|
330
|
+
summary: Peatio is a gem for running critical core services
|
331
|
+
test_files: []
|