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
 | 
