lokster

Snapshot Proxy for mjpg_streamer

Apr 11th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.40 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #Licence: GPLv3.0
  3. #Copyright: 2017 Krasimir S. Stefanov (lokster)
  4. #Website: http://lokspace.eu
  5.  
  6. import SocketServer
  7. from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
  8. import urllib2
  9. import base64
  10. import os
  11. import time
  12.  
  13. MJS_AUTH_USER = "the user for your mjpg_streamer stream"
  14. MJS_AUTH_PASS = "the password for your mjpg_streamer stream"
  15. MJS_SNAPSHOT_ADDRESS = "the mjpg_streamer snapshot url"
  16. AUTH_USER = "the user for accessing this snapshot"
  17. AUTH_PASS = "the password for accessing this snapshot"
  18. PORT_NUMBER = 8083
  19.  
  20. os.chdir(os.path.dirname(os.path.abspath(__file__)))
  21. authString = "Basic %s" % base64.b64encode('%s:%s' % (AUTH_USER, AUTH_PASS))
  22.  
  23.  
  24. class Handler(BaseHTTPRequestHandler):
  25.     ''' Main class to present webpages and authentication. '''
  26.     def do_HEAD(self):
  27.         print "send header"
  28.         self.send_response(200)
  29.         self.send_header('Content-type', 'image/jpeg')
  30.         #self.send_header('Content-type', 'text/html')
  31.         self.end_headers()
  32.  
  33.     def do_AUTHHEAD(self):
  34.         print "send header"
  35.         self.send_response(401)
  36.         self.send_header('WWW-Authenticate', 'Basic realm=\"Snapshot Proxy\"')
  37.         self.send_header('Content-type', 'text/html')
  38.         self.end_headers()
  39.  
  40.     def do_GET(self):
  41.         ''' Present frontpage with user authentication. '''
  42.         if self.headers.getheader('Authorization') == None:
  43.             self.do_AUTHHEAD()
  44.             self.wfile.write('no auth header received')
  45.             pass
  46.         elif self.headers.getheader('Authorization') == authString:
  47.             self.do_HEAD()
  48.             if (MJS_AUTH_USER and MJS_AUTH_PASS):
  49.                 os.system('wget -O- "%s" --user="%s" --password="%s" 2>/dev/null | convert - /tmp/snapshot.jpg 2>/dev/null' % (MJS_SNAPSHOT_ADDRESS, MJS_AUTH_USER, MJS_AUTH_PASS))
  50.             else:
  51.                 os.system('wget -O- "%s" 2>/dev/null | convert - /tmp/snapshot.jpg 2>/dev/null' % SNAPSHOT_ADDRESS)
  52.             self.wfile.write(open('/tmp/snapshot.jpg', 'r').read())
  53.             os.system('rm /tmp/snapshot.jpg')
  54.             pass
  55.         else:
  56.             self.do_AUTHHEAD()
  57.             self.wfile.write(self.headers.getheader('Authorization'))
  58.             self.wfile.write('not authenticated')
  59.             pass
  60.  
  61. try:
  62.     #Create a web server and define the handler to manage the
  63.     #incoming request
  64.     server = HTTPServer(('', PORT_NUMBER), Handler)
  65.     print 'Started httpserver on port ' , PORT_NUMBER
  66.    
  67.     #Wait forever for incoming htto requests
  68.     server.serve_forever()
  69.  
  70. except KeyboardInterrupt:
  71.     print '^C received, shutting down the web server'
  72.     server.socket.close()
Add Comment
Please, Sign In to add comment