ji2p 0.0.3-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) 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/gem_installer.rb +89 -0
  36. data/lib/ji2p/jar_dependencies.rb +15 -0
  37. data/lib/ji2p/proxy_support.rb +46 -0
  38. data/lib/ji2p/rspec.rb +16 -0
  39. data/lib/ji2p/server.rb +10 -0
  40. data/lib/ji2p/server/api.rb +14 -0
  41. data/lib/ji2p/server/database.rb +66 -0
  42. data/lib/ji2p/server/http.rb +69 -0
  43. data/lib/ji2p/server/http_server.rb +37 -0
  44. data/lib/ji2p/server/initializer.rb +4 -0
  45. data/lib/ji2p/server/launcher.rb +40 -0
  46. data/lib/ji2p/server/models.rb +9 -0
  47. data/lib/ji2p/server/models/base_record.rb +7 -0
  48. data/lib/ji2p/server/models/keypair.rb +32 -0
  49. data/lib/ji2p/server/models/tunnel.rb +4 -0
  50. data/lib/ji2p/startup.rb +12 -0
  51. data/lib/ji2p/startup/bootstrap.rb +60 -0
  52. data/lib/ji2p/startup/client_application.rb +20 -0
  53. data/lib/ji2p/startup/router_manager.rb +21 -0
  54. data/lib/ji2p/startup/sinatra_app.rb +61 -0
  55. data/lib/ji2p/utils/blocking_queue.rb +32 -0
  56. data/lib/ji2p/version.rb +3 -0
  57. data/lib/ji2p_jars.rb +16 -0
  58. data/lib/maybe.rb +148 -0
  59. data/lib/net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar +0 -0
  60. data/lib/net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar +0 -0
  61. data/lib/net/i2p/i2p/0.9.43/i2p-0.9.43.jar +0 -0
  62. data/lib/net/i2p/router/0.9.43/router-0.9.43.jar +0 -0
  63. metadata +375 -0
@@ -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
@@ -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,21 @@
1
+ require 'java'
2
+
3
+ module Ji2p::Startup
4
+ class RouterManager
5
+ @@router = nil
6
+ include_package 'net.i2p.router'
7
+
8
+ def self.start_router!
9
+ @@router = RouterLaunch.main ARGV if @@router.nil?
10
+ end
11
+
12
+ def self.router_context
13
+ RouterContext.getCurrentContext
14
+ end
15
+
16
+ def self.get_leases
17
+ ctx = RouterManager.router_context
18
+ ctx.netDb.get_leases.to_a
19
+ end
20
+ end
21
+ 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
@@ -0,0 +1,32 @@
1
+ require 'thread'
2
+
3
+ module Ji2p
4
+ module Utils
5
+ class BlockingQueue
6
+ attr_reader :queue, :mutex, :cv
7
+
8
+ def initialize
9
+ @queue = Array.new
10
+ @mutex = Mutex.new
11
+ @cv = ConditionVariable.new
12
+ end
13
+
14
+ def push(ele)
15
+ @mutex.synchronize do
16
+ @queue.push ele
17
+ @cv.signal
18
+ end
19
+ end
20
+
21
+ def pop
22
+ @mutex.synchronize do
23
+ while @queue.empty?
24
+ @cv.wait(@mutex)
25
+ end
26
+
27
+ @queue.pop
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,3 @@
1
+ module Ji2p
2
+ VERSION = '0.0.3'.freeze unless defined? VERSION
3
+ end
data/lib/ji2p_jars.rb ADDED
@@ -0,0 +1,16 @@
1
+ # this is a generated file, to avoid over-writing it just delete this comment
2
+ begin
3
+ require 'jar_dependencies'
4
+ rescue LoadError
5
+ require 'net/i2p/router/0.9.43/router-0.9.43.jar'
6
+ require 'net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar'
7
+ require 'net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar'
8
+ require 'net/i2p/i2p/0.9.43/i2p-0.9.43.jar'
9
+ end
10
+
11
+ if defined? Jars
12
+ require_jar 'net.i2p', 'router', '0.9.43'
13
+ require_jar 'net.i2p.client', 'mstreaming', '0.9.43'
14
+ require_jar 'net.i2p.client', 'streaming', '0.9.43'
15
+ require_jar 'net.i2p', 'i2p', '0.9.43'
16
+ end