ji2p 0.0.4-universal-java-11

Sign up to get free protection for your applications and to get access to all the features.
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,6 @@
1
+ module Ji2p::Cluster
2
+ module Etcd
3
+ class Version3
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Ji2p::Cluster
2
+ module Kubernetes
3
+ autoload :KubeApi, File.expand_path('kubernetes/kube_api.rb', __dir__)
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module Ji2p::Cluster
2
+ module Kubernetes
3
+ class KubeApi
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ require 'concurrent'
2
+
3
+ module Ji2p
4
+ module Concurrent
5
+ java_import java.util.concurrent
6
+
7
+ def self.getThreadPool
8
+ @service ||= Executors.new_fixed_thread_pool(10)
9
+
10
+ # shutdown our ExecutorService when someone kills us
11
+ Kernel.trap('SIGINT') { service.shutdown }
12
+
13
+ end
14
+
15
+
16
+ def self.getSimpleThredPool
17
+ @pool ||= Concurrent::ThreadPoolExecutor.new(
18
+ min_threads: 3, # create up to 3 threads before queueing tasks
19
+ max_threads: 10, # create at most 10 threads
20
+ max_queue: 100, # at most 100 jobs waiting in the queue
21
+ )
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,56 @@
1
+ module Ji2p
2
+ module ConcurrentExecutor
3
+ class Error < StandardError
4
+ def initialize(exceptions)
5
+ @exceptions = exceptions
6
+ super
7
+ end
8
+
9
+ def message
10
+ @exceptions.map { | e | e.message }.join "\n"
11
+ end
12
+
13
+ def backtrace
14
+ traces = @exceptions.map { |e| e.backtrace }
15
+ ["ConcurrentExecutor::Error START", traces, "END"].flatten
16
+ end
17
+ end
18
+
19
+ class Future
20
+ def initialize(pool: nil)
21
+ @pool = pool || Concurrent::FixedThreadPool.new(20)
22
+ @exceptions = Concurrent::Array.new
23
+ end
24
+
25
+ # Sample Usage
26
+ # executor = ConcurrentExecutor::Future.new(pool: pool)
27
+ # executor.execute(carriers) do | carrier |
28
+ # ...
29
+ # end
30
+ #
31
+ # values = executor.resolve
32
+
33
+ def execute array, &block
34
+ @futures = array.map do | element |
35
+ Concurrent::Future.execute({ executor: @pool }) do
36
+ yield(element)
37
+ end.rescue do | exception |
38
+ @exceptions << exception
39
+ end
40
+ end
41
+
42
+ self
43
+ end
44
+
45
+ def resolve
46
+ values = @futures.map(&:value)
47
+
48
+ if @exceptions.length > 0
49
+ raise ConcurrentExecutor::Error.new(@exceptions)
50
+ end
51
+
52
+ values
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,15 @@
1
+ require 'ostruct'
2
+ require 'yaml'
3
+
4
+ module Ji2p
5
+ class Config
6
+ def method_missing(m, *args, &block)
7
+ end
8
+
9
+ def respond_to?(method_name, include_private = false)
10
+ end
11
+
12
+ def respond_to_missing?(method_name, *args)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'digest/sha1'
2
+
3
+ module Ji2p
4
+ module Control
5
+ autoload :ClientManager, File.expand_path('control/client_manager.rb', __dir__)
6
+ autoload :Dest, File.expand_path('control/dest.rb', __dir__)
7
+ autoload :Keypair, File.expand_path('control/keypair.rb', __dir__)
8
+ autoload :SocketManager, File.expand_path('control/socket_manager.rb', __dir__)
9
+ autoload :TunnelManager, File.expand_path('control/tunnel_manager.rb', __dir__)
10
+
11
+ def self.unique_id
12
+ Digest::SHA1.hexdigest([Time.now, rand].join)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Ji2p::Control
2
+ class ClientManager
3
+ java_import 'net.i2p.client.I2PClient'
4
+ java_import 'net.i2p.client.I2PClientFactory'
5
+
6
+ def self.listClients
7
+ context.clientManager.listClients.to_a
8
+ end
9
+
10
+ def self.context
11
+ RouterContext.getCurrentContext
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ require 'java'
2
+
3
+ module Ji2p::Control
4
+ class Dest
5
+ java_import 'net.i2p.data.Destination'
6
+
7
+ def initialize keypair=nil
8
+ setKeypair(keypair) unless keypair.nil?
9
+ end
10
+
11
+ def setKeypair keypair
12
+ return if keypair.nil?
13
+ @keypair = keypair
14
+ @dest = Java::NetI2pData::Destination.create keypair.inputstream
15
+ #@dest.setPublicKey @keypair.pub
16
+ #@dest.setSigningPublicKey @keypair.spub
17
+ #@dest.setCertificate @keypair.cert
18
+ #@dest.setPadding @keypair.padding
19
+ end
20
+
21
+ def base64
22
+ @dest.toBase64
23
+ end
24
+
25
+ def base32
26
+ @dest.toBase32
27
+ end
28
+
29
+ def raw
30
+ @dest
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,176 @@
1
+ require 'java'
2
+ require 'thread'
3
+ require File.expand_path('dest.rb', __dir__)
4
+
5
+ module Ji2p::Control
6
+ java_import 'net.i2p.crypto.SigType'
7
+ java_import 'net.i2p.crypto.EncType'
8
+ java_import 'net.i2p.I2PAppContext'
9
+ java_import 'net.i2p.data.SigningPublicKey'
10
+ java_import 'net.i2p.data.SigningPrivateKey'
11
+ java_import 'net.i2p.data.Certificate'
12
+ java_import 'net.i2p.data.KeyCertificate'
13
+ java_import 'net.i2p.data.PublicKey'
14
+ java_import 'net.i2p.data.PrivateKey'
15
+ java_import 'net.i2p.data.Destination'
16
+ java_import 'net.i2p.crypto.KeyGenerator'
17
+ java_import 'net.i2p.client.I2PClientFactory'
18
+ java_import 'java.util.Properties'
19
+ java_import 'java.lang.Thread'
20
+
21
+ DEFAULT_SIG_TYPE = Java::NetI2pCrypto::SigType::EdDSA_SHA512_Ed25519 unless defined? DEFAULT_SIG_TYPE
22
+ DEFAULT_ENC_TYPE = Java::NetI2pCrypto::EncType::ELGAMAL_2048 unless defined? DEFAULT_ENC_TYPE
23
+
24
+ VALID_ENC_TYPES = Java::NetI2pCrypto::EncType.constants.map { |c| c.to_s }.freeze unless defined? VALID_ENC_TYPES
25
+ VALID_SIG_TYPES = Java::NetI2pCrypto::SigType.constants.map { |c| c.to_s }.freeze unless defined? VALID_SIG_TYPES
26
+
27
+ module KeyGen
28
+ def self.genPKIkeys
29
+ KeyGenerator.getInstance.generatePKIKeypair
30
+ end
31
+
32
+ def self.genSigningKeys(arg=nil)
33
+ unless arg.nil?
34
+ KeyGenerator.getInstance.generateSigningKeys arg
35
+ else
36
+ KeyGenerator.getInstance.generateSigningKeys
37
+ end
38
+ end
39
+ end
40
+
41
+ class Keypair
42
+ attr_accessor :dest, :cert, :pub, :spub, :priv, :spriv
43
+
44
+ def self.generate! sig=DEFAULT_SIG_TYPE
45
+ ost = StringIO.new
46
+ c = I2PClientFactory.createClient
47
+ c.createDestination(ost.to_outputstream, sig)
48
+ keystream = StringIO.new ost.string
49
+ load_from_stream! keystream
50
+ end
51
+
52
+ def self.load_from_stream! keystream
53
+ c = I2PClientFactory.createClient
54
+ s = c.createSession(keystream.to_inputstream, Java::JavaUtil::Properties.new)
55
+ pub = s.myDestination.getPublicKey
56
+ spub = s.myDestination.getSigningPublicKey
57
+ priv = s.decryptionKey
58
+ spriv = s.privateKey
59
+ # This will be equal to the content of a
60
+ # net.i2p.data.PrivateKeyFile
61
+ cert = s.myDestination.getCertificate
62
+ new cert,pub,priv,spub,spriv,keystream.string
63
+ end
64
+
65
+ def initialize cert,pub,priv,spub,spriv,data
66
+ @cert = cert
67
+ @pub = pub
68
+ @priv = priv
69
+ @spub = spub
70
+ @spriv = spriv
71
+ @data = data
72
+ @dest = Ji2p::Control::Dest.new
73
+ @dest.setKeypair self
74
+ end
75
+
76
+ def inputstream
77
+ stream = StringIO.new @data
78
+ stream.to_inputstream
79
+ end
80
+
81
+ def destination
82
+ @dest
83
+ end
84
+
85
+ def createSession opts=Java::JavaUtil::Properties.new
86
+ c = I2PClientFactory.createClient
87
+ @session = c.createSession(inputstream, opts)
88
+ @session
89
+ end
90
+
91
+ def private_key_format
92
+ @data
93
+ end
94
+
95
+ def padding_size
96
+ ((Java::NetI2pData::SigningPublicKey::KEYSIZE_BYTES - @spub.length)
97
+ + (Java::NetI2pData::PublicKey::KEYSIZE_BYTES - @pub.length))
98
+ end
99
+
100
+ def padding
101
+ SecureRandom.random_bytes(padding_size).to_java_bytes
102
+ end
103
+
104
+ def write_file f
105
+ f = File.open(f, 'wb') unless f.is_a? File
106
+ f.write(@data)
107
+ f.close
108
+ end
109
+
110
+ module Old
111
+ def self.old_generate! sig=DEFAULT_SIG_TYPE, enc=DEFAULT_ENC_TYPE
112
+ if sig.is_a? String
113
+ unless VALID_SIG_TYPES.include? sig
114
+ raise ArgumentError, 'Unknown signature type', caller
115
+ end
116
+ sig = Java::NetI2pCrypto::SigType.const_get sig
117
+ end
118
+ if enc.is_a? String
119
+ unless VALID_ENC_TYPES.include? enc
120
+ raise ArgumentError, 'Unknown encryption type', caller
121
+ end
122
+ enc = Java::NetI2pCrypto::EncType.const_get enc
123
+ end
124
+ ctx = I2PAppContext.getGlobalContext
125
+ enckp = ctx.keyGenerator.generatePKIKeys enc
126
+ pub = enckp.getPublic.to_java(Java::NetI2pData::PublicKey)
127
+ priv = enckp.getPrivate.to_java(Java::NetI2pData::PrivateKey)
128
+ if (sig != Java::NetI2pCrypto::SigType::DSA_SHA1) or (enc != Java::NetI2pCrypto::EncType::ELGAMAL_2048)
129
+ unless sig.getPubkeyLen > 128
130
+ cert = Java::NetI2pData::KeyCertificate.new sig,enc
131
+ else
132
+ raise ArgumentError, 'Wrong combination of enc/sig keys', caller
133
+ end
134
+ else
135
+ cert = Java::NetI2pData::Certificate::NULL_CERT
136
+ end
137
+ signingkp = ctx.keyGenerator.generateSigningKeys sig.to_java
138
+ #signingkp = KeyGen.genSigningKeys sig
139
+ spub = signingkp[0].to_java(Java::NetI2pData::SigningPublicKey)
140
+ spriv = signingkp[1].to_java(Java::NetI2pData::SigningPrivateKey)
141
+ #cert.calculateHash
142
+ data = old_getPrivateKeyFileFormat cert,pub,priv,spub,spriv
143
+ new cert,pub,priv,spub,spriv,data
144
+ end
145
+
146
+ def self.old_getPrivateKeyFileFormat cert,pub,priv,spub,spriv
147
+ out = StringIO.new
148
+ outs = out.to_outputstream
149
+ pub.writeBytes outs
150
+ padding_size = ((Java::NetI2pData::SigningPublicKey::KEYSIZE_BYTES - spub.length)
151
+ + (Java::NetI2pData::PublicKey::KEYSIZE_BYTES - pub.length))
152
+ if padding_size > 0
153
+ outs.write SecureRandom.random_bytes(padding_size).to_java_bytes
154
+ end
155
+ spub.writeBytes outs
156
+ cert.writeBytes outs
157
+ priv.writeBytes outs
158
+ spriv.writeBytes outs
159
+ outs.flush
160
+ outs.close
161
+ StringIO.new out.string
162
+ end
163
+
164
+ def self.old_load_from_obj! obj
165
+ pub = Java::NetI2pData::PublicKey.new obj[:enc_type],obj[:public_key].to_java_bytes
166
+ priv = Java::NetI2pData::PrivateKey.new obj[:enc_type],obj[:private_key].to_java_bytes
167
+ spub = Java::NetI2pData::SigningPublicKey.new obj[:sig_type],obj[:signing_public_key].to_java_bytes
168
+ spriv = Java::NetI2pData::SigningPrivateKey.new obj[:sig_type],obj[:signing_private_key].to_java_bytes
169
+ cert = Java::NetI2pData::KeyCertificate.new spub,pub
170
+ data = old_getPrivateKeyFileFormat cert,pub,priv,spub,spriv
171
+ new cert,pub,priv,spub,spriv,data
172
+ end
173
+ end
174
+
175
+ end
176
+ end
@@ -0,0 +1,80 @@
1
+ require 'java'
2
+ require 'thread'
3
+
4
+ module Ji2p::Control
5
+
6
+ class ServerConnection
7
+ def initialize i2pconn
8
+ @i2pconn = i2pconn
9
+ end
10
+
11
+ def raw
12
+ @i2pconn
13
+ end
14
+
15
+ def close
16
+ @i2pconn.close
17
+ end
18
+
19
+ def is_closed?
20
+ @i2pconn.is_closed
21
+ end
22
+
23
+ def write data
24
+ @i2pconn.getOutputStream.write data.to_java_bytes
25
+ end
26
+
27
+ def getPeerDestination
28
+ @i2pconn.getPeerDestination
29
+ end
30
+
31
+ def readstring n=nil
32
+ String.from_java_bytes readbytes(n || readybytes)
33
+ end
34
+
35
+ def readline
36
+ line = ""
37
+ loop {
38
+ c = String.from_java_bytes(readbytes(1))
39
+ break if c=="\n"
40
+ line += c
41
+ }
42
+ line + "\n"
43
+ end
44
+
45
+ def readbytes n=nil
46
+ return nil if is_closed?
47
+ num = n || readybytes
48
+ @i2pconn.getInputStream.readNBytes num
49
+ end
50
+
51
+ def readybytes
52
+ @i2pconn.getInputStream.totalReadySize
53
+ end
54
+
55
+ alias :read :readstring
56
+ alias :gets :readline
57
+ alias :puts :write
58
+
59
+ def toString
60
+ b32 = @i2pconn.getPeerDestination.toBase32
61
+ "<ServerConnection client=#{b32} is_closed=#{@i2pconn.is_closed}>"
62
+ end
63
+ end
64
+
65
+ class SocketServer
66
+
67
+ def initialize i2psocket
68
+ @i2psocket = i2psocket
69
+ end
70
+
71
+ def accept
72
+ ServerConnection.new @i2psocket.accept
73
+ end
74
+
75
+ def raw
76
+ @i2psocket
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,77 @@
1
+ require 'java'
2
+ require 'thread'
3
+ require_relative 'server.rb'
4
+
5
+ module Ji2p::Control
6
+ java_import 'net.i2p.I2PAppContext'
7
+ java_import 'net.i2p.client.I2PClientFactory'
8
+ java_import 'net.i2p.client.streaming.I2PSocketManager'
9
+ java_import 'net.i2p.client.streaming.I2PSocketManagerFactory'
10
+ java_import 'net.i2p.client.streaming.IncomingConnectionFilter'
11
+ java_import 'java.util.Properties'
12
+ java_import 'java.lang.Thread'
13
+
14
+ class SocketManager
15
+
16
+ def self.defineManager! name, kp, opts=Java::JavaUtil::Properties.new, filter=IncomingConnectionFilter::ALLOW
17
+ ctx = I2PAppContext.getGlobalContext
18
+ session = kp.createSession opts
19
+ new get_impl.new(ctx,session,opts,name,filter)
20
+ end
21
+
22
+ def connectTunnel
23
+ @smgr.getSession.connect
24
+ end
25
+
26
+ def myDestination
27
+ @smgr.getSession.myDestination
28
+ end
29
+
30
+ def leaseSet
31
+ @smgr.getSession.leaseSet
32
+ end
33
+
34
+ def sessionId
35
+ @smgr.getSession.sessionId
36
+ end
37
+
38
+ def supports_ls2?
39
+ @smgr.getSession.supports_ls2?
40
+ end
41
+
42
+ def is_closed?
43
+ @smgr.getSession.closed?
44
+ end
45
+
46
+ def session
47
+ @smgr.session
48
+ end
49
+
50
+ def destroy
51
+ @smgr.getSession.destroySession
52
+ end
53
+
54
+ def lookupDest dest
55
+ @smgr.getSession.lookupDest dest
56
+ end
57
+
58
+ def getServerSocket
59
+ SocketServer.new @smgr.getServerSocket
60
+ end
61
+
62
+ def raw
63
+ @smgr
64
+ end
65
+
66
+ private
67
+
68
+ def self.get_impl
69
+ java_import('net.i2p.client.streaming.impl.I2PSocketManagerFull').first
70
+ end
71
+
72
+ def initialize smgr
73
+ @smgr = smgr
74
+ end
75
+
76
+ end
77
+ end