Saphir 0.0.1

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.
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: []