87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | module ListCommand | ||
|  | 
 | ||
|  |   def list path, params=nil, status=200
 | ||
|  |     all_privileges | ||
|  | #    list_send(path, status, 406, params) | ||
|  | 
 | ||
|  |     cmd = "" | ||
|  |     path.split("/").each do |s| | ||
|  |       cmd += "/" + s | ||
|  |       if cmd == "/" + path | ||
|  |         list_send(cmd, status) | ||
|  |       else | ||
|  |         self.get cmd | ||
|  |         self.check_status 404
 | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     read_only_privileges | ||
|  |     list_send(path, status, params) | ||
|  |     write_only_privileges | ||
|  |     list_send(path, 401, params) | ||
|  |     empty_privileges | ||
|  |     list_send(path, 401, params) | ||
|  |     self.username = ROOTUSER | ||
|  |     list_send(path, status, params) | ||
|  |   end | ||
|  | 
 | ||
|  |   def list_deny | ||
|  |     empty_privileges | ||
|  |     cnt = 0
 | ||
|  |     begin | ||
|  |       yield | ||
|  |       if cnt == 0
 | ||
|  |         write_only_privileges | ||
|  |         cnt = 1
 | ||
|  |         raise RangeError | ||
|  |       end | ||
|  |     rescue RangeError | ||
|  |       retry | ||
|  |     end | ||
|  | 
 | ||
|  |   end | ||
|  | 
 | ||
|  |   def list_providers cmd, as_ok=401, as_not_found=401
 | ||
|  |     all_privileges | ||
|  |     check_provider cmd | ||
|  | 
 | ||
|  |     read_only_privileges | ||
|  |     check_provider cmd | ||
|  | 
 | ||
|  |     write_only_privileges | ||
|  |     check_provider cmd, as_ok, as_not_found, 401
 | ||
|  | 
 | ||
|  |     empty_privileges | ||
|  |     check_provider cmd, as_ok, as_not_found, 401
 | ||
|  | 
 | ||
|  |     self.username = ROOTUSER | ||
|  |     check_provider cmd | ||
|  |   end | ||
|  | 
 | ||
|  |   def check_provider cmd, ok_status=200, not_found_status=404, auth_not_found=406
 | ||
|  |     #js = (ok_status == 200 ? 406 : ok_status) | ||
|  |     PROVIDERS.each do |p| | ||
|  |       list_send(cmd.gsub(":provider", p), ok_status) | ||
|  |     end | ||
|  |     path = "" | ||
|  |     st = not_found_status | ||
|  |     cmd.split("/").each do |s| | ||
|  |       path += "/" + s | ||
|  |       if path == "/" + cmd | ||
|  |         list_send(path, st) | ||
|  |       else | ||
|  |         self.get path | ||
|  |         self.check_status 404
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def list_send path, status=200, params=nil | ||
|  |     self.get path, params, {"Accept" => "application/xml"} | ||
|  |     self.check_status 406
 | ||
|  |     self.get path, params, {"Accept" => "application/json"} | ||
|  |     self.check_status status | ||
|  |     self.check_type :json if status == 200
 | ||
|  |   end | ||
|  | end |