Class: UWA::Widget::Files

Inherits:
Handler
  • Object
show all
Defined in:
lib/uwa_files/config.rb,
lib/uwa_files/widget.rb

Constant Summary collapse

NAME =
'uwa_files'
VERSION =
'0.1'
'Copyright (C) 2007 Florent Solt'
DESC =
'UWA Files widget'
AUTHOR =
'Florent Solt'
EMAIL =
'[email protected]'
HOMEPAGE =
'http://gnetvibes.rubyforge.org'
LICENSE =
'BSD'

Instance Method Summary collapse

Constructor Details

#initializeFiles

Returns a new instance of Files.



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/uwa_files/widget.rb', line 6

def initialize
	super
	@author = AUTHOR
	@title = 'My Files'
	@icon = 'http://www.netvibes.com/img/icons/folder.gif'
	@tokens = {}
	@preferences << {:name => :login, :type => :text, :label => 'Login'}
	@preferences << {:name => :password, :type => :text, :label => 'Password'}
	@start = '/tmp'
	@users = {}
end

Instance Method Details

#deleteObject



81
82
83
84
85
# File 'lib/uwa_files/widget.rb', line 81

def delete
	return unless auth?
	target = @token[:files][query['target']]
	FileUtils.rm_rf(target)
end

#downloadObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/uwa_files/widget.rb', line 60

def download
	return unless auth?
	target = @token[:files][query['target']]
	unless target.nil?
		send_file(target)
	else
		response.status = '403'
		self << 'Forbidden'
	end
	@token[:files].delete(query['target']) # Security: remove used file token
end

#filesObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/uwa_files/widget.rb', line 36

def files
	return unless auth?
	answer = {:type => nil, :data => []}
	target = @token[:files][query['target']] || @start

	if File.directory?(target)
		@token[:files] = {} # Security: remove all unused tokens
		answer[:type] = :dir
		files = Dir[File.join(target, '*')].sort
		files.unshift(File.join(target, '..'))
		files.unshift(File.join(target, '.'))
		files.each do |f|
			ftoken = new_token
			@token[:files][ftoken] = File.expand_path(f)
			answer[:data] << {
				:name => File.basename(f),
				:type => File.directory?(f) ? :dir : :file,
				:token => ftoken }
			answer[:data].last[:path] = File.expand_path(f) if f[-1] == 46 # the dot dir
		end
	end
	self << JSON.unparse(answer)
end

#loginObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/uwa_files/widget.rb', line 24

def 
	token = query['token']
	 = @tokens[token][:login]
	if Digest::SHA1.new(token + @users[].to_s).hexdigest == query['digest']
		UWA::Server.log(:info, "Login successful for \"#{}\"")
		self << token
		@tokens[token][:auth] = true
	else
		UWA::Server.log(:warning, "Login failed for \"#{}\"")
	end
end

#login_tokenObject



18
19
20
21
22
# File 'lib/uwa_files/widget.rb', line 18

def 
	token = new_token
	@tokens[token] = {:login => query['login'], :auth => false, :files => {}}
	self << token
end

#renameObject



87
88
89
90
91
92
# File 'lib/uwa_files/widget.rb', line 87

def rename
	return unless auth?
	target = @token[:files][query['target']]
	new = query['new']
	File.rename(target, File.join(File.dirname(target), File.basename(new)))
end

#uploadObject



72
73
74
75
76
77
78
79
# File 'lib/uwa_files/widget.rb', line 72

def upload
	return unless auth?
	target = @token[:files][query['target']]
	File.open(File.join(target, query['file']['filename'] ), 'w') do |fd|
	 	fd.write query['file']['tempfile'].read
	end
	self << "File #{query['file']['filename'].inspect} uploaded"
end