tcpfiletransfer 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/filetransfer_server +4 -0
- data/bin/sendfile +20 -0
- data/lib/filetransfer/ftserver.rb +28 -0
- data/lib/filetransfer/httpserver.rb +23 -0
- data/lib/filetransfer/notifier.rb +12 -0
- data/lib/filetransfer/server.rb +26 -0
- data/lib/filetransfer.rb +27 -0
- metadata +13 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9f37556acb9adeccebd5bb3be4f60303050e260162506f2dc34e0ed29fbec33
|
4
|
+
data.tar.gz: 597ddb8b1aedc0071aa4da0bce1018aea983387c7dcebeb898a8c4f36993e59e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b278fcaa9740dbfcb4706dd459eab9070566f1562385717d9cf0a90c300fa9e6665f90d92485117de9ba9adfa55ee13de66143e95038ca513c603df629db034
|
7
|
+
data.tar.gz: f1ac7ab63ebb561c03cd95fe1d9525eab1474c076fa01af06b7e105116b7afb6dd71954df5182ed11c48016838dc00af240b4002d8b63cb9237ec0d820805687
|
data/bin/sendfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "filetransfer"
|
3
|
+
require "socket"
|
4
|
+
|
5
|
+
path = ARGV[0].gsub(" ", "`")
|
6
|
+
name = ARGV[0].split("/").last.gsub(" ", "_")
|
7
|
+
|
8
|
+
print "Recipient: "
|
9
|
+
recipient = $stdin.gets.chomp
|
10
|
+
|
11
|
+
server = TCPSocket.new("127.0.0.1", 8021)
|
12
|
+
server.puts "FTSUBMIT #{name} #{path}"
|
13
|
+
fileid = server.gets
|
14
|
+
|
15
|
+
file_size = '%.2f' % (File.size(ARGV[0]).to_f / 2**20)
|
16
|
+
|
17
|
+
server = TCPSocket.new(recipient, 8021)
|
18
|
+
server.puts "FTSEND #{name.gsub(" ", "_")} #{file_size}MB #{fileid}"
|
19
|
+
|
20
|
+
exit
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module FTserver
|
3
|
+
def self.handle_client(initdata, client)
|
4
|
+
filename = initdata[1]
|
5
|
+
filesize = initdata[2]
|
6
|
+
fileid = initdata[3]
|
7
|
+
sock_domain, remote_port, remote_hostname, remote_ip = client.peeraddr
|
8
|
+
|
9
|
+
Notifier.file_transfer_notification(filename: filename, source: remote_hostname, filesize: filesize, accept_link: "http://#{remote_ip}:8021/#{fileid}")
|
10
|
+
client.close
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.handle_file_submission(initdata, client)
|
14
|
+
filename = initdata[1]
|
15
|
+
filepath = initdata[2].gsub("`", " ")
|
16
|
+
|
17
|
+
fileid = self.genfileid(6)
|
18
|
+
$active_transfers[?/ + fileid] = {name: filename, path: filepath}
|
19
|
+
client.puts fileid
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.genfileid(length)
|
24
|
+
((('a'..'z').to_a+('A'..'Z').to_a+(0..9).to_a*3).shuffle*((length.to_f/82.0).ceil))[0...length].join
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module HTTPserver
|
3
|
+
def self.handle_client(initdata, client)
|
4
|
+
path = initdata[1]
|
5
|
+
file = $active_transfers[path]
|
6
|
+
|
7
|
+
read = true
|
8
|
+
while read
|
9
|
+
x= client.gets
|
10
|
+
read = false if x == "\r\n" || !x
|
11
|
+
end
|
12
|
+
|
13
|
+
if !file
|
14
|
+
client.puts "HTTP/1.0 404\r\nContent-Type: text/plain\r\n\r\nFile not found."
|
15
|
+
client.close
|
16
|
+
return
|
17
|
+
end
|
18
|
+
client.puts "HTTP/1.0 200\r\nContent-Type: application/octet-stream\r\nContent-Disposition: attachment; filename=\"#{file[:name]}\"\r\n\r\n#{File.read(file[:path])}"
|
19
|
+
$active_transfers.delete(path)
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module Notifier
|
3
|
+
def self.file_transfer_notification(filename:, source:, filesize:, accept_link:)
|
4
|
+
notification_title = "Incoming file transfer from #{source}"
|
5
|
+
fileinfo = "Name: #{filename}\nSize: #{filesize}"
|
6
|
+
links = "Click to accept: #{accept_link}"
|
7
|
+
notification_body = "#{fileinfo}\n#{links}"
|
8
|
+
notification_command = "notify-send '#{notification_title}' \"#{notification_body}\""
|
9
|
+
system(notification_command)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
class Server
|
3
|
+
def initialize(port:8021, listen:"0.0.0.0")
|
4
|
+
@port = port
|
5
|
+
@listen = listen
|
6
|
+
end
|
7
|
+
|
8
|
+
def start
|
9
|
+
@server = TCPServer.new(@listen, @port)
|
10
|
+
loop do
|
11
|
+
Thread.start(@server.accept) do |client|
|
12
|
+
initdata = client.gets.split(" ")
|
13
|
+
if initdata[0] == "GET"
|
14
|
+
HTTPserver.handle_client(initdata, client)
|
15
|
+
elsif initdata[0] == "FTSEND"
|
16
|
+
FTserver.handle_client(initdata, client)
|
17
|
+
elsif initdata[0] == "FTSUBMIT"
|
18
|
+
FTserver.handle_file_submission(initdata, client)
|
19
|
+
else
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/filetransfer.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$active_transfers = {
|
2
|
+
}
|
3
|
+
|
4
|
+
module FileTransfer
|
5
|
+
@@files = ['server.rb', 'notifier.rb', 'httpserver.rb', 'ftserver.rb']
|
6
|
+
|
7
|
+
def self.version
|
8
|
+
"0.0.1"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.file_paths(relative:false)
|
12
|
+
x = @@files.map do |f|
|
13
|
+
"#{"lib/" unless relative}filetransfer/#{f}"
|
14
|
+
end
|
15
|
+
|
16
|
+
if relative
|
17
|
+
return x
|
18
|
+
else
|
19
|
+
return x + ['lib/filetransfer.rb']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "socket"
|
25
|
+
FileTransfer.file_paths(relative:true).each do |f|
|
26
|
+
require_relative f
|
27
|
+
end
|
metadata
CHANGED
@@ -1,21 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tcpfiletransfer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An easy way to transfer files over TCP between linux computers
|
14
14
|
email: matthias@matthiasclee.com
|
15
|
-
executables:
|
15
|
+
executables:
|
16
|
+
- filetransfer_server
|
17
|
+
- sendfile
|
16
18
|
extensions: []
|
17
19
|
extra_rdoc_files: []
|
18
|
-
files:
|
20
|
+
files:
|
21
|
+
- bin/filetransfer_server
|
22
|
+
- bin/sendfile
|
23
|
+
- lib/filetransfer.rb
|
24
|
+
- lib/filetransfer/ftserver.rb
|
25
|
+
- lib/filetransfer/httpserver.rb
|
26
|
+
- lib/filetransfer/notifier.rb
|
27
|
+
- lib/filetransfer/server.rb
|
19
28
|
homepage: https://github.com/Matthiasclee/filetransfer
|
20
29
|
licenses: []
|
21
30
|
metadata: {}
|