ji2p 0.0.3-jruby-java-universal-java-9

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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bundle +15 -0
  3. data/bin/ctxirb +119 -0
  4. data/bin/simple_http_server +20 -0
  5. data/bin/simple_outproxy +96 -0
  6. data/lib/actor_system/actor.rb +10 -0
  7. data/lib/actor_system/concurrent/processor.rb +21 -0
  8. data/lib/actor_system/concurrent/worker.rb +13 -0
  9. data/lib/actor_system/core/minimal.rb +84 -0
  10. data/lib/actor_system/core/observable_implementation.rb +58 -0
  11. data/lib/actor_system/core/props.rb +45 -0
  12. data/lib/actor_system/dispatcher.rb +12 -0
  13. data/lib/actor_system/mailbox.rb +7 -0
  14. data/lib/actor_system/message.rb +60 -0
  15. data/lib/core_ext.rb +41 -0
  16. data/lib/gen_server.rb +57 -0
  17. data/lib/ji2p.rb +37 -0
  18. data/lib/ji2p/bundler.rb +165 -0
  19. data/lib/ji2p/cluster.rb +6 -0
  20. data/lib/ji2p/cluster/etcd.rb +5 -0
  21. data/lib/ji2p/cluster/etcd/version3.rb +6 -0
  22. data/lib/ji2p/cluster/kubernetes.rb +5 -0
  23. data/lib/ji2p/cluster/kubernetes/kube_api.rb +6 -0
  24. data/lib/ji2p/concurrent.rb +24 -0
  25. data/lib/ji2p/concurrent_executor.rb +56 -0
  26. data/lib/ji2p/config.rb +15 -0
  27. data/lib/ji2p/control.rb +15 -0
  28. data/lib/ji2p/control/client_manager.rb +14 -0
  29. data/lib/ji2p/control/dest.rb +34 -0
  30. data/lib/ji2p/control/keypair.rb +176 -0
  31. data/lib/ji2p/control/server.rb +80 -0
  32. data/lib/ji2p/control/socket_manager.rb +77 -0
  33. data/lib/ji2p/control/tunnel_manager.rb +62 -0
  34. data/lib/ji2p/environment.rb +35 -0
  35. data/lib/ji2p/package/gem_installer.rb +91 -0
  36. data/lib/ji2p/package/gemfile.rb +234 -0
  37. data/lib/ji2p/package/jar_dependencies.rb +23 -0
  38. data/lib/ji2p/package/proxy_support.rb +50 -0
  39. data/lib/ji2p/rspec.rb +16 -0
  40. data/lib/ji2p/server.rb +10 -0
  41. data/lib/ji2p/server/api.rb +14 -0
  42. data/lib/ji2p/server/database.rb +66 -0
  43. data/lib/ji2p/server/http.rb +69 -0
  44. data/lib/ji2p/server/http_server.rb +37 -0
  45. data/lib/ji2p/server/initializer.rb +4 -0
  46. data/lib/ji2p/server/launcher.rb +40 -0
  47. data/lib/ji2p/server/models.rb +9 -0
  48. data/lib/ji2p/server/models/base_record.rb +7 -0
  49. data/lib/ji2p/server/models/keypair.rb +32 -0
  50. data/lib/ji2p/server/models/tunnel.rb +4 -0
  51. data/lib/ji2p/startup.rb +12 -0
  52. data/lib/ji2p/startup/bootstrap.rb +60 -0
  53. data/lib/ji2p/startup/client_application.rb +20 -0
  54. data/lib/ji2p/startup/router_manager.rb +21 -0
  55. data/lib/ji2p/startup/sinatra_app.rb +61 -0
  56. data/lib/ji2p/startup/worker.rb +63 -0
  57. data/lib/ji2p/utils/blocking_queue.rb +32 -0
  58. data/lib/ji2p/utils/byte_value.rb +61 -0
  59. data/lib/ji2p/version.rb +3 -0
  60. data/lib/ji2p_jars.rb +16 -0
  61. data/lib/maybe.rb +148 -0
  62. data/lib/net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar +0 -0
  63. data/lib/net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar +0 -0
  64. data/lib/net/i2p/i2p/0.9.43/i2p-0.9.43.jar +0 -0
  65. data/lib/net/i2p/router/0.9.43/router-0.9.43.jar +0 -0
  66. metadata +392 -0
@@ -0,0 +1,23 @@
1
+ require "jar_dependencies"
2
+
3
+ module Ji2p
4
+ module Package
5
+ module JarDependencies
6
+ extend self
7
+
8
+ def require_jar( *args )
9
+ return nil unless Jars.require?
10
+ result = Jars.require_jar( *args )
11
+ if result.is_a? String
12
+ # JAR_DEBUG=1 will now show theses
13
+ Jars.debug { "--- jar coordinate #{args[0..-2].join( ':' )} already loaded with version #{result} - omit version #{args[-1]}" }
14
+ Jars.debug { " try to load from #{caller.join("\n\t")}" }
15
+ return false
16
+ end
17
+ Jars.debug { " register #{args.inspect} - #{result == true}" }
18
+ result
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+ require "uri"
3
+ require "java"
4
+ require "erb"
5
+
6
+ module Ji2p
7
+ module Package
8
+ module ProxySupport
9
+ extend self
10
+
11
+ # Apply HTTP_PROXY and HTTPS_PROXY to the current environment
12
+ # this will be used by any JRUBY calls
13
+ def apply_env_proxy_settings(settings)
14
+ $stderr.puts("Using proxy #{settings}") if ENV["DEBUG"]
15
+ scheme = settings[:protocol].downcase
16
+ java.lang.System.setProperty("#{scheme}.proxyHost", settings[:host])
17
+ java.lang.System.setProperty("#{scheme}.proxyPort", settings[:port].to_s)
18
+ java.lang.System.setProperty("#{scheme}.proxyUsername", settings[:username].to_s)
19
+ java.lang.System.setProperty("#{scheme}.proxyPassword", settings[:password].to_s)
20
+ end
21
+
22
+ def extract_proxy_values_from_uri(proxy_uri)
23
+ {
24
+ :protocol => proxy_uri.scheme,
25
+ :host => proxy_uri.host,
26
+ :port => proxy_uri.port,
27
+ :username => proxy_uri.user,
28
+ :password => proxy_uri.password
29
+ }
30
+ end
31
+
32
+ def parse_proxy_string(proxy_string)
33
+ proxy_uri = URI.parse(proxy_string)
34
+ if proxy_uri.kind_of?(URI::HTTP) # URI::HTTPS is already a subclass of URI::HTTP
35
+ proxy_uri
36
+ else
37
+ raise "Invalid proxy `#{proxy_uri}`. The URI is not HTTP/HTTPS."
38
+ end
39
+ end
40
+
41
+ def get_proxy(key)
42
+ ENV[key.downcase] || ENV[key.upcase]
43
+ end
44
+
45
+ def proxy_string_exists?(proxy)
46
+ !proxy.nil? && !proxy.strip.empty?
47
+ end
48
+ end
49
+ end
50
+ end
data/lib/ji2p/rspec.rb ADDED
@@ -0,0 +1,16 @@
1
+ require_relative 'environment'
2
+ Ji2p::Bundler.setup!({:without => [:build]})
3
+ require 'ji2p'
4
+
5
+ $LOAD_PATH.unshift(File.join(Ji2p::Environment::JI2P_CORE, "spec"))
6
+
7
+ require 'rspec/core'
8
+ require 'rspec'
9
+
10
+ RSpec.world.reset # if multiple rspec runs occur in a single process, the RSpec "world" state needs to be reset.
11
+
12
+ status = RSpec::Core::Runner.run(ARGV.empty? ? ($JUNIT_ARGV || ["spec"]) : ARGV).to_i
13
+ if ENV["IS_JUNIT_RUN"]
14
+ return status
15
+ end
16
+ exit status if status != 0
@@ -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,14 @@
1
+ require 'sinatra'
2
+ require 'rack'
3
+ require 'puma'
4
+
5
+ module Ji2p::Server
6
+ class Api
7
+ def initialize
8
+ configure { set :server, :puma }
9
+
10
+ #Faye::WebSocket.load_adapter('puma')
11
+ @puma = Rack::Handler.get('puma')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,66 @@
1
+ require 'active_record'
2
+
3
+ module Ji2p::Server
4
+ module Database
5
+ @@connections = Hash.new
6
+ @@default_connection = nil
7
+
8
+ def self.connect! db=':memory:', db_type='sqlite3'
9
+ conn = ActiveRecord::Base.establish_connection(database: db, adapter: db_type)
10
+ key = "#{db}/#{db_type}/#{Ji2p::Control.unique_id.to_s}"
11
+ @@connections[key] = conn
12
+ @@default_connection = conn if @@default_connection.nil?
13
+ define_state_schema!
14
+ conn
15
+ end
16
+
17
+ def self.connect_with_local_path! name
18
+ java_import 'net.i2p.I2PAppContext'
19
+ ctx = Java::NetI2p::I2PAppContext.getGlobalContext
20
+ path = File.join ctx.getConfigDir.toString, name
21
+ connect! path
22
+ end
23
+
24
+ def self.flush
25
+ @@default_connection.flush
26
+ end
27
+
28
+ def self.default
29
+ @@default_connection
30
+ end
31
+
32
+ def self.is_connected?
33
+ get_connections.size > 0
34
+ end
35
+
36
+ def self.get_connections
37
+ @@connections
38
+ end
39
+
40
+ def self.define_state_schema! b_force=false
41
+ ActiveRecord::Schema.define do
42
+ create_table :keypairs, force: b_force do |t|
43
+ t.string :strid
44
+ t.string :name
45
+ t.text :destination
46
+ t.string :base32
47
+ t.text :private_key_data
48
+ t.json :metadata
49
+ t.timestamps
50
+ end unless ActiveRecord::Base.connection.table_exists? 'keypairs' or b_force
51
+ create_table :tunnels, force: b_force do |t|
52
+ t.string :name
53
+ t.text :description
54
+ t.json :metadata
55
+ t.references :keypair
56
+ t.string :tunnel_type
57
+ t.integer :listen_port
58
+ t.integer :target_port
59
+ t.string :listen_interface
60
+ t.string :target_host
61
+ t.timestamps
62
+ end unless ActiveRecord::Base.connection.table_exists? 'tunnels' or b_force
63
+ end
64
+ end
65
+ end
66
+ 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,4 @@
1
+ module Ji2p::Server
2
+ module Initializer
3
+ end
4
+ 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,9 @@
1
+ require 'active_record'
2
+
3
+ module Ji2p::Server
4
+ module Models
5
+ autoload :BaseRecord, File.expand_path('models/base_record.rb', __dir__)
6
+ autoload :Keypair, File.expand_path('models/keypair.rb', __dir__)
7
+ autoload :Tunnel, File.expand_path('models/tunnel.rb', __dir__)
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'active_record'
2
+
3
+ module Ji2p::Server::Models
4
+ class BaseRecord < ActiveRecord::Base
5
+ self.abstract_class = true
6
+ end
7
+ end
@@ -0,0 +1,32 @@
1
+ require 'active_record'
2
+ require 'base64'
3
+
4
+ module Ji2p::Server::Models
5
+ Ji2p::Control::Keypair.class_eval do
6
+ def to_activerecord
7
+ row = Ji2p::Server::Models::Keypair.new
8
+ row.destination = @dest.base64
9
+ row.base32 = @dest.base32
10
+ row.private_key_data = Base64.encode64(@data)
11
+ row
12
+ end
13
+
14
+ private
15
+
16
+ def write_dummy_stream obj
17
+ s = StringIO.new
18
+ obj.writeBytes(s.to_outputstream)
19
+ Base64.encode64 s.string
20
+ end
21
+ end
22
+ class Keypair < BaseRecord
23
+
24
+ def pk_data
25
+ Base64.decode64(private_key_data)
26
+ end
27
+
28
+ def getKeypairInstance
29
+ Ji2p::Control::Keypair.load_from_stream! StringIO.new(pk_data)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ module Ji2p::Server::Models
2
+ class Tunnel < BaseRecord
3
+ end
4
+ end
@@ -0,0 +1,12 @@
1
+ module Ji2p
2
+ module Startup
3
+ autoload :Bootstrap, File.expand_path('startup/bootstrap.rb', __dir__)
4
+ autoload :RouterManager, File.expand_path('startup/router_manager.rb', __dir__)
5
+
6
+ TMPDIR = File.expand_path('../../tmp', __dir__) unless defined? TMPDIR
7
+
8
+ def self.tmp_dir
9
+ TMPDIR
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,60 @@
1
+ require 'java'
2
+
3
+ module Ji2p::Startup
4
+ java_import java.lang.ClassLoader
5
+ java_import java.lang.System
6
+
7
+ class Bootstrap
8
+ def initialize defaults={'i2p.dir.config' => TMPDIR}
9
+ @defaults = defaults
10
+ end
11
+
12
+ def set_system_property key, value
13
+ System.setProperty key.to_s, value.to_s
14
+ end
15
+
16
+ def get_system_property value
17
+ System.getProperty[value.to_s]
18
+ end
19
+
20
+ def load_jars
21
+ java_import java.lang.Thread
22
+ java_import java.net.URL
23
+ cl = Thread.currentThread.getContextClassLoader
24
+ dirname = System.getProperties['i2p.dir.base']
25
+ Dir["#{dirname}/lib/**.jar"].each do |jar|
26
+ u = Java::JavaNet::URL.new "file://#{jar}"
27
+ cl.addURL u
28
+ end
29
+ end
30
+
31
+ def i2p_loaded?
32
+ java_import java.lang.Thread
33
+ cl = Thread.currentThread.getContextClassLoader
34
+ cl.getURLs.select { |item| item.to_s.include? 'i2p.jar' }.size > 0
35
+ end
36
+
37
+ def check_and_set_props!
38
+ if System.getProperties['i2p.dir.base'].nil?
39
+ unless ENV['I2PDIR'].nil?
40
+ System.setProperty 'i2p.dir.base', ENV['I2PDIR'].to_s
41
+ else
42
+ raise ArgumentError, 'The system property i2p.dir.base is missing!', caller if @defaults['i2p.dir.base'].nil?
43
+ end
44
+ end
45
+ if System.getProperties['i2p.dir.config'].nil?
46
+ raise ArgumentError, 'The system property i2p.dir.config is missing!', caller if @defaults['i2p.dir.config'].nil?
47
+ System.setProperty 'i2p.dir.config', @defaults['i2p.dir.config']
48
+ end
49
+ System.setProperty 'java.awt.headless', 'true' if System.getProperties['java.awt.headless'].nil?
50
+ System.setProperty 'java.library.path', "#{System.getProperties['i2p.dir.base']}/lib" if System.getProperties['java.library.path'].nil?
51
+ end
52
+
53
+ def boot!
54
+ check_and_set_props!
55
+ load_jars unless i2p_loaded?
56
+ RouterManager.start_router!
57
+ RouterManager.router_context
58
+ end
59
+ end
60
+ end