def openebs(environ, start_response): url = environ['PATH_INFO'][1:] try: username = environ['REMOTE_USER'] dataowner = 'HTM' except: return notfound(start_response) if url == '/update': renderLinePages('HTM') elif url == '/KV15messages': post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage(fp=env['wsgi.input'], environ=post_env, keep_blank_values=False) if 'userstopcodes' in post and messagecontent in post: try: [int(x) for x in post['userstopcodes']] except: return badrequest(start_reponse) else: return badrequest(start_response) msg = StopMessage(dataownercode=dataowner, userstopcodes=post['userstopcodes'], messagecontent=post['messagecontent']) if 'messagepriority' in post: if MessagePriority().validate(post['messagepriority']): msg.messagepriority = post['messagepriority'] else: return badrequest(start_response) if 'messagetype' in post: if MessageType().validate(post['messagetype']): msg.messagetype = post['messagetype'] else: return badrequest(start_response) if 'messagestarttime' in post: try: msg.messagestarttime = datetime.strptime(post['messagestarttime'], '%Y-%m-%dT%H:%M:%S') except: return badrequest(start_reponse) if 'messageendtime' in post: try: msg.messageendtime = datetime.strptime(post['messageendtime'], '%Y-%m-%dT%H:%M:%S') except: return badrequest(start_reponse) kv15 = KV15messages(stopmessages = [msg]) if 'messagescenario' in post: if len(post['messagescenario']) > 0: kv15.store(post['messagescenario']) else: return badrequest(start_reponse) else: kv15.push(remote, '/TMI_Post/KV15')
def waitforit(timestamp): now = datetime.today() seconds = (timestamp - now).seconds print '\nWaiting for: %s (%ds)' % (timestamp, seconds) if seconds < 3600: sleep(seconds) XX = 23 YY = (XX + 1) % 24 # GENERAL # REMOVE waitforit(datetime.combine(date.today(), time(XX, 00))) msg = StopMessage(userstopcodes=['42028501'], messagecontent='GENERAL REMOVE') msg.messagetype = MessageType.GENERAL msg.mesagedurationtype = MessageDurationType.REMOVE msg.messagestarttime = datetime.combine(date.today(), time(XX, 05)) kv15 = KV15messages(stopmessages = [msg]) kv15.push(remote, '/TMI_Post/KV15') waitforit(datetime.combine(date.today(), time(XX, 10))) delmsg = msg.delete() kv15 = KV15messages(stopmessages = [delmsg]) kv15.push(remote, '/TMI_Post/KV15') # GENERAL # ENDTIME
def waitforit(timestamp): now = datetime.today() seconds = (timestamp - now).seconds print '\nWaiting for: %s (%ds)' % (timestamp, seconds) if seconds < 3600: sleep(seconds) XX = 23 YY = (XX + 1) % 24 # GENERAL # REMOVE waitforit(datetime.combine(date.today(), time(XX, 00))) msg = StopMessage(dataownercode='VTN', userstopcodes=['42028501'], messagecontent='GENERAL REMOVE') msg.messagetype = MessageType.GENERAL msg.mesagedurationtype = MessageDurationType.REMOVE msg.messagestarttime = datetime.combine(date.today(), time(XX, 05)) kv15 = KV15messages(stopmessages = [msg]) kv15.push(remote, '/TMI_Post/KV15') waitforit(datetime.combine(date.today(), time(XX, 10))) delmsg = msg.delete() kv15 = KV15messages(stopmessages = [delmsg]) kv15.push(remote, '/TMI_Post/KV15') # GENERAL # ENDTIME
def openebs(environ, start_response): url = environ['PATH_INFO'] dataownercode = None ip_addr = environ['REMOTE_ADDR'] # if url == '/uitloggen': # return signout(start_response) if 'REMOTE_USER' not in environ and 'HTTP_AUTHORIZATION' not in environ: return authenticate(start_response) if 'REMOTE_USER' not in environ and 'HTTP_AUTHORIZATION' in environ: import base64 environ['REMOTE_USER'], _pass = base64.decodestring( environ['HTTP_AUTHORIZATION'].split('Basic ')[1]).split(':', 2) try: username, domain = environ['REMOTE_USER'].split('@') dataownercode = auth_lookup[domain.lower()] except: return notfound(start_response) author = environ['REMOTE_USER'] auth_author = {'scenario_create': False, 'scenario_delete': False} if author in authorization: auth_author = authorization[author] if url == '/stops/line': reply = querylinesperstop(dataownercode) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif '/stops/line/' in url: arguments = url.split('/') # temp fix, while waiting for linedirection in KV7network, query will be fast enough then key = dataownercode + '_' + arguments[3] if key in stopinline_cache: reply = stopinline_cache[key] else: reply = querystopinline(dataownercode, arguments[3]) stopinline_cache[key] = reply start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif url == '/line': reply = querylines(dataownercode) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif url == '/update': renderLinePages(dataownercode) elif url == '/berichten.html': renderKV15messages(dataownercode) elif url == '/settings.js': reply = json.dumps(dict(auth_author.items() + [('username', author)])) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif url == '/KV15scenarios': if environ['REQUEST_METHOD'] == 'GET': reply = StopMessage().overview_scenario(dataownercode) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif environ['REQUEST_METHOD'] == 'POST': post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage(fp=environ['wsgi.input'], environ=post_env, keep_blank_values=False) scenarioname = None scenariostarttime = None scenarioendtime = None if 'scenarioname' not in post: return badrequest( start_response, 'Kan geen scenario plannen zonder ScenarioName') if 'scenariostarttime' in post: try: scenariostarttime = datetime.strptime( post['scenariostarttime'].value, '%Y-%m-%dT%H:%M:%S') if scenariostarttime > (datetime.now() + timedelta(hours=72)): return badrequest( start_response, 'ScenarioStartTime kan niet 72 uur in de toekomst liggen' ) except: return badrequest( start_response, 'ScenarioStartTime kan niet worden gevalideerd') else: return badrequest( start_response, 'Kan geen scenario plannen zonder ScenarioStartTime') if 'scenarioendtime' in post: try: scenarioendtime = datetime.strptime( post['scenarioendtime'].value, '%Y-%m-%dT%H:%M:%S') except: return badrequest( start_response, 'ScenarioEndTime kan niet worden gevalideerd') else: return badrequest( start_response, 'Kan geen scenario plannen zonder ScenarioEndTime') if scenariostarttime >= scenarioendtime: return badrequest( start_response, 'ScenarioStartTime later of gelijk aan ScenarioEndTime') return badrequest( start_response, 'Je hebt alles goed ingevuld, maar dit stukje moeten we nog implementeren.' ) elif url.startswith('/KV15scenarios/'): if environ['REQUEST_METHOD'] == 'GET': scenario = url.split('/KV15scenarios/')[1] reply = StopMessage().overview_scenario(dataownercode, scenario) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif url == '/KV15deletescenarios': if environ['REQUEST_METHOD'] == 'POST': post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage(fp=environ['wsgi.input'], environ=post_env, keep_blank_values=False) if 'scenario_delete' in auth_author and auth_author[ 'scenario_delete']: if 'scenarioname' not in post: return badrequest(start_response, 'Geen scenario opgestuurd') StopMessage().delete_scenario(dataownercode, post['scenarioname'].value) reply = 'OK' start_response( '200 OK', COMMON_HEADERS_HTML + [ ('Content-length', str(len(str(reply)))), ]) return reply else: return badrequest( start_response, 'U heeft geen rechten om een scenario te verwijderen') elif url == '/KV15deletemessages': if environ['REQUEST_METHOD'] == 'POST': post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage(fp=environ['wsgi.input'], environ=post_env, keep_blank_values=False) messagecodedate = None messagecodenumber = None if 'messagecodedate' not in post: return badrequest(start_response, 'Geen messagecodedate ingevuld') else: messagecodedate = post['messagecodedate'].value if 'messagecodenumber' not in post: return badrequest(start_response, 'Geen messagecodenumber ingevuld') else: try: messagecodenumber = int(post['messagecodenumber'].value) except: return badrequest(start_response, 'Messagecodenumber geen integer') msg = DeleteMessage(dataownercode=dataownercode, messagecodedate=messagecodedate, messagecodenumber=messagecodenumber) kv15 = KV15messages(stopmessages=[msg]) conn = psycopg2.connect(kv15_database_connect) kv15.save(conn=conn) kv15.log(conn=conn, author=author, message='DELETE', ipaddress=ip_addr) try: respcode, resp = kv15.push(remote, remote_path) except: conn.rollback() conn.close() return badrequest(start_response, 'Connectie met GOVI mislukt') if not send or '>OK</' in resp: conn.commit() conn.close() else: conn.rollback() conn.close() regex = re.compile( "<tmi8:ResponseError>(.*)</tmi8:ResponseError>", re.MULTILINE | re.LOCALE | re.DOTALL) r = regex.search(resp) resp = r.groups()[0] return badrequest(start_response, resp) reply = 'Bericht verwijderd' start_response( '200 OK', COMMON_HEADERS_TEXT + [ ('Content-length', str(len(reply))), ]) return reply elif url == '/KV15messages': if environ['REQUEST_METHOD'] == 'GET': reply = StopMessage().overview(dataownercode) start_response( '200 OK', COMMON_HEADERS_JSON + [ ('Content-length', str(len(str(reply)))), ]) return reply elif environ['REQUEST_METHOD'] == 'POST': kv15 = None post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage(fp=environ['wsgi.input'], environ=post_env, keep_blank_values=False) userstopcodes = None if 'userstopcodes[]' in post: try: if isinstance(post['userstopcodes[]'], list): userstopcodes = [ x.value.split('_')[1] for x in post['userstopcodes[]'] ] for x in post['userstopcodes[]']: if x.value.split('_')[0] != dataownercode: return badrequest( start_response, 'Userstopcodes buiten dataowner domein') else: userstopcodes = [ str(post['userstopcodes[]'].value).split('_')[1] ] if str(post['userstopcodes[]'].value).split( '_')[0] != dataownercode: return badrequest( start_response, 'Userstopcode buiten dataowner domein') except Exception as e: print e return badrequest(start_response, 'Fout in UserStopCodes formaat') else: if 'userstopcodes[]' not in post: return badrequest(start_response, 'Er zijn geen haltes geselecteerd') if 'messagecontent' not in post: return badrequest(start_response, 'Bericht ontbreekt') msg = StopMessage(dataownercode=dataownercode, userstopcodes=userstopcodes, messagecontent=post['messagecontent'].value) if 'messagepriority' in post: if MessagePriority().validate(post['messagepriority'].value): msg.messagepriority = post['messagepriority'].value else: return badrequest( start_response, 'MessagePriority kan niet worden gevalideerd') if 'messagetype' in post: if MessageType().validate(post['messagetype'].value): msg.messagetype = post['messagetype'].value else: return badrequest( start_response, 'MessageType kan niet worden gevalideerd') if 'messagestarttime' in post: try: msg.messagestarttime = datetime.strptime( post['messagestarttime'].value, '%Y-%m-%dT%H:%M:%S') if msg.messagestarttime > (datetime.now() + timedelta(hours=72)): return badrequest( start_response, 'MessageStartTime kan niet 72 uur in de toekomst liggen' ) except: return badrequest( start_response, 'MessageStartTime kan niet worden gevalideerd') if 'messageendtime' in post: try: msg.messageendtime = datetime.strptime( post['messageendtime'].value, '%Y-%m-%dT%H:%M:%S') if msg.messageendtime < (datetime.now() - timedelta(minutes=5)): return badrequest( start_response, 'MessageEndTime kan niet in het verleden liggen') except: return badrequest( start_response, 'MessageEndTime kan niet worden gevalideerd') if msg.messagestarttime >= msg.messageendtime: return badrequest( start_response, 'MessageStartTime later of gelijk aan MessageEndTime') kv15 = KV15messages(stopmessages=[msg]) if 'messagescenario' in post: if 'scenario_create' in auth_author and auth_author[ 'scenario_create']: if len(post['messagescenario'].value) > 0: conn = psycopg2.connect(kv15_database_connect) kv15.save( conn=conn, messagescenario=post['messagescenario'].value) conn.commit() conn.close() else: return badrequest( start_response, 'MessageScenario kan niet worden gevalideerd') else: return forbidden( start_response, 'U heeft geen rechten om een scenario te maken') else: conn = psycopg2.connect(kv15_database_connect) kv15.save(conn=conn) kv15.log(conn=conn, author=author, message='PUBLISH', ipaddress=ip_addr) try: respcode, resp = kv15.push(remote, remote_path) except: conn.rollback() conn.close() return badrequest(start_response, 'Fout opgetreden in connectie met GOVI') if not send or '>OK</' in resp: conn.commit() conn.close() else: conn.rollback() conn.close() regex = re.compile( "<tmi8:ResponseError>(.*)</tmi8:ResponseError>", re.MULTILINE | re.LOCALE | re.DOTALL) r = regex.search(resp) resp = r.groups()[0] return badrequest(start_response, resp) reply = 'Bericht verstuurd' start_response( '200 OK', COMMON_HEADERS_TEXT + [('Content-length', str(len(reply)))]) return reply return notfound(start_response)