Saphir 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83119804a0355776a24c81d69cc9544396418fc1
4
+ data.tar.gz: 7550842d3ed9d685ce43e3ce5d282d2f7b4dd5ae
5
+ SHA512:
6
+ metadata.gz: d15d9492a508d7b746ae9a6102b670aa7b582b85467814f5c73dbf234523b4701489341e47f77613f2fa20fa5d6f8c01cf8b827991a4fd524e20ef3a045a78eb
7
+ data.tar.gz: 3d26cd70aebe1fda964e02bc3ebf85e00b9bcf9bb97debf67fde901c3904d41d94a9e21a33dba269fa7e8a4095a708976a2322472dff2851d7acb8245706df04
data/Manual.pdf ADDED
Binary file
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/lib/Saphir.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "Saphir/version"
2
+ require "Saphir/BNCServer"
3
+ require "Saphir/BNCClient"
@@ -0,0 +1,70 @@
1
+ require 'socket'
2
+ require 'openssl'
3
+
4
+ module Saphir
5
+ class BNCClient
6
+ #Set client properties
7
+ def initialize(server, password = "nopassword", port=7789, useSSL=true)
8
+ @port = port
9
+ @server = server
10
+ @password = password
11
+ @useSSL = useSSL
12
+ #Set the default certificate path
13
+ @certFile = "#{File.dirname(__FILE__)}/../ssl.cert"
14
+ end
15
+
16
+ #Change the default certificate
17
+ def setSSLCertificate(certFile)
18
+ if File.exist?(certFile)
19
+ @certFile = certFile
20
+ else
21
+ puts "ERROR: File does not exist!"
22
+ end
23
+ end
24
+
25
+ #Start the client
26
+ def start()
27
+ #Create a basic tcp socket
28
+ socket = TCPSocket.open(@server, @port)
29
+
30
+ #Check if ssl is enabled
31
+ if @useSSL
32
+ #Load certificate
33
+ expectedCert = OpenSSL::X509::Certificate.new(File.open(@certFile))
34
+ #Create a ssl tunnel for the tcp socket
35
+ s_socket = OpenSSL::SSL::SSLSocket.new(socket)
36
+ s_socket.sync_close = true
37
+ #Connect to the server
38
+ s_socket.connect
39
+
40
+ #If the server and client certificate differ through an error and quit the script
41
+ if s_socket.peer_cert.to_s != expectedCert.to_s
42
+ stderrr.puts "Unexpected certificate"
43
+ exit(1)
44
+ end
45
+
46
+ #Use the tunnel for communication
47
+ @socket = s_socket
48
+ else
49
+ #Use the basic socket for communication
50
+ @socket = socket
51
+ end
52
+ end
53
+
54
+ #Send a message to the server
55
+ def sendMessage(msg)
56
+ @socket.puts("#{@password}$$$#{msg}\000")
57
+
58
+ #Get the server response and forward it to the application using BCPClient
59
+ response = @socket.gets()
60
+ response = response.chomp[0..-2]
61
+ response
62
+ end
63
+
64
+ #Close the server connection
65
+ def close()
66
+ @socket.puts("EXT\000")
67
+ @socket.close
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,114 @@
1
+ require 'socket'
2
+ require 'openssl'
3
+
4
+ module Saphir
5
+ class BNCServer
6
+ #Set server properties
7
+ def initialize(password="nopassword", port=7789, useSSL=true, enableLog=true)
8
+ @port = port
9
+ @password = password
10
+ @useSSL = useSSL
11
+ @enableLog = enableLog
12
+ #Set the default certificate path
13
+ @certFile = "#{File.dirname(__FILE__)}/../ssl.cert"
14
+ @keyFile = "#{File.dirname(__FILE__)}/../ssl.key"
15
+ end
16
+
17
+ #Change the default certificate
18
+ def setSSLCertificate(certFile)
19
+ if File.exist?(certFile)
20
+ @certFile = certFile
21
+ else
22
+ puts "ERROR: File does not exist!"
23
+ end
24
+ end
25
+
26
+ #Change the default key
27
+ def setSSLKey(keyFile)
28
+ if File.exist?(keyFile)
29
+ @keyFile = keyFile
30
+ else
31
+ puts "ERROR: File does not exist!"
32
+ end
33
+ end
34
+
35
+ #Start the server
36
+ def start
37
+ #Create a basic tcp server
38
+ s_server = TCPServer.open(@port)
39
+
40
+ #Check if ssl was enabled
41
+ if @useSSL
42
+ #If enabled create an ssl tunnel for the tcp server
43
+ sslContext = OpenSSL::SSL::SSLContext.new
44
+ sslContext.cert = OpenSSL::X509::Certificate.new(File.open(@certFile));
45
+ sslContext.key = OpenSSL::PKey::RSA.new(File.open(@keyFile));
46
+
47
+ ssl_server = OpenSSL::SSL::SSLServer.new(s_server, sslContext)
48
+ ssl_server.start_immediately = true
49
+
50
+ #Use the tunnel for communication
51
+ server = ssl_server
52
+ else
53
+ #If disabled use the basic tcp server
54
+ server = s_server
55
+ end
56
+
57
+ loop do
58
+ #Try to start a new thread for each incoming request
59
+ begin
60
+ Thread.start(server.accept) do |client|
61
+ #Get client info
62
+ sock_domain, remote_port, remote_hostname, remote_ip = client.peeraddr
63
+ puts "Accepted request from #{remote_hostname} (#{remote_ip})" if @enableLog
64
+
65
+ #Start processing the request
66
+ while request = client.gets
67
+ #Read the password from the request
68
+ password = request[0..request.index('$$$')-1]
69
+ #Set request to be the content of the actual request
70
+ request = request[request.index('$$$')+3..-2]
71
+
72
+ #Verify the password
73
+ if @password == password
74
+ #Try to process the command from the request
75
+ begin
76
+ #Check if the command will be processed by BCPServer
77
+ case request[0..2]
78
+ when "HLO"
79
+ #Send 'Hello' to the client
80
+ client.puts "Hello\000"
81
+ when "EXT"
82
+ #Close the connection
83
+ puts "#{remote_ip}$ Closing connection..." if @enableLog
84
+ client.close
85
+ else
86
+ #If no BCPServer command is found forward the request to the application that implemented BCPServer
87
+ begin
88
+ puts "#{remote_ip}$ Request: #{request}" if @enableLog
89
+ response = yield request[0..-1]
90
+ client.puts "#{response}\000"
91
+ rescue
92
+ client.puts "Request received\000"
93
+ end
94
+ end
95
+ rescue
96
+ #Through an error if the request cannot be processed
97
+ puts "Invalid request from #{remote_ip}" if @enableLog
98
+ client.puts "ERROR: INVALID REQUEST\000"
99
+ end
100
+ else
101
+ #If the password is wrong return an error
102
+ puts "Invalid password from #{remote_ip}" if @enableLog
103
+ client.puts "ERROR: INVALID PASSWORD\000"
104
+ end
105
+ end
106
+ end
107
+ rescue
108
+ #If the request is invalid through an error
109
+ puts "ERROR: Invalid connection request" if @enableLog
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,3 @@
1
+ module Saphir
2
+ VERSION = "0.0.1"
3
+ end
data/lib/ssl.cert ADDED
@@ -0,0 +1,13 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICAzCCAWwCCQCUOjeM7uZU2TANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
3
+ SzEPMA0GA1UECBMGTG9uZG9uMQ8wDQYDVQQHEwZMb25kb24xFTATBgNVBAoTDE1h
4
+ cnZpbiBQZXRlcjAeFw0xNDA3MTYxNzE3MjVaFw0xNTA3MTYxNzE3MjVaMEYxCzAJ
5
+ BgNVBAYTAlVLMQ8wDQYDVQQIEwZMb25kb24xDzANBgNVBAcTBkxvbmRvbjEVMBMG
6
+ A1UEChMMTWFydmluIFBldGVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDj
7
+ s/QLHHHbSq7CI5jTgfZRxerlEcCBk6Pdd34Brp/mA4E1okfgY9WoiAhl2epkku/b
8
+ O2Sg7nTSf8+w/JXl8BJDLdgviydc0zFzT/D7R8KuFB9WVFXUvpTwEQPiU88+FUg4
9
+ 9vXuiMIylJU+cOez1pdYFJ3JXjbV6rGmmI2zsHvNdwIDAQABMA0GCSqGSIb3DQEB
10
+ BQUAA4GBACL44oml5IY1ZGA2KBgN+FB+B/w7K6irBwlqAQ7fWauHpFk/i0C84g+K
11
+ EB5Nmd3OQ6VdeMEIoUKXZBzyvOKgacJKbdZcog8jMinQV6vYaM4eqUIq/6Ne/43P
12
+ DEhmzAWdWW06kR8iPvJxh8kYlaSZ0/1imaXnNiS1gFJEQ0tQJOs7
13
+ -----END CERTIFICATE-----
data/lib/ssl.key ADDED
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXQIBAAKBgQDjs/QLHHHbSq7CI5jTgfZRxerlEcCBk6Pdd34Brp/mA4E1okfg
3
+ Y9WoiAhl2epkku/bO2Sg7nTSf8+w/JXl8BJDLdgviydc0zFzT/D7R8KuFB9WVFXU
4
+ vpTwEQPiU88+FUg49vXuiMIylJU+cOez1pdYFJ3JXjbV6rGmmI2zsHvNdwIDAQAB
5
+ AoGBAMsP92pVQqBK2NCfSDIPK2i/dPw1uZSU4sSlRIUhgs1wgLEg+LJ+tdKnBb42
6
+ +RYaB7deHx55qUrz2nc+ujslvlHl+A7fdWYgSNirxydzyx7TV0jTMM5mNHazJBcA
7
+ WAzABn3kCPvXEydU1KryCDrO9L5uK43xoKD1bBMdaQIwRPDxAkEA9zToPTFZe5FC
8
+ t5pnnbodSH4HXsxARWTeYKc53ur/QUEqKhmopCCfO5CEYH2qZHhMgfEIicBwSqat
9
+ S0DUw20eKQJBAOvNcWH6LRG/rd67oY7xofNagaGlNAao3cW1H8DjOXQS+yX+T97z
10
+ OHD//0f4wve/5Il/lrEV6XtQmnJnf+1jwp8CQQCe0C+O+IBLQTQCbkC49NNROh4U
11
+ CdYUfsvafjRQgNpBmtKyv083OfnyM1LIBpOL/jjwld/tV2MMom3cVacacaSZAkBT
12
+ hFRgS2ejHazLctFp+5NMygWX5xdiNHU4DUrN2q0Cu6ZQcp5/bM3U2BbmuujzLvgW
13
+ 6yXIWuZzUr0hQB9DSU4pAkB+CGIBlPUG+jmnM5fLV80JHCNSJfggepVn4It5UAbf
14
+ 4XT24EjOIDB9WN05dbSZFdZuiLl3x00u8SWVkzIxKsAM
15
+ -----END RSA PRIVATE KEY-----
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Saphir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sapphirus (Marvin Peter)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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
+ name: openssl
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
+ description: "THIS IS JUST A BETA!!!\n\n\n \t\t\t\t\t\tCurrent features:\n\n \t\t\t\t\t\t1)
56
+ A server and client for basic network communication\n"
57
+ email:
58
+ - mail@Sapphirus.cf
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - Rakefile
64
+ - Manual.pdf
65
+ - lib/Saphir.rb
66
+ - lib/Saphir/version.rb
67
+ - lib/Saphir/BNCClient.rb
68
+ - lib/Saphir/BNCServer.rb
69
+ - lib/ssl.cert
70
+ - lib/ssl.key
71
+ homepage: ''
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.0.14
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: A collection of useful ruby functions
95
+ test_files: []