tcpfiletransfer 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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