ji2p-router 0.0.4-universal-java-11
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/lib/ji2p-server.rb +3 -0
- data/lib/ji2p/server.rb +10 -0
- data/lib/ji2p/server/api.rb +14 -0
- data/lib/ji2p/server/http.rb +69 -0
- data/lib/ji2p/server/http_server.rb +37 -0
- data/lib/ji2p/server/initializer.rb +4 -0
- data/lib/ji2p/server/launcher.rb +40 -0
- data/lib/ji2p/startup/client_application.rb +20 -0
- data/lib/ji2p/startup/sinatra_app.rb +61 -0
- metadata +166 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: eb4e98090bd2f32eb863f1878a18a74c7b8829b55331800bd25540282fbfc837
|
4
|
+
data.tar.gz: ada31782392c05b36dd0924351e89d35f0cc00f8d6cb88fc9d82e06867e9b4ec
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1240e16a6b25b564e3e13b01fb6e2bff12f4e6ceeb0234a757669fad550b2c54bf07be8991cb6edc9a75b784c1236b68b5df8018309b7cabf48560ca6f75f217
|
7
|
+
data.tar.gz: 62181f53a71f3d4fe08a1098e7ca9050561356d69036636a80f3f90e9365be4019e2a91187276c3fc99f868b0261006da2d4a69b6e66e5c857cf3810f5d1a90e
|
data/lib/ji2p-server.rb
ADDED
data/lib/ji2p/server.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Ji2p
|
2
|
+
module Server
|
3
|
+
autoload :Api, File.expand_path('server/api.rb', __dir__)
|
4
|
+
autoload :Database, File.expand_path('server/database.rb', __dir__)
|
5
|
+
autoload :HTTP, File.expand_path('server/http.rb', __dir__)
|
6
|
+
autoload :HttpServer, File.expand_path('server/http_server.rb', __dir__)
|
7
|
+
autoload :Launcher, File.expand_path('server/launcher.rb', __dir__)
|
8
|
+
autoload :Models, File.expand_path('server/models.rb', __dir__)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
module Ji2p::Server
|
4
|
+
class HTTP
|
5
|
+
VERSION = "HTTP/1.1" unless defined? VERSION
|
6
|
+
CRLF = "\r\n" unless defined? CRLF
|
7
|
+
|
8
|
+
def initialize(socket, application)
|
9
|
+
@socket = socket
|
10
|
+
@application = application
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse
|
14
|
+
matches = /\A(?<method>\S+)\s+(?<uri>\S+)\s+(?<version>\S+)#{CRLF}\Z/.match(@socket.readline)
|
15
|
+
uri = URI.parse(matches[:uri])
|
16
|
+
|
17
|
+
env = {
|
18
|
+
"rack.errors" => $stderr,
|
19
|
+
"rack.version" => Rack::VERSION,
|
20
|
+
"rack.url_scheme" => uri.scheme || "http",
|
21
|
+
"REQUEST_METHOD" => matches[:method],
|
22
|
+
"REQUEST_URI" => matches[:uri],
|
23
|
+
"HTTP_VERSION" => matches[:version],
|
24
|
+
"QUERY_STRING" => uri.query || "",
|
25
|
+
"SERVER_PORT" => uri.port || 80,
|
26
|
+
"SERVER_NAME" => uri.host || "localhost",
|
27
|
+
"PATH_INFO" => uri.path || "",
|
28
|
+
"SCRIPT_NAME" => "",
|
29
|
+
}
|
30
|
+
|
31
|
+
while matches = /\A(?<key>[^:]+):\s*(?<value>.+)#{CRLF}\Z/.match(hl = @socket.readline)
|
32
|
+
case matches[:key]
|
33
|
+
when Rack::ContentType then env["CONTENT_TYPE"] = matches[:value]
|
34
|
+
when Rack::ContentLength then env["CONTENT_LENGTH"] = Integer(matches[:value])
|
35
|
+
else env["HTTP_" + matches[:key].tr("-", "_").upcase] ||= matches[:value]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
env["rack.input"] = StringIO.new(@socket.read(env["CONTENT_LENGTH"] || 0))
|
40
|
+
|
41
|
+
return env #.map { |_,v| String.new v }
|
42
|
+
end
|
43
|
+
|
44
|
+
def handle
|
45
|
+
env = parse
|
46
|
+
|
47
|
+
status, headers, body = @application.call(env)
|
48
|
+
|
49
|
+
time = Time.now.httpdate
|
50
|
+
|
51
|
+
@socket.write "#{env['HTTP_VERSION']} #{status} #{Rack::Utils::HTTP_STATUS_CODES.fetch(status.to_i) { 'UNKNOWN' }}#{CRLF}"
|
52
|
+
@socket.write "Date: #{time}#{CRLF}"
|
53
|
+
@socket.write "Connection: close#{CRLF}"
|
54
|
+
|
55
|
+
headers.each do |key, value|
|
56
|
+
@socket.write "#{key}: #{value}#{CRLF}"
|
57
|
+
end
|
58
|
+
|
59
|
+
@socket.write(CRLF)
|
60
|
+
|
61
|
+
body.each do |chunk|
|
62
|
+
@socket.write(chunk)
|
63
|
+
end
|
64
|
+
|
65
|
+
Ji2p.logger.info("[#{time}] '#{env["REQUEST_METHOD"]} #{env["REQUEST_URI"]} #{env["HTTP_VERSION"]}' #{status}")
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'http.rb'
|
2
|
+
|
3
|
+
module Ji2p::Server
|
4
|
+
class HttpServer
|
5
|
+
|
6
|
+
def initialize(application, socket)
|
7
|
+
@application = application
|
8
|
+
@socket = socket
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
loop do
|
13
|
+
begin
|
14
|
+
monitor
|
15
|
+
rescue Interrupt
|
16
|
+
Ji2p.logger.log("INTERRUPTED")
|
17
|
+
return
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def monitor
|
23
|
+
#selections, = IO.select(@sockets)
|
24
|
+
#io, = selections
|
25
|
+
io = @socket
|
26
|
+
|
27
|
+
begin
|
28
|
+
socket = io.accept
|
29
|
+
http = Ji2p::Server::HTTP::new(socket, @application)
|
30
|
+
http.handle
|
31
|
+
ensure
|
32
|
+
socket.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rack'
|
2
|
+
|
3
|
+
module Ji2p::Server
|
4
|
+
class Launcher
|
5
|
+
|
6
|
+
def initialize privateKeyData=nil
|
7
|
+
generate_keypair if privateKeyData.nil?
|
8
|
+
load_keypair privateKeyData unless privateKeyData.nil?
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def generate_keypair
|
14
|
+
@keypair = Ji2p::Control::Keypair.generate!
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_keypair privateKeyData
|
18
|
+
@keypair = Ji2p::Control::Keypair.load_from_stream! StringIO.new(privateKeyData)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
class RackConfigLauncher < Launcher
|
24
|
+
|
25
|
+
def initialize privateKeyData, rackfile
|
26
|
+
super(privateKeyData)
|
27
|
+
@rack_config = rackfile.dup
|
28
|
+
end
|
29
|
+
|
30
|
+
def rack_application
|
31
|
+
raw = File.read(@rack_config)
|
32
|
+
builder = <<~BUILDER
|
33
|
+
Rack::Builder.new do
|
34
|
+
#{raw}
|
35
|
+
end
|
36
|
+
BUILDER
|
37
|
+
eval(builder, nil, @rack_config)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Ji2p
|
4
|
+
module Startup
|
5
|
+
class ClientApplication
|
6
|
+
java_import 'net.i2p.I2PAppContext'
|
7
|
+
|
8
|
+
def initialize name
|
9
|
+
@name = name
|
10
|
+
@ctx = Java::NetI2p::I2PAppContext.getGlobalContext
|
11
|
+
FileUtils.mkdir_p plugin_path unless File.exists? plugin_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def plugin_path
|
15
|
+
@proot_path ||= File.expand_path("plugins/#{@name}", @ctx.getAppDir.getAbsolutePath)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'sinatra/base'
|
3
|
+
#require 'sinatra/config_file'
|
4
|
+
require 'sinatra/contrib'
|
5
|
+
require 'sinatra/cookies'
|
6
|
+
require 'sinatra/json'
|
7
|
+
require 'sinatra/namespace'
|
8
|
+
require 'sinatra/reloader'
|
9
|
+
#require 'sinatra/webdav'
|
10
|
+
require 'better_errors'
|
11
|
+
require 'binding_of_caller'
|
12
|
+
|
13
|
+
module Ji2p
|
14
|
+
module Startup
|
15
|
+
class SinatraApp < Sinatra::Base
|
16
|
+
APP_ROOT = File.expand_path('../..', __dir__) unless defined? APP_ROOT
|
17
|
+
|
18
|
+
use Rack::Session::Cookie, :key => 'rack.session',
|
19
|
+
:domain => 'localhost',
|
20
|
+
:path => '/',
|
21
|
+
:expire_after => 2592000, # In seconds
|
22
|
+
:secret => 'kake'
|
23
|
+
|
24
|
+
set :environments, %w{development test production staging}
|
25
|
+
enable :sessions, :logging
|
26
|
+
set :sessions, true
|
27
|
+
set :logging, true
|
28
|
+
set :server, %w[puma webrick]
|
29
|
+
set :app_file, __FILE__
|
30
|
+
set :public_folder, Proc.new { File.join(APP_ROOT, 'public') }
|
31
|
+
set :protection, :session => true
|
32
|
+
unless ENV['APP_ENV'].nil?
|
33
|
+
set :environment, ENV['APP_ENV']
|
34
|
+
else
|
35
|
+
set :environment, :development
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
configure :development do
|
40
|
+
register Sinatra::Reloader
|
41
|
+
|
42
|
+
use BetterErrors::Middleware
|
43
|
+
BetterErrors.application_root = APP_ROOT
|
44
|
+
|
45
|
+
set :reload_stuff, true
|
46
|
+
end
|
47
|
+
|
48
|
+
register Sinatra::Namespace
|
49
|
+
#register Sinatra::ConfigFile
|
50
|
+
|
51
|
+
helpers Sinatra::Cookies
|
52
|
+
|
53
|
+
set :show_exceptions, false
|
54
|
+
|
55
|
+
get '/' do
|
56
|
+
json :sinatra => { :status => 'OK', :request => request.env.to_json }
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ji2p-router
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: universal-java-11
|
6
|
+
authors:
|
7
|
+
- Mikal Villa
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-11-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '2.0'
|
19
|
+
name: bundler
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
name: jar-dependencies
|
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
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '13.0'
|
47
|
+
name: rake
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.0'
|
61
|
+
name: warbler
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
name: awesome_print
|
76
|
+
type: :development
|
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
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
name: rspec
|
90
|
+
type: :development
|
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
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
name: pry
|
104
|
+
type: :development
|
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
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '3.3'
|
117
|
+
name: ruby-maven
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.3'
|
125
|
+
description: JRuby interface for I2P, sub-gem to control the router process
|
126
|
+
email: mikalv@mikalv.net
|
127
|
+
executables: []
|
128
|
+
extensions: []
|
129
|
+
extra_rdoc_files: []
|
130
|
+
files:
|
131
|
+
- lib/ji2p-server.rb
|
132
|
+
- lib/ji2p/server.rb
|
133
|
+
- lib/ji2p/server/api.rb
|
134
|
+
- lib/ji2p/server/http.rb
|
135
|
+
- lib/ji2p/server/http_server.rb
|
136
|
+
- lib/ji2p/server/initializer.rb
|
137
|
+
- lib/ji2p/server/launcher.rb
|
138
|
+
- lib/ji2p/startup/client_application.rb
|
139
|
+
- lib/ji2p/startup/sinatra_app.rb
|
140
|
+
homepage: https://github.com/mikalv/ji2p
|
141
|
+
licenses:
|
142
|
+
- Apache-2.0
|
143
|
+
metadata:
|
144
|
+
allowed_push_host: https://rubygems.org
|
145
|
+
post_install_message: Thanks for installing!
|
146
|
+
rdoc_options: []
|
147
|
+
require_paths:
|
148
|
+
- lib
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements:
|
160
|
+
- jar net.i2p, i2p, 0.9.43
|
161
|
+
- jar net.i2p, router, 0.9.43
|
162
|
+
rubygems_version: 3.0.6
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: JRuby interface for I2P
|
166
|
+
test_files: []
|