raptor-io 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +30 -0
  3. data/README.md +51 -0
  4. data/lib/rack/handler/raptor-io.rb +130 -0
  5. data/lib/raptor-io.rb +11 -0
  6. data/lib/raptor-io/error.rb +19 -0
  7. data/lib/raptor-io/protocol.rb +6 -0
  8. data/lib/raptor-io/protocol/error.rb +10 -0
  9. data/lib/raptor-io/protocol/http.rb +34 -0
  10. data/lib/raptor-io/protocol/http/client.rb +685 -0
  11. data/lib/raptor-io/protocol/http/error.rb +16 -0
  12. data/lib/raptor-io/protocol/http/headers.rb +132 -0
  13. data/lib/raptor-io/protocol/http/message.rb +67 -0
  14. data/lib/raptor-io/protocol/http/request.rb +307 -0
  15. data/lib/raptor-io/protocol/http/request/manipulator.rb +117 -0
  16. data/lib/raptor-io/protocol/http/request/manipulators.rb +217 -0
  17. data/lib/raptor-io/protocol/http/request/manipulators/authenticator.rb +110 -0
  18. data/lib/raptor-io/protocol/http/request/manipulators/authenticators/basic.rb +36 -0
  19. data/lib/raptor-io/protocol/http/request/manipulators/authenticators/digest.rb +135 -0
  20. data/lib/raptor-io/protocol/http/request/manipulators/authenticators/negotiate.rb +69 -0
  21. data/lib/raptor-io/protocol/http/request/manipulators/authenticators/ntlm.rb +29 -0
  22. data/lib/raptor-io/protocol/http/request/manipulators/redirect_follower.rb +65 -0
  23. data/lib/raptor-io/protocol/http/response.rb +166 -0
  24. data/lib/raptor-io/protocol/http/server.rb +446 -0
  25. data/lib/raptor-io/ruby.rb +4 -0
  26. data/lib/raptor-io/ruby/hash.rb +24 -0
  27. data/lib/raptor-io/ruby/ipaddr.rb +15 -0
  28. data/lib/raptor-io/ruby/openssl.rb +23 -0
  29. data/lib/raptor-io/ruby/string.rb +27 -0
  30. data/lib/raptor-io/socket.rb +175 -0
  31. data/lib/raptor-io/socket/comm.rb +143 -0
  32. data/lib/raptor-io/socket/comm/local.rb +94 -0
  33. data/lib/raptor-io/socket/comm/sapni.rb +75 -0
  34. data/lib/raptor-io/socket/comm/socks.rb +237 -0
  35. data/lib/raptor-io/socket/comm_chain.rb +30 -0
  36. data/lib/raptor-io/socket/error.rb +45 -0
  37. data/lib/raptor-io/socket/switch_board.rb +183 -0
  38. data/lib/raptor-io/socket/switch_board/route.rb +42 -0
  39. data/lib/raptor-io/socket/tcp.rb +231 -0
  40. data/lib/raptor-io/socket/tcp/ssl.rb +77 -0
  41. data/lib/raptor-io/socket/tcp_server.rb +16 -0
  42. data/lib/raptor-io/socket/tcp_server/ssl.rb +52 -0
  43. data/lib/raptor-io/socket/udp.rb +0 -0
  44. data/lib/raptor-io/version.rb +6 -0
  45. data/lib/tasks/yard.rake +26 -0
  46. data/spec/rack/handler/raptor_spec.rb +140 -0
  47. data/spec/raptor-io/protocol/http/client_spec.rb +671 -0
  48. data/spec/raptor-io/protocol/http/headers_spec.rb +189 -0
  49. data/spec/raptor-io/protocol/http/message_spec.rb +5 -0
  50. data/spec/raptor-io/protocol/http/request/manipulators/authenticator_spec.rb +193 -0
  51. data/spec/raptor-io/protocol/http/request/manipulators/authenticators/basic_spec.rb +32 -0
  52. data/spec/raptor-io/protocol/http/request/manipulators/authenticators/digest_spec.rb +76 -0
  53. data/spec/raptor-io/protocol/http/request/manipulators/authenticators/negotiate_spec.rb +52 -0
  54. data/spec/raptor-io/protocol/http/request/manipulators/authenticators/ntlm_spec.rb +37 -0
  55. data/spec/raptor-io/protocol/http/request/manipulators/redirect_follower_spec.rb +51 -0
  56. data/spec/raptor-io/protocol/http/request/manipulators_spec.rb +202 -0
  57. data/spec/raptor-io/protocol/http/request_spec.rb +965 -0
  58. data/spec/raptor-io/protocol/http/response_spec.rb +236 -0
  59. data/spec/raptor-io/protocol/http/server_spec.rb +345 -0
  60. data/spec/raptor-io/ruby/hash_spec.rb +20 -0
  61. data/spec/raptor-io/ruby/string_spec.rb +20 -0
  62. data/spec/raptor-io/socket/comm/local_spec.rb +50 -0
  63. data/spec/raptor-io/socket/switch_board/route_spec.rb +49 -0
  64. data/spec/raptor-io/socket/switch_board_spec.rb +87 -0
  65. data/spec/raptor-io/socket/tcp/ssl_spec.rb +18 -0
  66. data/spec/raptor-io/socket/tcp_server/ssl_spec.rb +59 -0
  67. data/spec/raptor-io/socket/tcp_server_spec.rb +19 -0
  68. data/spec/raptor-io/socket/tcp_spec.rb +14 -0
  69. data/spec/raptor-io/socket_spec.rb +16 -0
  70. data/spec/raptor-io/version_spec.rb +10 -0
  71. data/spec/spec_helper.rb +56 -0
  72. data/spec/support/fixtures/raptor/protocol/http/request/manipulators/manifoolators/fooer.rb +25 -0
  73. data/spec/support/fixtures/raptor/protocol/http/request/manipulators/niccolo_machiavelli.rb +20 -0
  74. data/spec/support/fixtures/raptor/protocol/http/request/manipulators/options_validator.rb +28 -0
  75. data/spec/support/fixtures/raptor/socket/ssl_server.crt +18 -0
  76. data/spec/support/fixtures/raptor/socket/ssl_server.key +15 -0
  77. data/spec/support/lib/path_helpers.rb +11 -0
  78. data/spec/support/lib/webserver_option_parser.rb +26 -0
  79. data/spec/support/lib/webservers.rb +120 -0
  80. data/spec/support/shared/contexts/with_ssl_server.rb +70 -0
  81. data/spec/support/shared/contexts/with_tcp_server.rb +58 -0
  82. data/spec/support/shared/examples/raptor/comm_examples.rb +26 -0
  83. data/spec/support/shared/examples/raptor/protocols/http/message.rb +106 -0
  84. data/spec/support/shared/examples/raptor/socket_examples.rb +135 -0
  85. data/spec/support/webservers/raptor/protocols/http/client.rb +100 -0
  86. data/spec/support/webservers/raptor/protocols/http/client_close_connection.rb +29 -0
  87. data/spec/support/webservers/raptor/protocols/http/client_https.rb +43 -0
  88. data/spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/basic.rb +9 -0
  89. data/spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/digest.rb +22 -0
  90. data/spec/support/webservers/raptor/protocols/http/request/manipulators/redirect_follower.rb +11 -0
  91. metadata +336 -0
@@ -0,0 +1,135 @@
1
+ shared_examples_for "a client socket" do
2
+ let(:data) { "0\n1\n2\n3\n4\n".force_encoding( 'binary' ) }
3
+
4
+ context do
5
+ subject { described_class.new(io, opts) }
6
+ it "has important methods of IO" do
7
+ expect(subject).to respond_to(:to_io)
8
+ expect(subject).to respond_to(:read)
9
+ expect(subject).to respond_to(:readpartial)
10
+ expect(subject).to respond_to(:write)
11
+ expect(subject).to respond_to(:close)
12
+ expect(subject).to respond_to(:closed?)
13
+ end
14
+ end
15
+
16
+ describe "#gets" do
17
+
18
+ it "converts Errno::ECONNRESET to BrokenPipe" do
19
+
20
+ io.stub(:gets).and_raise(Errno::ECONNRESET)
21
+ expect {
22
+ subject.gets
23
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
24
+ end
25
+
26
+ it "converts Errno::EPIPE to BrokenPipe" do
27
+ io.stub(:gets).and_raise(Errno::EPIPE)
28
+ expect {
29
+ subject.gets
30
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
31
+ end
32
+
33
+ context "with a TCPSocket for IO" do
34
+ let(:data) { "0\n1\n2\n3\n4\n".force_encoding( 'binary' ) }
35
+ let(:data_io) { StringIO.new( data ) }
36
+
37
+ include_context "with tcp server"
38
+
39
+ it 'returns each line from the buffer' do
40
+ 5.times do |i|
41
+ line = subject.gets
42
+ line.should == data_io.gets
43
+ end
44
+ end
45
+
46
+ context 'when called with Fixnum arg' do
47
+ it 'reads and returns at most that number of bytes' do
48
+ 5.times do |i|
49
+ line = subject.gets( 1 )
50
+ line.size.should == 1
51
+ line.should == data_io.gets( 1 )
52
+ end
53
+ end
54
+ it 'reads and returns at most that number of bytes' do
55
+ 5.times do |i|
56
+ subject.gets( 100 ).should == data_io.gets( 100 )
57
+ end
58
+ end
59
+ end
60
+
61
+ context 'when called with String arg' do
62
+ let(:data) { '0--1--2--3--4--'.force_encoding( 'binary' ) }
63
+
64
+ it 'uses it as a newline separator' do
65
+ 5.times do |i|
66
+ subject.gets( '--' ).should == data_io.gets( '--' )
67
+ end
68
+ end
69
+ end
70
+
71
+ context 'when called String and Fixnum args' do
72
+ let(:data) { '1--22--333--4444--55555--'.force_encoding( 'binary' ) }
73
+
74
+ it 'uses the String as a newline separator and the Fixnum as a max-size' do
75
+ 5.times do |i|
76
+ line = subject.gets('--', 2)
77
+ line.size.should be_between(0, 2)
78
+ line.should == data_io.gets('--', 2)
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ end
85
+
86
+ describe "#read" do
87
+ let(:io) { StringIO.new }
88
+ it "converts Errno::ECONNRESET to BrokenPipe" do
89
+ io.stub(:read).and_raise(Errno::ECONNRESET)
90
+ expect {
91
+ subject.read(1)
92
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
93
+ end
94
+
95
+ it "converts Errno::EPIPE to BrokenPipe" do
96
+ io.stub(:read).and_raise(Errno::EPIPE)
97
+ expect {
98
+ subject.read(1)
99
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
100
+ end
101
+
102
+ context 'with server' do
103
+ include_context "with tcp server"
104
+ let(:data) { "0\n1\n2\n3\n4\n".force_encoding( 'binary' ) }
105
+ it 'returns what the server wrote' do
106
+ subject.read(data.length).should eql(data)
107
+ end
108
+ end
109
+ end
110
+
111
+ describe "#write" do
112
+ let(:io) { StringIO.new }
113
+
114
+ it "converts Errno::ECONNRESET to BrokenPipe" do
115
+ io.stub(:write).and_raise(Errno::ECONNRESET)
116
+ expect {
117
+ subject.write("asdf")
118
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
119
+ end
120
+
121
+ it "converts Errno::EPIPE to BrokenPipe" do
122
+ io.stub(:write).and_raise(Errno::EPIPE)
123
+ expect {
124
+ subject.write("asdf")
125
+ }.to raise_error(RaptorIO::Socket::Error::BrokenPipe)
126
+ end
127
+ end
128
+
129
+ end
130
+
131
+ shared_examples "a server socket" do
132
+ it { should respond_to(:bind) }
133
+ it { should respond_to(:listen) }
134
+ it { should respond_to(:accept) }
135
+ end
@@ -0,0 +1,100 @@
1
+ require 'zlib'
2
+ require 'sinatra'
3
+ require 'sinatra/contrib'
4
+
5
+ module Sinatra::Helpers
6
+ class Stream
7
+ def each(&front)
8
+ @front = front
9
+ callback do
10
+ @front.call("0\r\n\r\n")
11
+ end
12
+
13
+ @scheduler.defer do
14
+ begin
15
+ @back.call(self)
16
+ rescue Exception => e
17
+ @scheduler.schedule { raise e }
18
+ end
19
+ close unless @keep_open
20
+ end
21
+ end
22
+
23
+ def <<(data)
24
+ @scheduler.schedule do
25
+ size = data.to_s.bytesize
26
+ @front.call([size.to_s(16), "\r\n", data.to_s, "\r\n"].join)
27
+ end
28
+ self
29
+ end
30
+ end
31
+ end
32
+
33
+ get '/100' do
34
+ if env['HTTP_EXPECT'] == '100-continue'
35
+ 100
36
+ else
37
+ request.body
38
+ end
39
+ end
40
+
41
+ get '/204' do
42
+ 204
43
+ end
44
+
45
+ get '/chunked' do
46
+ headers "Transfer-Encoding" => "chunked"
47
+ stream do |out|
48
+ out << "foo\n"
49
+ sleep 1
50
+ out << "bara\r"
51
+ sleep 2
52
+ out << "baraf\r\n"
53
+ end
54
+ end
55
+
56
+ get '/cookies' do
57
+ cookies.map { |k, v| k.to_s + '=' + v.to_s }.join( ';' )
58
+ end
59
+
60
+ get '/echo' do
61
+ params.to_s
62
+ end
63
+
64
+ get '/echo_body' do
65
+ request.body
66
+ end
67
+
68
+ get '/gzip' do
69
+ headers['Content-Encoding'] = 'gzip'
70
+ io = StringIO.new
71
+
72
+ gz = Zlib::GzipWriter.new( io )
73
+ begin
74
+ gz.write( 'gzip' )
75
+ ensure
76
+ gz.close
77
+ end
78
+ io.string
79
+ end
80
+
81
+ get '/deflate' do
82
+ headers['Content-Encoding'] = 'deflate'
83
+
84
+ z = Zlib::Deflate.new( Zlib::BEST_COMPRESSION )
85
+ begin
86
+ z.deflate( 'deflate', Zlib::FINISH )
87
+ ensure
88
+ z.close
89
+ end
90
+ end
91
+
92
+ get '/sleep' do
93
+ sleep 1
94
+ 'Blah...'
95
+ end
96
+
97
+ get '/long-sleep' do
98
+ sleep 5
99
+ 'Blah...'
100
+ end
@@ -0,0 +1,29 @@
1
+ # Provides a test case for:
2
+ # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4
3
+ #
4
+ # Response will not include a Content-Length but rather close the connection to
5
+ # indicate the end of the response body.
6
+
7
+ require 'socket'
8
+ require_relative '../../../../../support/lib/webserver_option_parser'
9
+
10
+ BODY = "Success\n.\n"
11
+
12
+ options = WebServerOptionParser.parse
13
+
14
+ server = TCPServer.new( options[:address], options[:port] )
15
+ @requests = Hash.new { |h, k| h[k] = '' }
16
+
17
+ Thread.abort_on_exception = true
18
+ loop do
19
+ Thread.start( server.accept ) do |client|
20
+ # Wait for the request to arrive.
21
+ loop do
22
+ break if (@requests[client] << client.gets.to_s).include?( "\r\n\r\n" )
23
+ end
24
+
25
+ client << "HTTP/1.1 200 OK\r\n\r\n"
26
+ client << BODY
27
+ client.close
28
+ end
29
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../../../../../support/lib/webserver_option_parser'
2
+ require 'sinatra/base'
3
+ require 'webrick'
4
+ require 'webrick/https'
5
+ require 'openssl'
6
+
7
+ options = WebServerOptionParser.parse
8
+
9
+ name = "/C=US/ST=SomeState/L=SomeCity/O=Organization/OU=Unit/CN=localhost"
10
+ ca = OpenSSL::X509::Name.parse( name )
11
+ key = OpenSSL::PKey::RSA.new( 1024 )
12
+ crt = OpenSSL::X509::Certificate.new
13
+
14
+ crt.version = 2
15
+ crt.serial = 1
16
+ crt.subject = ca
17
+ crt.issuer = ca
18
+ crt.public_key = key.public_key
19
+ crt.not_before = Time.now
20
+ crt.not_after = Time.now + 1 * 365 * 24 * 60 * 60 # 1 year
21
+
22
+ options = {
23
+ Address: options[:address],
24
+ Port: options[:port],
25
+ SSLEnable: true,
26
+ SSLVerifyClient: OpenSSL::SSL::VERIFY_NONE,
27
+ SSLCertificate: crt,
28
+ SSLPrivateKey: key,
29
+ SSLCertName: [["CN", WEBrick::Utils::getservername]],
30
+ }
31
+
32
+ class HTTPSServer < Sinatra::Base
33
+
34
+ get '/' do
35
+ 'Stuff...'
36
+ end
37
+
38
+ end
39
+
40
+ server = ::Rack::Handler::WEBrick
41
+ trap( :INT ) { server.shutdown }
42
+
43
+ server.run( HTTPSServer, options )
@@ -0,0 +1,9 @@
1
+ require 'sinatra'
2
+
3
+ use Rack::Auth::Basic, "Protected Area" do |username, password|
4
+ username == 'admin' && password == 'secret'
5
+ end
6
+
7
+ get '/' do
8
+ 'Restricted'
9
+ end
@@ -0,0 +1,22 @@
1
+ require 'sinatra/base'
2
+ require_relative '../../../../../../../../support/lib/webserver_option_parser'
3
+
4
+ class Protected < Sinatra::Base
5
+
6
+ get '/' do
7
+ 'Restricted'
8
+ end
9
+
10
+ def self.new( * )
11
+ app = Rack::Auth::Digest::MD5.new( super ) do |username|
12
+ { 'admin' => 'secret' }[username]
13
+ end
14
+
15
+ app.realm = 'Protected Area'
16
+ app.opaque = 'secretkey'
17
+ app
18
+ end
19
+ end
20
+
21
+ options = WebServerOptionParser.parse
22
+ Rack::Handler.default.run( Protected.new, Port: options[:port], Address: options[:address] )
@@ -0,0 +1,11 @@
1
+ require 'sinatra'
2
+
3
+ get /(\d+)/ do
4
+ num = params[:captures].first.to_i - 1
5
+
6
+ if num == 0
7
+ 'End of the line...'
8
+ else
9
+ redirect "/#{num}"
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,336 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: raptor-io
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Metasploit Hackers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubyntlm
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: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
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: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
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: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
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
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.5.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.5.4
97
+ - !ruby/object:Gem::Dependency
98
+ name: thin
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
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
+ name: sinatra
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra-contrib
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: redcarpet
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: awesome_print
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
+ description: Provides a variety of classes useful for security testing and exploit
168
+ development.
169
+ email:
170
+ - metasploit-hackers@lists.sourceforge.org
171
+ executables: []
172
+ extensions: []
173
+ extra_rdoc_files:
174
+ - README.md
175
+ - LICENSE
176
+ files:
177
+ - lib/rack/handler/raptor-io.rb
178
+ - lib/raptor-io/error.rb
179
+ - lib/raptor-io/protocol/error.rb
180
+ - lib/raptor-io/protocol/http/client.rb
181
+ - lib/raptor-io/protocol/http/error.rb
182
+ - lib/raptor-io/protocol/http/headers.rb
183
+ - lib/raptor-io/protocol/http/message.rb
184
+ - lib/raptor-io/protocol/http/request/manipulator.rb
185
+ - lib/raptor-io/protocol/http/request/manipulators/authenticator.rb
186
+ - lib/raptor-io/protocol/http/request/manipulators/authenticators/basic.rb
187
+ - lib/raptor-io/protocol/http/request/manipulators/authenticators/digest.rb
188
+ - lib/raptor-io/protocol/http/request/manipulators/authenticators/negotiate.rb
189
+ - lib/raptor-io/protocol/http/request/manipulators/authenticators/ntlm.rb
190
+ - lib/raptor-io/protocol/http/request/manipulators/redirect_follower.rb
191
+ - lib/raptor-io/protocol/http/request/manipulators.rb
192
+ - lib/raptor-io/protocol/http/request.rb
193
+ - lib/raptor-io/protocol/http/response.rb
194
+ - lib/raptor-io/protocol/http/server.rb
195
+ - lib/raptor-io/protocol/http.rb
196
+ - lib/raptor-io/protocol.rb
197
+ - lib/raptor-io/ruby/hash.rb
198
+ - lib/raptor-io/ruby/ipaddr.rb
199
+ - lib/raptor-io/ruby/openssl.rb
200
+ - lib/raptor-io/ruby/string.rb
201
+ - lib/raptor-io/ruby.rb
202
+ - lib/raptor-io/socket/comm/local.rb
203
+ - lib/raptor-io/socket/comm/sapni.rb
204
+ - lib/raptor-io/socket/comm/socks.rb
205
+ - lib/raptor-io/socket/comm.rb
206
+ - lib/raptor-io/socket/comm_chain.rb
207
+ - lib/raptor-io/socket/error.rb
208
+ - lib/raptor-io/socket/switch_board/route.rb
209
+ - lib/raptor-io/socket/switch_board.rb
210
+ - lib/raptor-io/socket/tcp/ssl.rb
211
+ - lib/raptor-io/socket/tcp.rb
212
+ - lib/raptor-io/socket/tcp_server/ssl.rb
213
+ - lib/raptor-io/socket/tcp_server.rb
214
+ - lib/raptor-io/socket/udp.rb
215
+ - lib/raptor-io/socket.rb
216
+ - lib/raptor-io/version.rb
217
+ - lib/raptor-io.rb
218
+ - lib/tasks/yard.rake
219
+ - README.md
220
+ - LICENSE
221
+ - spec/rack/handler/raptor_spec.rb
222
+ - spec/raptor-io/protocol/http/client_spec.rb
223
+ - spec/raptor-io/protocol/http/headers_spec.rb
224
+ - spec/raptor-io/protocol/http/message_spec.rb
225
+ - spec/raptor-io/protocol/http/request/manipulators/authenticator_spec.rb
226
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/basic_spec.rb
227
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/digest_spec.rb
228
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/negotiate_spec.rb
229
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/ntlm_spec.rb
230
+ - spec/raptor-io/protocol/http/request/manipulators/redirect_follower_spec.rb
231
+ - spec/raptor-io/protocol/http/request/manipulators_spec.rb
232
+ - spec/raptor-io/protocol/http/request_spec.rb
233
+ - spec/raptor-io/protocol/http/response_spec.rb
234
+ - spec/raptor-io/protocol/http/server_spec.rb
235
+ - spec/raptor-io/ruby/hash_spec.rb
236
+ - spec/raptor-io/ruby/string_spec.rb
237
+ - spec/raptor-io/socket/comm/local_spec.rb
238
+ - spec/raptor-io/socket/switch_board/route_spec.rb
239
+ - spec/raptor-io/socket/switch_board_spec.rb
240
+ - spec/raptor-io/socket/tcp/ssl_spec.rb
241
+ - spec/raptor-io/socket/tcp_server/ssl_spec.rb
242
+ - spec/raptor-io/socket/tcp_server_spec.rb
243
+ - spec/raptor-io/socket/tcp_spec.rb
244
+ - spec/raptor-io/socket_spec.rb
245
+ - spec/raptor-io/version_spec.rb
246
+ - spec/spec_helper.rb
247
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/manifoolators/fooer.rb
248
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/niccolo_machiavelli.rb
249
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/options_validator.rb
250
+ - spec/support/fixtures/raptor/socket/ssl_server.crt
251
+ - spec/support/fixtures/raptor/socket/ssl_server.key
252
+ - spec/support/lib/path_helpers.rb
253
+ - spec/support/lib/webserver_option_parser.rb
254
+ - spec/support/lib/webservers.rb
255
+ - spec/support/shared/contexts/with_ssl_server.rb
256
+ - spec/support/shared/contexts/with_tcp_server.rb
257
+ - spec/support/shared/examples/raptor/comm_examples.rb
258
+ - spec/support/shared/examples/raptor/protocols/http/message.rb
259
+ - spec/support/shared/examples/raptor/socket_examples.rb
260
+ - spec/support/webservers/raptor/protocols/http/client.rb
261
+ - spec/support/webservers/raptor/protocols/http/client_close_connection.rb
262
+ - spec/support/webservers/raptor/protocols/http/client_https.rb
263
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/basic.rb
264
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/digest.rb
265
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/redirect_follower.rb
266
+ homepage: https://github.com/rapid7/raptor
267
+ licenses:
268
+ - MIT
269
+ metadata: {}
270
+ post_install_message:
271
+ rdoc_options: []
272
+ require_paths:
273
+ - lib
274
+ required_ruby_version: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ! '>='
277
+ - !ruby/object:Gem::Version
278
+ version: 1.9.2
279
+ required_rubygems_version: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - ! '>='
282
+ - !ruby/object:Gem::Version
283
+ version: '0'
284
+ requirements: []
285
+ rubyforge_project:
286
+ rubygems_version: 2.1.11
287
+ signing_key:
288
+ specification_version: 4
289
+ summary: RaptorIO security library.
290
+ test_files:
291
+ - spec/rack/handler/raptor_spec.rb
292
+ - spec/raptor-io/protocol/http/client_spec.rb
293
+ - spec/raptor-io/protocol/http/headers_spec.rb
294
+ - spec/raptor-io/protocol/http/message_spec.rb
295
+ - spec/raptor-io/protocol/http/request/manipulators/authenticator_spec.rb
296
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/basic_spec.rb
297
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/digest_spec.rb
298
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/negotiate_spec.rb
299
+ - spec/raptor-io/protocol/http/request/manipulators/authenticators/ntlm_spec.rb
300
+ - spec/raptor-io/protocol/http/request/manipulators/redirect_follower_spec.rb
301
+ - spec/raptor-io/protocol/http/request/manipulators_spec.rb
302
+ - spec/raptor-io/protocol/http/request_spec.rb
303
+ - spec/raptor-io/protocol/http/response_spec.rb
304
+ - spec/raptor-io/protocol/http/server_spec.rb
305
+ - spec/raptor-io/ruby/hash_spec.rb
306
+ - spec/raptor-io/ruby/string_spec.rb
307
+ - spec/raptor-io/socket/comm/local_spec.rb
308
+ - spec/raptor-io/socket/switch_board/route_spec.rb
309
+ - spec/raptor-io/socket/switch_board_spec.rb
310
+ - spec/raptor-io/socket/tcp/ssl_spec.rb
311
+ - spec/raptor-io/socket/tcp_server/ssl_spec.rb
312
+ - spec/raptor-io/socket/tcp_server_spec.rb
313
+ - spec/raptor-io/socket/tcp_spec.rb
314
+ - spec/raptor-io/socket_spec.rb
315
+ - spec/raptor-io/version_spec.rb
316
+ - spec/spec_helper.rb
317
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/manifoolators/fooer.rb
318
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/niccolo_machiavelli.rb
319
+ - spec/support/fixtures/raptor/protocol/http/request/manipulators/options_validator.rb
320
+ - spec/support/fixtures/raptor/socket/ssl_server.crt
321
+ - spec/support/fixtures/raptor/socket/ssl_server.key
322
+ - spec/support/lib/path_helpers.rb
323
+ - spec/support/lib/webserver_option_parser.rb
324
+ - spec/support/lib/webservers.rb
325
+ - spec/support/shared/contexts/with_ssl_server.rb
326
+ - spec/support/shared/contexts/with_tcp_server.rb
327
+ - spec/support/shared/examples/raptor/comm_examples.rb
328
+ - spec/support/shared/examples/raptor/protocols/http/message.rb
329
+ - spec/support/shared/examples/raptor/socket_examples.rb
330
+ - spec/support/webservers/raptor/protocols/http/client.rb
331
+ - spec/support/webservers/raptor/protocols/http/client_close_connection.rb
332
+ - spec/support/webservers/raptor/protocols/http/client_https.rb
333
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/basic.rb
334
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/authenticators/digest.rb
335
+ - spec/support/webservers/raptor/protocols/http/request/manipulators/redirect_follower.rb
336
+ has_rdoc: