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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05f195e217bdd37c172dabe31b286f4eca7592dd3f6e4796aa87adf58b1baeb5
4
- data.tar.gz: 64cf03192f402ec6a13e095a2c0a31202b6aeb935cb48e21af68ba2be5c3774f
3
+ metadata.gz: d9f37556acb9adeccebd5bb3be4f60303050e260162506f2dc34e0ed29fbec33
4
+ data.tar.gz: 597ddb8b1aedc0071aa4da0bce1018aea983387c7dcebeb898a8c4f36993e59e
5
5
  SHA512:
6
- metadata.gz: d7dbd9504d578fa691e9b0ed7248eb45bed65a805a5a89d01680de18d1552d724df8484b5a668303c4e15619f0a2b634aa263394931fbf0fb428b2c218135ed5
7
- data.tar.gz: b461e404560f909265f9a696cecd0438b8050ca5764883f91dbb8d73ffcf6ee7968fc0eeafd4952b9acb5b2c571b72253df56d3686935a364ac06de5036a148b
6
+ metadata.gz: 2b278fcaa9740dbfcb4706dd459eab9070566f1562385717d9cf0a90c300fa9e6665f90d92485117de9ba9adfa55ee13de66143e95038ca513c603df629db034
7
+ data.tar.gz: f1ac7ab63ebb561c03cd95fe1d9525eab1474c076fa01af06b7e105116b7afb6dd71954df5182ed11c48016838dc00af240b4002d8b63cb9237ec0d820805687
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require "filetransfer"
3
+ x=FileTransfer::Server.new
4
+ x.start
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
@@ -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.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-24 00:00:00.000000000 Z
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: {}