# Veuillez saisir le message de validation pour vos modifications. Les
lignes # commençant par ' ' seront ignorées, et un message vide abandonne la validation. modifié: Doxyfile renommé: superTornado.py -> c/superTornado.py modifié: doc/html/annotated.html modifié: doc/html/classes.html modifié: doc/html/classm_1_1load_conf_1_1_config_error-members.html modifié: doc/html/classm_1_1load_conf_1_1_config_error.html modifié: doc/html/classm_1_1load_conf_1_1_load_conf-members.html modifié: doc/html/classm_1_1load_conf_1_1_load_conf.html modifié: doc/html/classm_1_1log_1_1_log-members.html modifié: doc/html/classm_1_1log_1_1_log.html modifié: doc/html/classm_1_1log_1_1_single_level_filter-members.html modifié: doc/html/classm_1_1log_1_1_single_level_filter.html modifié: doc/html/classm_1_1log_1_1bcolors-members.html modifié: doc/html/classm_1_1log_1_1bcolors.html modifié: doc/html/classm_1_1log_1_1lvl-members.html modifié: doc/html/classm_1_1log_1_1lvl.html modifié: doc/html/classm_1_1login_1_1_login-members.html modifié: doc/html/classm_1_1login_1_1_login.html modifié: doc/html/classsuper_tornado_1_1_base_handler-members.html modifié: doc/html/classsuper_tornado_1_1_base_handler.html modifié: doc/html/classsuper_tornado_1_1_disconnection_handler-members.html modifié: doc/html/classsuper_tornado_1_1_disconnection_handler.html modifié: doc/html/classsuper_tornado_1_1_global_vars-members.html modifié: doc/html/classsuper_tornado_1_1_global_vars.html modifié: doc/html/classsuper_tornado_1_1_main_handler-members.html modifié: doc/html/classsuper_tornado_1_1_main_handler.html modifié: doc/html/classsuper_tornado_1_1_unauthorized_handler-members.html modifié: doc/html/classsuper_tornado_1_1_unauthorized_handler.html modifié: doc/html/classsuper_tornado_1_1_video_handler-members.html modifié: doc/html/classsuper_tornado_1_1_video_handler.html modifié: doc/html/classsuper_tornado_1_1_w_socket_handler-members.html modifié: doc/html/classsuper_tornado_1_1_w_socket_handler.html modifié: doc/html/dir_060e062f70a4a7965197b0046a5699c1.html renommé: doc/html/functions_vars.html -> doc/html/dir_1784a01aa976a8c78ef5dfc3737bcac8.html modifié: doc/html/dir_b9f9e361513c934f24957ae0a3633a41.html modifié: doc/html/dir_cc95ad066e2e041bbee057a78f4a0df2.html modifié: doc/html/functions.html modifié: doc/html/functions_func.html modifié: doc/html/hierarchy.html modifié: doc/html/index.html modifié: doc/html/md__r_e_a_d_m_e.html modifié: doc/html/namespacemembers.html modifié: doc/html/namespacemembers_func.html modifié: doc/html/namespaces.html modifié: doc/html/namespacesuper_tornado.html modifié: doc/html/navtree.js modifié: doc/html/pages.html supprimé: doc/html/search/variables_0.html supprimé: doc/html/search/variables_0.js modifié: doc/latex/classm_1_1load_conf_1_1_config_error.pdf modifié: doc/latex/classm_1_1load_conf_1_1_load_conf.pdf modifié: doc/latex/classm_1_1log_1_1_log.pdf modifié: doc/latex/classm_1_1log_1_1_single_level_filter.pdf modifié: doc/latex/classm_1_1login_1_1_login.pdf modifié: doc/latex/classsuper_tornado_1_1_base_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_base_handler.tex modifié: doc/latex/classsuper_tornado_1_1_disconnection_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_disconnection_handler.tex modifié: doc/latex/classsuper_tornado_1_1_global_vars.tex modifié: doc/latex/classsuper_tornado_1_1_main_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_main_handler.tex modifié: doc/latex/classsuper_tornado_1_1_unauthorized_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_unauthorized_handler.tex modifié: doc/latex/classsuper_tornado_1_1_video_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_video_handler.tex modifié: doc/latex/classsuper_tornado_1_1_w_socket_handler.pdf modifié: doc/latex/classsuper_tornado_1_1_w_socket_handler.tex nouveau fichier: doc/latex/dir_1784a01aa976a8c78ef5dfc3737bcac8.tex modifié: doc/latex/refman.tex nouveau fichier: doc/man/man3/_home_sidya_Documents_iut_ptut_c_.3 modifié: doc/man/man3/_home_sidya_Documents_iut_ptut_m_.3 modifié: doc/man/man3/_home_sidya_Documents_iut_ptut_v_.3 modifié: doc/man/man3/_home_sidya_Documents_iut_ptut_v_js_.3 modifié: doc/man/man3/m_loadConf_ConfigError.3 modifié: doc/man/man3/m_loadConf_LoadConf.3 modifié: doc/man/man3/m_log_Log.3 modifié: doc/man/man3/m_log_SingleLevelFilter.3 modifié: doc/man/man3/m_log_bcolors.3 modifié: doc/man/man3/m_log_lvl.3 modifié: doc/man/man3/m_login_Login.3 modifié: doc/man/man3/md__r_e_a_d_m_e.3 modifié: doc/man/man3/superTornado.3 modifié: doc/man/man3/superTornado_BaseHandler.3 modifié: doc/man/man3/superTornado_DisconnectionHandler.3 modifié: doc/man/man3/superTornado_GlobalVars.3 modifié: doc/man/man3/superTornado_MainHandler.3 modifié: doc/man/man3/superTornado_UnauthorizedHandler.3 modifié: doc/man/man3/superTornado_VideoHandler.3 modifié: doc/man/man3/superTornado_WSocketHandler.3 supprimé: log/activity.log supprimé: log/error.log supprimé: log/warning.log supprimé: m/fichier/conf renommé: m/fichier/allow -> m/file/allow nouveau fichier: m/file/conf modifié: m/loadConf.py modifié: m/log.py modifié: m/login.py supprimé: test/AllowTest supprimé: test/ConfTest modifié: test/MiEmulator.py supprimé: test/a modifié: test/botTest.py supprimé: test/mfp.cookies
This commit is contained in:
359
c/superTornado.py
Normal file
359
c/superTornado.py
Normal file
@ -0,0 +1,359 @@
|
||||
"""Import Tornado Server"""
|
||||
import tornado.ioloop
|
||||
import tornado.web
|
||||
import tornado.httpserver
|
||||
import tornado.websocket
|
||||
import tornado.options
|
||||
from tornado.ioloop import PeriodicCallback
|
||||
|
||||
"""Other imports """
|
||||
import sys
|
||||
import time
|
||||
import base64
|
||||
import socket
|
||||
import os
|
||||
from urllib import urlopen
|
||||
import string
|
||||
import random
|
||||
import signal
|
||||
import httplib
|
||||
|
||||
|
||||
sys.path[:0]=['../']
|
||||
"""Import files"""
|
||||
from m.loadConf import *
|
||||
from m.login import *
|
||||
from m.log import *
|
||||
|
||||
def signal_handler(signal,frame) :
|
||||
"""
|
||||
Interception signal for stop server
|
||||
"""
|
||||
GlobalVars.loop.stop()
|
||||
|
||||
class GlobalVars :
|
||||
"""
|
||||
Global vars for server
|
||||
"""
|
||||
config = LoadConf("../m/file/conf")
|
||||
log = Log()
|
||||
blind = False
|
||||
ipCamera = ""
|
||||
portCamera = ""
|
||||
endUrlCamera = ""
|
||||
idCamera = ""
|
||||
urlCamera = ""
|
||||
portServ = ""
|
||||
urlSocket = ""
|
||||
ipDomo=""
|
||||
portDomo=""
|
||||
authorized = 0
|
||||
unauthorized = 0
|
||||
loop = tornado.ioloop.IOLoop.instance()
|
||||
|
||||
|
||||
|
||||
class BaseHandler(tornado.web.RequestHandler):
|
||||
"""
|
||||
Define BaseHandler for create the basis for session connection
|
||||
cookie secure based (sign and timestamp )
|
||||
"""
|
||||
def get_current_user(self):
|
||||
"""
|
||||
Return id connect current user connect
|
||||
else null
|
||||
"""
|
||||
return self.get_secure_cookie("user")
|
||||
|
||||
|
||||
class MainHandler(BaseHandler):
|
||||
"""
|
||||
Main web page : / in http sever
|
||||
"""
|
||||
def get(self):
|
||||
"""
|
||||
GET request -> return index.html where user can login
|
||||
"""
|
||||
self.render("v/index.html")
|
||||
|
||||
def post(self):
|
||||
"""
|
||||
POST request -> try to connect user with parameter POST (iden and paswd)
|
||||
if connection sucessfull
|
||||
go to the /video page (VideoHandler)
|
||||
else
|
||||
go to the /unauthorized page (UnauthorizedHandler)
|
||||
"""
|
||||
iden = self.get_argument("id","")
|
||||
paswd = self.get_argument("paswd","")
|
||||
|
||||
login = Login("m/file/allow")
|
||||
autorise = login.checkLogin(iden, paswd)
|
||||
self.set_secure_cookie("user", iden)
|
||||
if autorise == True:
|
||||
self.set_secure_cookie("user", iden,1)
|
||||
self.redirect("/video")
|
||||
else:
|
||||
GlobalVars.log.printL("->An unauthorized user try to access : " + self.request.remote_ip,lvl.WARNING)
|
||||
self.redirect("/unauthorized")
|
||||
|
||||
|
||||
class VideoHandler(BaseHandler):
|
||||
"""
|
||||
Video web page : /video in http sever
|
||||
"""
|
||||
def get(self):
|
||||
"""
|
||||
GET request ->
|
||||
If user is connected return video.html who
|
||||
allow with websocket (WSocketHandler) to see the video of the camera
|
||||
Else
|
||||
go to main page (MainHandler)
|
||||
"""
|
||||
if not self.current_user :
|
||||
self.redirect("/")
|
||||
return
|
||||
self.render("v/video.html", url=GlobalVars.urlSocket)
|
||||
|
||||
|
||||
class UnauthorizedHandler(BaseHandler):
|
||||
"""
|
||||
Unauthorized web page : /unauthorized in http server
|
||||
"""
|
||||
def get(self):
|
||||
"""
|
||||
GET request -> show the illegal.html page
|
||||
"""
|
||||
self.render("v/illegal.html")
|
||||
|
||||
def post(self):
|
||||
"""
|
||||
POST request ->
|
||||
if parameter POST force == 1
|
||||
force acess to camera
|
||||
else
|
||||
go to / page (MainHandler)
|
||||
"""
|
||||
force = self.get_argument("illegalAccess","")
|
||||
if force == "1" :
|
||||
self.set_secure_cookie("user", "IllegalUser",1)
|
||||
self.redirect("/video")
|
||||
else :
|
||||
self.redirect("/")
|
||||
|
||||
|
||||
class DisconnectionHandler(BaseHandler):
|
||||
"""
|
||||
/disconnection in http server
|
||||
"""
|
||||
def get(self):
|
||||
"""
|
||||
GET request -> clear session : disconnect user
|
||||
"""
|
||||
self.clear_cookie("user")
|
||||
self.redirect("/")
|
||||
|
||||
|
||||
class WSocketHandler(BaseHandler,tornado.websocket.WebSocketHandler):
|
||||
"""
|
||||
/socket in http server
|
||||
websocket definition
|
||||
"""
|
||||
def open(self) :
|
||||
"""
|
||||
Open socket request ->
|
||||
if is a connect user
|
||||
open connection socket, alert the unhabitant with the good signal
|
||||
else
|
||||
don't open connection
|
||||
"""
|
||||
if not self.current_user :
|
||||
self.close()
|
||||
return
|
||||
GlobalVars.log.printL("->Websocket Open : " + self.request.remote_ip,lvl.SUCCESS)
|
||||
iden = self.current_user
|
||||
if iden != "IllegalUser":
|
||||
GlobalVars.log.printL("->"+iden + " : Authorized user connection : "+self.request.remote_ip,lvl.INFO)
|
||||
if GlobalVars.blind == True:
|
||||
GlobalVars.authorized + 1
|
||||
GlobalVars.log.printL('->Send audio alarm authorized user',lvl.INFO)
|
||||
self.send_signal_house("/micom/say.php?source=tornado&text=Connexion%20a%20la%20camera%20autorisee")
|
||||
else:
|
||||
GlobalVars.authorized + 1
|
||||
GlobalVars.log.printL('->Send visual alarm authorized user',lvl.INFO)
|
||||
self.send_signal_house("/micom/lamp.php?room=salon1&order=1")
|
||||
else :
|
||||
GlobalVars.log.printL("->"+iden + ": Unauthorized user connection : " + self.request.remote_ip,lvl.WARNING)
|
||||
if GlobalVars.blind == True:
|
||||
GlobalVars.unauthorized + 1
|
||||
GlobalVars.log.printL('->Send audio alarm unauthorized user',lvl.WARNING)
|
||||
self.send_signal_house("/micom/say.php?source=tornado&text=Connexion%20a%20la%20camera%20non%20autorisee")
|
||||
else:
|
||||
GlobalVars.unauthorized + 1
|
||||
GlobalVars.log.printL('->Send visual alarm unauthorized user',lvl.WARNING)
|
||||
self.send_signal_house("/micom/lamp.php?room=salon1&order=1")
|
||||
self.send_image()
|
||||
|
||||
|
||||
def on_message(self,msg):
|
||||
"""
|
||||
Client Ask For Image
|
||||
"""
|
||||
GlobalVars.log.printL("->Demand Data Receive : " + self.request.remote_ip,lvl.INFO)
|
||||
try:
|
||||
self.send_image()
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL("->Failed Send data : Socket Close ",lvl.FAIL)
|
||||
def on_close(self):
|
||||
"""
|
||||
Socket connection Connection
|
||||
Alert unhabitant with the good signal
|
||||
"""
|
||||
GlobalVars.log.printL("->Websocket Closed : "+self.request.remote_ip,lvl.SUCCESS)
|
||||
iden = self.current_user
|
||||
if iden != "IllegalUser":
|
||||
GlobalVars.authorized - 1
|
||||
GlobalVars.log.printL("->"+iden+" : Authorized User Deconnection : "+self.request.remote_ip,lvl.INFO)
|
||||
else :
|
||||
GlobalVars.unauthorized - 1
|
||||
GlobalVars.log.printL("->"+iden +" : Unauthorized User Deconnection : "+self.request.remote_ip,lvl.WARNING)
|
||||
|
||||
if GlobalVars.blind == True:
|
||||
if (GlobalVars.unauthorized == 0) and (GlobalVars.authorized == 0):
|
||||
GlobalVars.log.printL('->Send Audio Alarm Deconnection User', lvl.INFO)
|
||||
self.send_signal_house("/micom/say.php?source=tornado&text=Connexion%20a%20la%20camera%20rompue")
|
||||
else:
|
||||
if (GlobalVars.unauthorized == 0) and (GlobalVars.authorized == 0):
|
||||
GlobalVars.log.printL('->Send Visual Alarm Deconnection User ...',lvl.INFO)
|
||||
self.send_signal_house("GET", "/micom/lamp.php?room=salon1&order=0")
|
||||
|
||||
def send_signal_house(self, pRq) :
|
||||
"""
|
||||
Allow send pRq request to the house
|
||||
"""
|
||||
GlobalVars.log.printL('maison = httplib.HTTPConnection("'+GlobalVars.ipDomo+'",'+ GlobalVars.portDomo+')',lvl.DEBUG)
|
||||
maison = httplib.HTTPConnection(GlobalVars.ipDomo,GlobalVars.portDomo)
|
||||
try :
|
||||
GlobalVars.log.printL(pRq,lvl.DEBUG)
|
||||
maison.request("GET",pRq)
|
||||
GlobalVars.log.printL("->Signal To House Send Successfully", lvl.SUCCESS)
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL(e.value, lvl.FAIL)
|
||||
GlobalVars.log.printL("->Signal To House Send Failed", lvl.FAIL)
|
||||
|
||||
def send_image(self) :
|
||||
"""
|
||||
Allow send the image in the websocket
|
||||
"""
|
||||
try :
|
||||
socket.setdefaulttimeout(5)
|
||||
f = urlopen(GlobalVars.urlCamera)
|
||||
data = f.read()
|
||||
encoded = base64.b64encode(data)
|
||||
f.close()
|
||||
self.write_message(encoded)
|
||||
GlobalVars.log.printL( "->Image Data Send : " + self.request.remote_ip, lvl.INFO)
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL(e,lvl.FAIL)
|
||||
self.write_message("error")
|
||||
|
||||
|
||||
|
||||
|
||||
application = tornado.web.Application([
|
||||
(r"/", MainHandler),
|
||||
(r"/video", VideoHandler),
|
||||
(r"/unauthorized", UnauthorizedHandler),
|
||||
(r"/disconnection", DisconnectionHandler),
|
||||
(r"/socket", WSocketHandler),
|
||||
(r"/(favicon.ico)", tornado.web.StaticFileHandler,{"path":"./v/images"},),
|
||||
(r"/style/(.*)", tornado.web.StaticFileHandler,{"path":"./v/style"},),
|
||||
(r"/images/(.*)", tornado.web.StaticFileHandler,{"path":"./v/images"},),
|
||||
(r"/js/(.*)", tornado.web.StaticFileHandler,{"path":"./v/js"},)],
|
||||
cookie_secret=''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(64)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
GlobalVars.log.printL("->Loading configuration ... ",lvl.INFO)
|
||||
try :
|
||||
GlobalVars.blind = GlobalVars.config.isBlind()
|
||||
GlobalVars.ipCamera = GlobalVars.config.ipCamera()
|
||||
GlobalVars.portCamera = GlobalVars.config.portCamera()
|
||||
GlobalVars.idUrlCamera = GlobalVars.config.idUrlCamera()
|
||||
GlobalVars.endUrlCamera = GlobalVars.config.endUrlCamera()
|
||||
GlobalVars.ipServ = GlobalVars.config.ipServ()
|
||||
GlobalVars.portServ = GlobalVars.config.portServ()
|
||||
GlobalVars.ipDomo = GlobalVars.config.ipDomo()
|
||||
GlobalVars.portDomo = GlobalVars.config.portDomo()
|
||||
|
||||
if GlobalVars.blind == "error" :
|
||||
raise ConfigError("Failed Load Blind Configuration")
|
||||
if GlobalVars.ipCamera == "error" :
|
||||
raise ConfigError("Failed Load IP Camera Configuration")
|
||||
if GlobalVars.portCamera == "error" :
|
||||
raise ConfigError("Failed Load Port Camera Configuration")
|
||||
if GlobalVars.idUrlCamera == "error" :
|
||||
raise ConfigError("Failed Load ID Camera Configuration")
|
||||
if GlobalVars.endUrlCamera == "error" :
|
||||
raise ConfigError("Failed Load End Url Camera Configuration")
|
||||
if GlobalVars.ipServ == "error" :
|
||||
raise ConfigError("Failed Load IP Server Configuration")
|
||||
if GlobalVars.portServ == "error" :
|
||||
raise ConfigError("Failed Load Port Server Configuration")
|
||||
if GlobalVars.ipDomo == "error" :
|
||||
raise ConfigError("Failed Load IP Domotic Configuration")
|
||||
if GlobalVars.portDomo == "error" :
|
||||
raise ConfigError("Failed Load Port Domotic Configuration")
|
||||
except ConfigError as e :
|
||||
GlobalVars.log.printL(e.value,lvl.FAIL)
|
||||
GlobalVars.log.printL("Configuration Loading Failed ! Check Configuration File !",lvl.FAIL)
|
||||
sys.exit(1)
|
||||
GlobalVars.log.printL("->Configuration Server Load Successfully !",lvl.SUCCESS)
|
||||
if GlobalVars.blind == True:
|
||||
GlobalVars.log.printL(" +Blind unhabitant",lvl.INFO)
|
||||
else :
|
||||
GlobalVars.log.printL(" +Not blind unhabitant",lvl.INFO)
|
||||
GlobalVars.log.printL(" +Ip Camera : " + GlobalVars.ipCamera,lvl.INFO)
|
||||
GlobalVars.log.printL(" +Port Camera : " + GlobalVars.portCamera,lvl.INFO)
|
||||
GlobalVars.log.printL(" +ID url Camera : " + GlobalVars.idUrlCamera,lvl.INFO)
|
||||
GlobalVars.log.printL(" +End url Camera : " + GlobalVars.endUrlCamera,lvl.INFO)
|
||||
GlobalVars.log.printL(" +Ip Server : " + GlobalVars.ipServ,lvl.INFO)
|
||||
GlobalVars.log.printL(" +Port Server : " + GlobalVars.portServ,lvl.INFO)
|
||||
GlobalVars.log.printL(" +IP Domotic : " + GlobalVars.ipDomo,lvl.INFO)
|
||||
GlobalVars.log.printL(" +Port Domotic : " + GlobalVars.portDomo,lvl.INFO)
|
||||
print ""
|
||||
|
||||
GlobalVars.urlSocket = 'ws://'+GlobalVars.ipServ+':'+GlobalVars.portServ+'/socket'
|
||||
GlobalVars.urlCamera = 'http://'+GlobalVars.idUrlCamera+'@'+GlobalVars.ipCamera+':'+GlobalVars.portCamera+GlobalVars.endUrlCamera
|
||||
|
||||
GlobalVars.log.printL("->Ping camera ...",lvl.INFO)
|
||||
try :
|
||||
socket.setdefaulttimeout(30)
|
||||
urlopen(GlobalVars.urlCamera)
|
||||
GlobalVars.log.printL( "->Camera OK ", lvl.SUCCESS)
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL("->WARNING : Camera Unreachable! Check Camera Configuration!",lvl.FAIL)
|
||||
print ""
|
||||
|
||||
try :
|
||||
GlobalVars.log.printL("->Server Start ...",lvl.INFO)
|
||||
tornado.options.parse_command_line()
|
||||
http_server = tornado.httpserver.HTTPServer(application)
|
||||
http_server.listen(GlobalVars.portServ)
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
GlobalVars.log.printL("->Server Start Successfully !",lvl.SUCCESS)
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL("Server Start Failed !",lvl.FAIL)
|
||||
GlobalVars.log.printL(e,lvl.FAIL)
|
||||
sys.exit(1)
|
||||
try :
|
||||
GlobalVars.loop.start()
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL("Server Crash !",lvl.FAIL)
|
||||
GlobalVars.log.printL(e,lvl.FAIL)
|
||||
sys.exit(1)
|
||||
try :
|
||||
GlobalVars.log.printL("->Server Stop Successfully !",lvl.SUCCESS)
|
||||
except Exception, e :
|
||||
GlobalVars.log.printL("Server Stop Failed !",lvl.FAIL)
|
||||
GlobalVars.log.printL(e,lvl.FAIL)
|
||||
sys.exit(1)
|
Reference in New Issue
Block a user