tcpfiletransfer 0.0.5 → 0.1.0

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: caa1cea3d7b2808aca00ad1a748f1a397e874e1add0d0a1ed14ef5fd2f7b5602
4
- data.tar.gz: d8aac81d18586700087def6caa05bf85163b4ddc45fb07c7635045a0c9605ab1
3
+ metadata.gz: c6c7f4fef199c5858b707c3ff5cc74365fcf8c577a43ee6beed17842b315680a
4
+ data.tar.gz: 9251b887e474654b553bceada578c06308765f5dee659e8d51785fe659c7c200
5
5
  SHA512:
6
- metadata.gz: e9715882fcbcd4921f84f5668b837a6890a0757610e2d03a15c9fd6c24e8a295ab25368d23235d31b7e2670bfe7b1256115adc1f1bc38b368ae6832e8058861c
7
- data.tar.gz: 28269019957eb1a710ed3e2abbbf2d42022b920c2aeb9003b089fba83d64258c2a15ce5c0e0866f3b6b58dbf54b0137ba8b0be669b7f22967ae61c80f2a19b0c
6
+ metadata.gz: 99599794d083185fe86953e77497ecb22d138ed763032b5d15a2de3b5c7cbe2ed68e1e02ed0c8458b7e060d4cc3cad2b902a1882c81dbfc051bd77b85e0ab6f5
7
+ data.tar.gz: 16e268c86d36233496e1e3ebd933eb03c7d2829a302ef40ccdf8318f3995c1a43bac31837919b2407d7e65543c1f4b53e92acd6beb9587d5221d46223c3870bb
data/bin/sendfile CHANGED
@@ -5,25 +5,34 @@ require "socket"
5
5
  originalpath = ARGV[0] || `zenity --file-selection --title='Send File'`.chomp
6
6
  exit(1) if (!ARGV[0] && $?.exitstatus == 1)
7
7
 
8
- path = originalpath.gsub(" ", "`")
8
+ path = File.expand_path(originalpath).gsub(" ", "`")
9
9
  name = originalpath.split("/").last.gsub(" ", "_")
10
10
 
11
+ if File.directory?(path)
12
+ `zenity --error --text="Error: #{path} is a folder." --no-wrap --title="Send File"`
13
+ exit(1)
14
+ end
15
+
11
16
  recipient = ""
12
17
  loop do
13
- recipient = ARGV[1] || `zenity --text="Recipient\\n(Leave blank to discover available recipients)" --entry --title='Send File'`.chomp
18
+ recipient = ARGV[1] || `zenity --text="Recipient\\n(Leave blank to search for available recipients)" --entry --title='Send File'`.chomp
14
19
  exit(1) if $?.exitstatus == 1
15
20
 
16
21
  if recipient == ""
17
- `notify-send 'Please wait, searching for recipients'`
18
- hosts = `nmap -Pn -p8021 --open 192.168.0.0/24 | grep -oP '([\\w-]+\\s\\(((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}\\)|((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4})'`
19
- `zenity --info --no-wrap --title="Avalable recipients" --text="#{hosts}"`
22
+ `nmap -Pn -p8021 --open 192.168.0.0/24 | grep -oP '([\\w-]+\\s\\(((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}\\)|((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4})' | tee ~/.tmphosts | zenity --progress --pulsate --no-cancel --text="Searcing for available devices" --title="Searching..." --auto-close`
23
+ hosts = File.read("#{Dir.home}/.tmphosts")
24
+ recipient = `zenity --list --title="Avalable recipients" --text="Choose a device" --column="Available Recipients" #{hosts.split("\n").map{|h|"'#{h}'"}.join(" ")}`.match(/((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}/).to_s
25
+ break if recipient != ""
26
+ exit(1) if $?.exitstatus == 1
20
27
  else
21
28
  break
22
29
  end
23
30
  end
24
31
 
32
+ recipient = IPSocket.getaddress(recipient)
33
+
25
34
  server = TCPSocket.new("127.0.0.1", 8021)
26
- server.puts "FTSUBMIT #{name} #{path}"
35
+ server.puts "FTSUBMIT #{name} #{path} #{recipient}"
27
36
  fileid = server.gets
28
37
 
29
38
  file_size = '%.2f' % (File.size(originalpath).to_f / 2**20)
@@ -13,9 +13,10 @@ module FileTransfer
13
13
  def self.handle_file_submission(initdata, client)
14
14
  filename = initdata[1]
15
15
  filepath = initdata[2].gsub("`", " ")
16
+ dest_ip = initdata[3]
16
17
 
17
18
  fileid = self.genfileid(6)
18
- $active_transfers[?/ + fileid] = {name: filename, path: filepath}
19
+ $active_transfers[?/ + fileid] = {name: filename, path: filepath, dest_ip: dest_ip}
19
20
  client.puts fileid
20
21
  client.close
21
22
  end
@@ -4,7 +4,10 @@ module FileTransfer
4
4
  path = initdata[1].split("/")
5
5
  decline = (path[2] == "decline")
6
6
  path = ?/ + path[1]
7
+ sock_domain, remote_port, remote_hostname, remote_ip = client.peeraddr
8
+
7
9
  if decline
10
+ `zenity --error --title="Transfer Declined" --text="Your transfer to #{remote_hostname} has been declined." --no-wrap`
8
11
  $active_transfers.delete(path)
9
12
  client.puts "HTTP/1.0 200\r\nContent-Type: text/plain\r\n\r\nTransfer declined"
10
13
  client.close
@@ -23,7 +26,15 @@ module FileTransfer
23
26
  client.close
24
27
  return
25
28
  end
26
- 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])}"
29
+
30
+ if client.peeraddr[2] != file[:dest_ip]
31
+ client.puts "HTTP/1.0 403\r\nContent-Type: text/plain\r\n\r\nRequest from forbidden IP."
32
+ client.close
33
+ return
34
+ end
35
+
36
+ `zenity --info --title="Transfer Accepted" --text="Your transfer to #{remote_hostname} has been accepted." --no-wrap`
37
+ client.puts "HTTP/1.0 200\r\nContent-Length: #{File.size file[:path]}\r\nContent-Type: application/octet-stream\r\nContent-Disposition: attachment; filename=\"#{file[:name]}\"\r\n\r\n#{IO.binread(file[:path])}"
27
38
  $active_transfers.delete(path)
28
39
  client.close
29
40
  end
@@ -9,7 +9,7 @@ module FileTransfer
9
9
 
10
10
  x=system("zenity --question --icon-name=document-save-symbolic.symbolic --no-wrap --text=\"#{notification_body}\" --title='#{notification_title}'")
11
11
  if x
12
- file_location = `zenity --file-selection --save --filename=#{filename.chomp}`.chomp
12
+ file_location = `zenity --title="Save file" --file-selection --save --filename=#{filename.chomp}`.chomp
13
13
  if file_location == ""
14
14
  f=open(accept_link + "/decline")
15
15
  f.read
@@ -15,7 +15,12 @@ module FileTransfer
15
15
  elsif initdata[0] == "FTSEND"
16
16
  FTserver.handle_client(initdata, client)
17
17
  elsif initdata[0] == "FTSUBMIT"
18
- FTserver.handle_file_submission(initdata, client)
18
+ if client.peeraddr[2] == "127.0.0.1"
19
+ FTserver.handle_file_submission(initdata, client)
20
+ else
21
+ client.puts "ERROR FILE_SUBMIT_NOTLOCAL"
22
+ client.close
23
+ end
19
24
  else
20
25
  client.close
21
26
  end
data/lib/filetransfer.rb CHANGED
@@ -5,7 +5,7 @@ module FileTransfer
5
5
  @@files = ['server.rb', 'notifier.rb', 'httpserver.rb', 'ftserver.rb']
6
6
 
7
7
  def self.version
8
- "0.0.5"
8
+ "0.1.0"
9
9
  end
10
10
 
11
11
  def self.file_paths(relative:false)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcpfiletransfer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
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-26 00:00:00.000000000 Z
11
+ date: 2023-04-10 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