ó
/ôÿ\c           @   s9  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z m Z m Z m Z m	 Z	 m
 Z
 d  d l m Z m Z d  d l m Z d  d l m Z e e ƒ Z e e _ d e _ e  j j e  j j e ƒ ƒ Z d e f d „  ƒ  YZ e e j j d	 <e j d
 „  ƒ Z e j d „  ƒ Z  e j! d ƒ d „  ƒ Z" e j! d ƒ d „  ƒ Z# e j! d ƒ d „  ƒ Z$ e j! d ƒ e j! d ƒ d d „ ƒ ƒ Z& e j! d ƒ d „  ƒ Z' e j! d d d g ƒd „  ƒ Z( e j! d d d g ƒd d „ ƒ Z) e j! d d d g ƒe j! d  d d g ƒd d d! „ ƒ ƒ Z* e j! d" d d g ƒe j! d# d d g ƒd d$ „ ƒ ƒ Z+ e j! d% d d g ƒd& „  ƒ Z, e j! d' d d g ƒd( „  ƒ Z- e j! d) ƒ e j! d* ƒ e j! d+ ƒ d, d d- „ ƒ ƒ ƒ Z. d. e/ f d/ „  ƒ  YZ0 e0 e j1 ƒ e _1 e d0 k r5e j2 d1 d2 d3 d4 d5 e ƒ n  d S(6   iÿÿÿÿN(   t   Flaskt   requestt   redirectt   url_fort   make_responset   render_template(   t   send_from_directoryt   g(   t   secure_filename(   t   BaseConvertergš™™™™™ñ?t   RegexConverterc           B   s   e  Z d  „  Z RS(   c         G   s'   t  t |  ƒ j | ƒ | d |  _ d  S(   Ni    (   t   superR
   t   __init__t   regex(   t   selft   url_mapt   items(    (    s   /var/www/nespro/nespro.pyR      s    (   t   __name__t
   __module__R   (    (    (    s   /var/www/nespro/nespro.pyR
      s   R   c           C   s   t  j  ƒ  t _ d  S(   N(   t   timeR   t   start(    (    (    s   /var/www/nespro/nespro.pyt   before_request   s    c         C   s´   t  j  ƒ  t j } d |  j d <d |  j d <d |  j d <t j j t j j t ƒ ƒ |  j d <t j j t j	 ƒ  ƒ |  j d <d	 |  j d
 <d | d |  j d <t
 j |  j d <|  S(   Ns.   max-age=0, no-cache, no-store, must-revalidates   Cache-Controls   Thu, 29 Nov 1984 19:40:00t   Expiress   no-cachet   Pragmas   Run-int   CWDs   4 8 15 16 23 42s   X-LOSTs   %1.1f msiè  s	   X-Runtimes   X-App-Version(   R   R   R   t   headerst   ost   patht   dirnamet   abspatht   __file__t   getcwdt   appt   version(   t   responset   diff(    (    s   /var/www/nespro/nespro.pyt
   add_header   s    %s(   /<regex('(img|css|js)'):head>/<resource>c         C   s   t  t d d |  d | ƒƒ S(   Nt   statict   filenamet   /(   R   R   (   t   headt   resource(    (    s   /var/www/nespro/nespro.pyt
   get_static'   s    s(   /<regex('(font|fonts)'):head>/<resource>c         C   s   t  t d d d | ƒƒ S(   NR%   R&   s   fonts/(   R   R   (   R(   R)   (    (    s   /var/www/nespro/nespro.pyt
   get_images+   s    s   /pubkey/c           C   s   t  t j j t d ƒ d d ƒS(   NR%   R&   s   pubkey/key.pub(   R   R   R   t   joint   base(    (    (    s   /var/www/nespro/nespro.pyt   get_public_key/   s    s"   /<regex('([A-Z0-9]{4,11})'):hash>/sr   /<regex('([A-Z0-9]{4,11})'):hash>/<regex('overview|dates|report|statistics|notes|feedback|acknowledgment'):target>c         C   s   t  t d ƒ ƒ } | S(   Ns	   root.html(   R   R   (   t   hasht   targett   resp(    (    s   /var/www/nespro/nespro.pyt   root3   s    s   /blank/c          C   sP   d d  l  }  t |  j ƒ  ƒ j ƒ  } t t d d | ƒƒ } | j d | ƒ | S(   Niÿÿÿÿs
   blank.htmlt   uuidR   (   R3   t   strt   uuid4t   upperR   R   t
   set_cookie(   R3   t   my_uuidR1   (    (    s   /var/www/nespro/nespro.pyt   blank:   s
    s   /file/<uuid:uuid>t   methodst   GETc         C   s   |  GHt  d d d ƒS(   Ns   /tmp/R&   s
   image.jpeg(   R   (   R3   (    (    s   /var/www/nespro/nespro.pyt   get_fileC   s    s=   /intervention/<regex('([A-Z0-9]{4,11})'):hash>/<int:version>/t   POSTi    c         C   s!  d d  l  } | j t j ƒ } | d } d d  l } d g d | |  f g } t j j t | Œ } t j j	 | ƒ s… t j
 | ƒ n  d | |  | f } t t j j | | ƒ d ƒ }	 |	 j t j ƒ |	 j ƒ  d d  l }
 d d  l } d t j j t d ƒ |  f } |
 j | j | ƒ ƒ d	 S(
   Niÿÿÿÿt   numbert   interventionss   %s_%ss   %s_%s_%04d.jsont   wbs   %s -i -o -w %ss   xslt/json2sql.shs   Ahoy, capt'n(   t   jsont   loadsR   t   dataR   R   R   R,   R-   t   existst   makedirst   opent   writet   closet
   subprocesst   shlext   Popent   split(   R/   R!   RA   t   payloadR>   R   t   subdirt	   directoryR&   t   fileRI   RJ   t   shell(    (    s   /var/www/nespro/nespro.pyt   post_interventionH   s     

sU   /intervention/<regex('([A-Z0-9]{4,11})'):hash>/<int:mode>/<int:clear>/<path:sections>sF   /intervention/<regex('([A-Z0-9]{4,11})'):hash>/<int:mode>/<int:clear>/c      	   C   s.  d d l  m } m } d d l m } d d l m } m } d d l m	 }	 m
 }
 m } | d  k } | r+d g } xµ g  |	 |
 j t | Œ ƒ D] } t j |  | ƒ r� | ^ q� D]s } xj g  t |	 |
 j t | | g Œ ƒ d t ƒd  D] } | ^ qê D]& } t |
 j t | | g Œ d	 | ƒSWq± Wn  |
 j t d
 d ƒ } |
 j t d
 d ƒ } | d  k	 r}d d j | j d ƒ ƒ n d  } d | d  k r˜d n | |  | d k r°d n d |  f } | GH| | ƒ d | |  |  f } | | ƒ | d k r¡d | |  |  f } | | ƒ d d  l } t d# |  ƒ �n } | j | ƒ } t | ƒ d k r_| d ƒ n  | | j | d d t ƒj d ƒ ƒ } d | j d <| SWd  QXn  d d  l j j } | j d d |  ƒ j  d ƒ } t | ƒ d k rò| d ƒ n  d  | d j! ƒ  g } | d! j | ƒ ƒ } d" | j d <| S($   Niÿÿÿÿ(   t   callt   check_output(   RL   (   t   abortR   (   t   listdirR   t   systemR?   t   reversei   R&   s   xslt/s   sanitize.xslts   intv_xml2json.xslts   '%s't   ,R'   sË   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="call npro_export_xml_intervention('GER', %s, '%s', %s)"  NESA > /tmp/intv_%s.xml
  t   NULLi    t   TRUEt   FALSEs9   xsltproc %s /tmp/intv_%s.xml > /tmp/intv_%s_sanitized.xmls:   xsltproc %s /tmp/intv_%s_sanitized.xml > /tmp/intv_%s.jsons   /tmp/s   intv_%s.jsoni”  t   ensure_asciit   utf8s   application/jsons   Content-Types   intv_%s_sanitized.xmlt   interventions&   <?xml version="1.0" encoding="utf-8"?>s   
s   application/xmls   /tmp/intv_%s.json("   RI   RS   RT   RJ   RL   t   flaskRU   R   R   RV   R   RW   t   NoneR,   R-   t   ret   searcht   sortedt   TrueR   RA   RF   t   loadt   lent   dumpst   Falset   encodeR   t   xml.dom.minidomt   domt   minidomt   parset   getElementsByTagNamet   toxml(   R/   t   modet   cleart   sectionsRS   RT   RL   RU   R   RV   R   RW   t   cachedRN   t   ft   folderRP   t   xslt1t   xslt2RQ   RA   t	   json_datat   intvsR"   Rm   R?   t   xml(    (    s   /var/www/nespro/nespro.pyt   json_intervention_   sJ    	DI+.:


( s„   /calendars/<regex('[0-9]{4}-[0-9]{2}-[0-9]{2}'):from_date>/<regex('[0-9]{4}-[0-9]{2}-[0-9]{2}'):until_date>/<int:active>/<int:mode>/s“   /calendars/<regex('[0-9]{4}-[0-9]{2}-[0-9]{2}'):from_date>/<regex('[0-9]{4}-[0-9]{2}-[0-9]{2}'):until_date>/<int:active>/<int:mode>/<path:varargs>/c         C   s9  d d l  m } m } d d l m } d d l m } m }	 d d l m	 }
 m
 } m } | |  k  rq | d ƒ n  | j t d d ƒ } | j t d d	 ƒ } d
 |  | | d k r¶ d n d d j t | ƒ j d ƒ ƒ f } | | ƒ d | } | | ƒ | d k r)d | } | | ƒ t d d d ƒSt d d d ƒS(   Niÿÿÿÿ(   RS   RT   (   RL   (   RU   R   (   RV   R   RW   i�  s   xslt/s   sanitize.xslts   intv_xml2json.xsltsÕ   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="call npro_export_xml_calendars('GER', '%s', '%s', %d, '%s', 1)"  NESA > /tmp/calendars.xml
  i   i    RY   R'   s=   xsltproc %s /tmp/calendars.xml > /tmp/calendars_sanitized.xmls>   xsltproc %s /tmp/calendars_sanitized.xml > /tmp/calendars.jsons   /tmpR&   s   calendars.jsons   calendars_sanitized.xml(   RI   RS   RT   RJ   RL   R`   RU   R   R   RV   R   RW   R,   R-   R4   R   (   t	   from_datet
   until_dateRq   t   activet   varargsRS   RT   RL   RU   R   RV   R   RW   Rw   Rx   RQ   (    (    s   /var/www/nespro/nespro.pyt	   calendars•   s"    @




s;   /intervention/<regex('([A-Z0-9]{4,11})'):hash>/pdf/originalc         C   sœ   d d l  m } m } d d l m } d d l m } d d l m } m	 } m
 } d |  } | | | ƒ ƒ }	 | |	 ƒ }
 d |
 j d <d	 |  |
 j d
 <|
 S(   Niÿÿÿÿ(   RS   RT   (   RL   (   R   (   RV   R   RW   s¡   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="select npro_notify('%s', FALSE)"  NESA
  s   application/pdfs   Content-Types   inline; filename=%s.pdfs   Content-Disposition(   RI   RS   RT   RJ   RL   R`   R   R   RV   R   RW   R   (   R/   RS   RT   RL   R   RV   R   RW   RQ   t   pdfR"   (    (    s   /var/www/nespro/nespro.pyt   pdf_original·   s    
s3   /intervention/<regex('([A-Z0-9]{4,11})'):hash>/pdf/c         C   s  d d l  m } m } d d l m } d d l m } d d l m } m	 } m
 } | j t d d ƒ } | j t d d ƒ }	 d	 |  d
 |  f }
 | |
 ƒ d | |  |  f }
 | |
 ƒ d |  }
 |
 GH| | |
 ƒ ƒ } | | ƒ } d | j d <d |  | j d <| S(   Niÿÿÿÿ(   RS   RT   (   RL   (   R   (   RV   R   RW   s   xslt/s   intv_report.xslts   intv_xml2json.xsltsÍ   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="call npro_export_xml_intervention('GER', NULL, '%s', %s)"  NESA > /tmp/intv_%s.xml
  R[   s7   xsltproc %s /tmp/intv_%s.xml > /tmp/intv_%s_report.htmlsw   /usr/local/bin/./wkhtmltopdf.sh -q --title NESA -L 0 -R 0 -T 0 -B 0 --print-media-type -s A4 /tmp/intv_%s_report.html -s   application/pdfs   Content-Types   inline; filename=%s.pdfs   Content-Disposition(   RI   RS   RT   RJ   RL   R`   R   R   RV   R   RW   R,   R-   R   (   R/   RS   RT   RL   R   RV   R   RW   Rw   Rx   RQ   R‚   R"   (    (    s   /var/www/nespro/nespro.pyt   pdf_interventionÎ   s"    


s
   /database/s   /database/<int:mode>/s$   /database/<int:mode>/<path:varargs>/i   c         C   sü   d d l  m } m } d d l m } d d l m } m } d d l m	 } m
 } | j t d d ƒ }	 | j t d d ƒ }
 d	 d
 j t | ƒ j d ƒ ƒ } | | ƒ d |	 } | | ƒ |  d k rØ t d d d ƒSd |
 } | | ƒ t d d d ƒS(   Niÿÿÿÿ(   RS   RT   (   RL   (   RU   R   (   R   RW   s   xslt/s   sanitize.xslts   database.xsltsÀ   mysql -u F5VksfQsYW -h 192.168.10.10 -pmWaq9FiGC6  --default-character-set=utf8  --skip-column-names  --raw  --execute="call npro_export_xml_database('GER', '%s')"  NESA > /tmp/database.xml
  RY   R'   s;   xsltproc %s /tmp/database.xml > /tmp/database_sanitized.xmli    s   /tmpR&   s   database_sanitized.xmls<   xsltproc %s /tmp/database_sanitized.xml > /tmp/database.jsons   database.json(   RI   RS   RT   RJ   RL   R`   RU   R   R   R   RW   R,   R-   R4   R   (   Rq   R€   RS   RT   RL   RU   R   R   RW   Rw   Rx   RQ   (    (    s   /var/www/nespro/nespro.pyt   databaseî   s    "




t   ReverseProxiedc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R    (   R   R    (    (    s   /var/www/nespro/nespro.pyR     s    c         C   sŠ   | j  d d ƒ } | rU | | d <| d } | j | ƒ rU | t | ƒ | d <qU n  | j  d d ƒ } | rz | | d <n  |  j | | ƒ S(   Nt   HTTP_X_SCRIPT_NAMEt    t   SCRIPT_NAMEt	   PATH_INFOt   HTTP_X_SCHEMEs   wsgi.url_scheme(   t   gett
   startswithRg   R    (   R   t   environt   start_responset   script_namet	   path_infot   scheme(    (    s   /var/www/nespro/nespro.pyt   __call__  s    

(   R   R   R   R“   (    (    (    s   /var/www/nespro/nespro.pyR†     s   	t   __main__t   hosts   0.0.0.0t   portiX  t   debug(3   R   t   globRb   R   R`   R    R   R   R   R   R   R   R   t   werkzeugR   t   werkzeug.routingR	   R   R    Re   R—   R!   R   R   t   realpathR   R-   R
   R   t
   convertersR   t   after_requestR$   t   routeR*   R+   R.   Ra   R2   R9   R<   RR   R|   R�   Rƒ   R„   R…   t   objectR†   t   wsgi_appt   run(    (    (    s   /var/www/nespro/nespro.pyt   <module>   sL   0.			!4 !! $