tcpfiletransfer 0.0.0 → 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 +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: {}
|