mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			
		
			
	
	
		
			178 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
|  | __filename__ = "httpcodes.py" | ||
|  | __author__ = "Bob Mottram" | ||
|  | __license__ = "AGPL3+" | ||
|  | __version__ = "1.5.0" | ||
|  | __maintainer__ = "Bob Mottram" | ||
|  | __email__ = "bob@libreserver.org" | ||
|  | __status__ = "Production" | ||
|  | __module_group__ = "Core" | ||
|  | 
 | ||
|  | import time | ||
|  | 
 | ||
|  | 
 | ||
|  | def write2(self, msg) -> bool: | ||
|  |     tries = 0 | ||
|  |     while tries < 5: | ||
|  |         try: | ||
|  |             self.wfile.write(msg) | ||
|  |             return True | ||
|  |         except BrokenPipeError as ex: | ||
|  |             if self.server.debug: | ||
|  |                 print('EX: _write error ' + str(tries) + ' ' + str(ex)) | ||
|  |             break | ||
|  |         except BaseException as ex: | ||
|  |             print('EX: _write error ' + str(tries) + ' ' + str(ex)) | ||
|  |             time.sleep(0.5) | ||
|  |         tries += 1 | ||
|  |     return False | ||
|  | 
 | ||
|  | 
 | ||
|  | def _http_return_code(self, http_code: int, http_description: str, | ||
|  |                       long_description: str, etag: str) -> None: | ||
|  |     msg = \ | ||
|  |         '<html><head><title>' + str(http_code) + '</title></head>' + \ | ||
|  |         '<body bgcolor="linen" text="black">' + \ | ||
|  |         '<div style="font-size: 400px; ' + \ | ||
|  |         'text-align: center;">' + str(http_code) + '</div>' + \ | ||
|  |         '<div style="font-size: 128px; ' + \ | ||
|  |         'text-align: center; font-variant: ' + \ | ||
|  |         'small-caps;"><p role="alert">' + str(http_description) + \ | ||
|  |         '</p></div>' + \ | ||
|  |         '<div style="text-align: center;" aria-live="polite">' + \ | ||
|  |         str(long_description) + '</div></body></html>' | ||
|  |     msg = msg.encode('utf-8') | ||
|  |     self.send_response(http_code) | ||
|  |     self.send_header('Content-Type', 'text/html; charset=utf-8') | ||
|  |     msg_len_str = str(len(msg)) | ||
|  |     self.send_header('Content-Length', msg_len_str) | ||
|  |     if etag: | ||
|  |         self.send_header('ETag', etag) | ||
|  |     self.end_headers() | ||
|  |     if not write2(self, msg): | ||
|  |         print('Error when showing ' + str(http_code)) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_200(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         ok_str = self.server.translate['This is nothing ' + | ||
|  |                                        'less than an utter triumph'] | ||
|  |         _http_return_code(self, 200, self.server.translate['Ok'], | ||
|  |                           ok_str, None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 200, 'Ok', | ||
|  |                           'This is nothing less ' + | ||
|  |                           'than an utter triumph', None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_401(self, post_msg: str) -> None: | ||
|  |     if self.server.translate: | ||
|  |         if self.server.translate.get(post_msg): | ||
|  |             ok_str = self.server.translate[post_msg] | ||
|  |         else: | ||
|  |             ok_str = post_msg | ||
|  |         _http_return_code(self, 401, | ||
|  |                           self.server.translate['Unauthorized'], | ||
|  |                           ok_str, None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 401, 'Unauthorized', | ||
|  |                           post_msg, None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_402(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         text = self.server.translate["It's time to splash that cash"] | ||
|  |         _http_return_code(self, 402, | ||
|  |                           self.server.translate['Payment required'], | ||
|  |                           text, None) | ||
|  |     else: | ||
|  |         text = "It's time to splash that cash" | ||
|  |         _http_return_code(self, 402, 'Payment required', text, None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_201(self, etag: str) -> None: | ||
|  |     if self.server.translate: | ||
|  |         done_str = self.server.translate['It is done'] | ||
|  |         _http_return_code(self, 201, | ||
|  |                           self.server.translate['Created'], done_str, | ||
|  |                           etag) | ||
|  |     else: | ||
|  |         _http_return_code(self, 201, 'Created', 'It is done', etag) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_207(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         multi_str = self.server.translate['Lots of things'] | ||
|  |         _http_return_code(self, 207, | ||
|  |                           self.server.translate['Multi Status'], | ||
|  |                           multi_str, None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 207, 'Multi Status', | ||
|  |                           'Lots of things', None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_403(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         _http_return_code(self, 403, self.server.translate['Forbidden'], | ||
|  |                           self.server.translate["You're not allowed"], | ||
|  |                           None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 403, 'Forbidden', | ||
|  |                           "You're not allowed", None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_404(self, ref: int) -> None: | ||
|  |     if self.server.translate: | ||
|  |         text = \ | ||
|  |             self.server.translate['These are not the ' + | ||
|  |                                   'droids you are ' + | ||
|  |                                   'looking for'] + \ | ||
|  |             ' ' + str(ref) | ||
|  |         _http_return_code(self, 404, | ||
|  |                           self.server.translate['Not Found'], | ||
|  |                           text, None) | ||
|  |     else: | ||
|  |         text = \ | ||
|  |             'These are not the droids you are looking for ' + str(ref) | ||
|  |         _http_return_code(self, 404, 'Not Found', text, None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_304(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         _http_return_code(self, 304, self.server.translate['Not changed'], | ||
|  |                           self.server.translate['The contents of ' + | ||
|  |                                                 'your local cache ' + | ||
|  |                                                 'are up to date'], | ||
|  |                           None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 304, 'Not changed', | ||
|  |                           'The contents of ' + | ||
|  |                           'your local cache ' + | ||
|  |                           'are up to date', | ||
|  |                           None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_400(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         _http_return_code(self, 400, | ||
|  |                           self.server.translate['Bad Request'], | ||
|  |                           self.server.translate['Better luck ' + | ||
|  |                                                 'next time'], | ||
|  |                           None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 400, 'Bad Request', | ||
|  |                           'Better luck next time', None) | ||
|  | 
 | ||
|  | 
 | ||
|  | def http_503(self) -> None: | ||
|  |     if self.server.translate: | ||
|  |         busy_str = \ | ||
|  |             self.server.translate['The server is busy. ' + | ||
|  |                                   'Please try again later'] | ||
|  |         _http_return_code(self, 503, | ||
|  |                           self.server.translate['Unavailable'], | ||
|  |                           busy_str, None) | ||
|  |     else: | ||
|  |         _http_return_code(self, 503, 'Unavailable', | ||
|  |                           'The server is busy. Please try again ' + | ||
|  |                           'later', None) |