Class: Burp::Util::UploadHandler

Inherits:
Object
  • Object
show all
Defined in:
app/lib/burp/util/upload_handler.rb

Defined Under Namespace

Classes: UploadedFile

Class Method Summary collapse

Class Method Details

.handle(file_or_file_name, request) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/lib/burp/util/upload_handler.rb', line 9

def self.handle file_or_file_name,request
    
  tempfile = handle_raw_data(file_or_file_name,request)
    
  shasum = `shasum #{tempfile.path}`.match(/^([0-9a-f]{40})/i)[1]
  new_dir = "/tmp/#{shasum}_#{Time.now.to_i}/"
  new_path = "#{new_dir}#{tempfile.original_filename}"  
    

  Dir.mkdir(new_dir)
  FileUtils.mv(tempfile.path,new_path)
    
  tempfile.close(true)
    
  yield(UploadedFile.new(new_path,shasum))
ensure
  File.unlink(new_path) if new_path && File.exist?(new_path)
  Dir.rmdir(new_dir) if new_dir && File.exist?(new_dir)
end

.handle_raw_data(tempfile, request) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/lib/burp/util/upload_handler.rb', line 52

def self.handle_raw_data tempfile,request
  if tempfile.is_a? String


    file = Tempfile.new('foo',:encoding => 'ascii-8bit')
    while s = request.env['rack.input'].read(16*1024)
      file.write(s)
    end
    file.flush

    def file.original_filename
      @file_name
    end
    
    def file.tempfile 
      self
    end
    
    def file.original_filename= value
      @file_name = value
    end
    
    file.original_filename = File.basename(tempfile)
    
    file
  else
    tempfile
  end
end