andrejjel

Untitled

Jun 3rd, 2021
518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.98 KB | None | 0 0
  1. from http.server import BaseHTTPRequestHandler, HTTPServer
  2. from socketserver import ThreadingMixIn
  3. import sys
  4. import base64
  5. import http.client
  6. import json
  7.  
  8. key =  base64.b64encode(bytes('%s:%s' % ("demouser", "demopass"), 'utf-8')).decode('ascii')
  9.  
  10. class AuthHandler(BaseHTTPRequestHandler):
  11.  
  12.     def do_AUTHHEAD(self):
  13.         self.send_response(401)
  14.         self.send_header(
  15.             'WWW-Authenticate', 'Basic realm="Demo Realm"')
  16.         self.send_header('Content-type', 'application/json')
  17.         self.end_headers()
  18.  
  19.  
  20.     def do_GET(self):
  21.        
  22.         if self.headers.get('Authorization') == None:
  23.             print('No auth header')
  24.  
  25.             self.do_AUTHHEAD()
  26.  
  27.             response = {
  28.                 'success': False,
  29.                 'error': 'No auth header received'
  30.             }
  31.  
  32.             self.wfile.write(bytes(json.dumps(response), 'utf-8'))
  33.  
  34.         elif self.headers.get('Authorization') == 'Basic ' + str(key):
  35.  
  36.             print('Correct auth header')
  37.  
  38.             # proxy an imaage from the Pixabay
  39.  
  40.             # https://cdn.pixabay.com/photo/2021/04/25/08/07/tulips-6205808_1280.jpg
  41.             conn = http.client.HTTPSConnection("cdn.pixabay.com")
  42.             conn.request("GET", "/photo/2021/04/25/08/07/tulips-6205808_1280.jpg")
  43.             resp = conn.getresponse()
  44.             imgdata = resp.read()
  45.  
  46.             self.send_response(200)
  47.             self.send_header("Content-type", "image/jpeg")
  48.             self.end_headers()
  49.             self.wfile.write(imgdata)
  50.  
  51.         else:
  52.  
  53.             print('Incorrect auth header')
  54.  
  55.             self.do_AUTHHEAD()
  56.  
  57.             response = {
  58.                 'success': False,
  59.                 'error': 'Invalid credentials'
  60.             }
  61.  
  62.             self.wfile.write(bytes(json.dumps(response), 'utf-8'))         
  63.  
  64.  
  65. class ForkingHTTPServer(ThreadingMixIn, HTTPServer):
  66.     def finish_request(self, request, client_address):
  67.         request.settimeout(30)
  68.         # "super" can not be used because BaseServer is not created from object
  69.         HTTPServer.finish_request(self, request, client_address)           
  70.        
  71.  
  72. if __name__ == '__main__':
  73.     try:
  74.         httpd = ForkingHTTPServer(("localhost", 8090), AuthHandler)
  75.         httpd.serve_forever()
  76.     except KeyboardInterrupt:
  77.         httpd.socket.close()
Add Comment
Please, Sign In to add comment