mò
dwIc           @   s~  d  Z  d k l Z e ƒ  Z d k l Z d k l Z l Z d k	 l
 Z
 l Z l Z l Z e i d ƒ d k Z d „  Z e i Z e i Z d Z d	 Z d
 Z d Z d Z e d d e d ƒ Z e e d ƒ Z d Z d d g Z d d d g Z d e d e d Z d e d Z d e d e d e d e d  Z  d! „  Z! d" f  d# „  ƒ  YZ" d$ f  d% „  ƒ  YZ# d& „  Z$ d' „  Z% d S((   sš   
flot.es Server:

  This server is an extension of the Apache 2 web server using mod_python.
  refer to /shared/docs/conventions for coding conventions.

(   s   time(   s   path(   s   paths   popen(   s   apaches   utils   Sessions   Cookies   /shared/python/pkgNc         C   s0   y |  | SWn t t f j
 o d  Sn Xd  S(   N(   t   _mapt   _keyt   KeyErrort
   IndexErrort   None(   R    R   (    (    t   /var/www/flot.es/flt.pyt   C_lookup   s    i@   i    t   8Cl6PefmE8bDlHP2s   flot.ess   http://static.flot.ess   /vart   wwwt   sitess   flot.es.logf1000000000.0t   uploadt   savet   logint   updatet   messagesÝ  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head profile="http://www.w3.org/2005/10/profile">

<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="robots" content="index,follow" />
<meta name="revisit-after" content="7 days" />
<meta name="siteinfo" content="s°   /robots.txt" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta name="googlebot" content="noarchive" />

<link rel="stylesheet" type="text/css" href="sA   /include/flt.css" />
<link rel="icon" href="favicon.ico">
<title>s7   </title>

<link rel="stylesheet" type="text/css" href="si  /include/farbtastic.css" />

<!--[if lt IE 7]>
<style>
/* hide broken shadows in ie6 */
.flt-shadow{visibility:hidden}
#flt-hdr-handle img{visibility:hidden}
</style>
<![endif]-->

<script>
//<!--
var new_site=false;
//-->
 </script>
</head>
<body>
 <iframe id="upload_target" name="upload_target"></iframe>
 <div id="flt-content" class="no-transform no-rte">
 s€   </div>
 <div id="flt-header" style="visibility:hidden" class="ui">
   <div class="flt-shadow" style="width:100%;background:url('sð   /img/bg.png');top:20px"></div>
 </div>
 <div id="flt-hdr-handle" class="ui">
  <a href="/home/no-javascript.html">flot.es</a>
  <div class="flt-shadow" style="top:15px"></div>
 </div>
 <div id="flt-ui"></div>
 <script>
//<!--

var FHOST = "s   ",
    FHOST_STATIC = "sw   ";
var HOME = (window.location+'/').match(/(http:\/\/.*?)\//)[1],
    SITE = HOME.match(/http:\/\/(.*)$/)[1].replace(".s¢  ","");

function loadScript(filename) {
 var fileref=document.createElement('script');
 fileref.setAttribute("type","text/javascript");
 fileref.setAttribute("src", FHOST_STATIC+"/include/"+filename);
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref);
}

var handle=document.getElementById("flt-hdr-handle");
function loader() {
 document.getElementById("flt-hdr-icon").src=FHOST_STATIC+"/img/loading.gif";
 if(handle.removeEventListener){ // Mozilla, Netscape, Firefox
  handle.removeEventListener('click',loader,false);
 } else { // IE
  handle.detachEvent('click',loader);
 }
 loadScript("jquery-1.2.6.js");
 tryLoadFlotes();
}

function tryLoadFlotes() {
  if(typeof $ == "undefined") {
    setTimeout("tryLoadFlotes();",250);
  } else {
    loadScript("flt-0.2.js");
  }
}

handle.innerHTML='   flot.es<img src="'+FHOST_STATIC+'/img/bar_down.png" id="flt-hdr-icon"/>   <div class="flt-shadow" style="background:url('+FHOST_STATIC+'/img/bg.png);top:15px;width:45px"></div> ';

if(new_site || document.cookie.match("user="+SITE)) { loader() } else {
 if(window.addEventListener){ // Mozilla, Netscape, Firefox
  handle.addEventListener('click',loader,false);
 } else { // IE
  handle.attachEvent('click',loader);
 }
}

//-->
 </script>
<!--[if lt IE 8]>
  <script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE8.js" type="text/javascript"></script>
<![endif]-->
</body>
</html>
c         C   sD   t  o9 t t  ƒ o t d |  t  ƒ q@ t d |  t  ƒ n d  S(   Ns   echo `date`: "%s" >> s   echo `date`: "%s" > (   t   LOGt   existst   popent   msg(   R   (    (    R   t   log—   s    t   DoneExceptionc           B   s   t  Z RS(   N(   t   __name__t
   __module__(    (    (    R   R   ž   s   t	   Responderc           B   sì   t  Z g  Z e Z d Z d Z d  Z h  Z	 d  Z
 d  Z d „  Z d „  Z d „  Z d  d „ Z d  d „ Z d  d „ Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d  d „ Z d „  Z d d „ Z d d „ Z RS(   Nt    c         C   sÐ   | |  _  |  i  i ƒ  |  i  i d |  _ | i d t |  i  i d ƒ p d i d ƒ |  _ t d |  i |  i f ƒ |  i	 d ƒ |  _
 |  i	 d ƒ |  _ |  i	 d	 ƒ |  _ t d
 |  i
 |  i |  i f ƒ d  S(   Nt	   HTTP_HOSTt   SCRIPT_NAMEt	   PATH_INFOR   t   /s   HOST=%s PATH=%st   actt   urit   sites   act=%s uri=%s site=%s(   t   reqt   selft   add_common_varst   subprocess_envt   hostR   t   stript   pathR   t   formR   R   R   (   R!   R    (    (    R   t   __init__®   s    	3c         C   s|  |  i p |  i o' |  i d |  i |  i |  i f ƒ n |  i o7 d |  i j o' |  i d t |  i i d ƒ ƒ ƒ n t |  i ƒ t j o$ |  i d t t |  i ƒ f ƒ n |  i o: t |  i ƒ t j o$ |  i d t t |  i ƒ f ƒ n t	 t
 |  i ƒ |  _ t	 |  i |  i p d ƒ |  _ |  i d j o |  i ƒ  n |  i d ƒ p |  i |  _ t d	 |  i ƒ d
 |  i _ |  i t j o( |  i |  i ƒ p |  i d ƒ q÷n9 |  i t j o( |  i |  i ƒ p |  i d ƒ q÷n |  i d j o™ |  i |  i ƒ o |  i |  i ƒ n |  i |  i ƒ |  i oN |  i |  i j o; |  i |  i ƒ o |  i |  i ƒ q–|  i |  i ƒ n t ‚ n |  i d j oÅ |  i d ƒ i } t d | ƒ | o t t	 |  i | ƒ ƒ o |  i d ƒ qqd | j oR | d j oE t t	 |  i | ƒ d ƒ i |  i d ƒ i i  ƒ  ƒ |  i d ƒ qqqd|  i d ƒ nð|  i d j o  |  i! ƒ  t	 t
 |  i |  i ƒ } |  i d ƒ o] |  i d ƒ oM t | d ƒ i t" |  i d ƒ t# |  i d ƒ t$ ƒ |  i d | ƒ qd|  i d ƒ n@|  i d j oY |  i% ƒ  y |  i& d =Wn" t' j
 o d |  _( t ‚ n Xt) |  _* d |  _( t ‚ n× |  i d j o |  i d  ƒ n¶ |  i d! j o! |  i+ |  i ƒ |  i d" ƒ n… |  i d# j ot |  i d$ ƒ o` |  i, |  i d$ t- |  i d$ ƒ ƒ ƒ |  i |  i. j o |  i. i/ |  i ƒ n |  i d% ƒ qdn |  i d& |  i ƒ d  S('   Ns0   Invalid argument(s): act="%s" site="%s" uri="%s"R   s   Too many subdirectories (%s).s    Site name exceeds %s characters.s$   Filename exceeds %s characters (%s).R   t   newt   users   User claims to be %ss
   text/plains   Login failed.t   dataR
   t   files   Uploading %s.s   File exists. Creating link.
s   flt.s	   site.infot   wbs   Upload succeeded.s   No filename found.R   t   titlet   htmlt   ws	   Saved %s
s0   Invalid Arguments: title and/or html is missing.t   logouts   Not logged in.s   Logged out.R   s
   Logged in.R   s   Message sent.R   t   linkss   Update completed.s   Action '%s' not handled(0   R!   R   R   t   errorR   t   lent   splitt   MAX_SITE_LENGTHt   MAX_FILENAME_LENGTHt   dirt   ROOTt   site_fst   uri_fst   new_pageR'   R*   R   R    t   content_typet   AUTH_SITE_ACTIONSt   autht   AUTH_ANY_ACTIONSt   send_auth_infot   send_shared_infoR   t   filenamet   tgtR   t   okt   opent   writeR,   t   readt   mkdirt   HDR0t   HDR1t   FTRt   load_sessiont   SR   t   outt   Truet   session_dirtyt	   load_infot   infot   evalt
   info_dirtyt   append(   R!   RD   (    (    R   t   respond½   sŠ    ''$ $
4
 8
			
% c         C   só   t  d | |  i d ƒ f ƒ | p t Sn | |  i d ƒ j o t  d ƒ n |  i d ƒ p t Snx |  i | d ƒ } t i	 |  i d ƒ t
 ƒ } | o& | | j o |  i | ƒ qß t Sn |  i | d | ƒ t  d ƒ |  i d | ƒ t S(   Ns*   Authenticating user %s. Current user is %sR*   s   Already authenticated.t   passwords   New password created.(   R   R*   R!   t   sessiont   FalseR'   RS   t   ipwt   md5cryptt   unix_md5_cryptt   MD5KEYt   fpwRA   RP   (   R!   R*   R_   R[   (    (    R   R?     s"     
c         C   s¥   |  i ƒ  | d  j o$ y |  i | i SWq¡ d  Sq¡ Xng | |  i | <t i | | ƒ } d |  i	 | _
 t ƒ  t | _ t i |  i | ƒ t d | | f ƒ d  S(   Ns   /%ss   set cookie %s=%s(   R!   t   load_cookiest   valR   t   Ct   keyt   valuet   Cookiet   cookieR   R&   t   server_timet   FOREVERt   expirest
   add_cookieR    R   (   R!   Rc   Ra   Rf   (    (    R   Rf   1  s    
c         C   s¯   |  i i | ƒ p |  i | ƒ n | d  j o1 y |  i | | SWq« t j
 o d  Sq« XnJ t	 d | | f ƒ | |  i | | <| |  i
 j o |  i
 i | ƒ n d  S(   Ns   set info %s=%s(   R!   t   It   has_keyR*   RR   Ra   R   Rc   R   R   RU   RV   (   R!   R*   Rc   Ra   (    (    R   RS   @  s     c         C   sr   |  i ƒ  | d  j o- y |  i | SWqn t j
 o d  Sqn Xn+ | |  i | <t d | | f ƒ t |  _	 d  S(   Ns   set session %s=%s(
   R!   RM   Ra   R   RN   Rc   R   R   RP   RQ   (   R!   Rc   Ra   (    (    R   RY   P  s    
c         C   s3   |  i p t i |  i ƒ |  _ n t |  i | ƒ S(   N(   R!   t   Ft   utilt   FieldStorageR    R   Rc   (   R!   Rc   (    (    R   R'   \  s    
c         C   s+   |  i o d  Sn t i |  i ƒ |  _ d  S(   N(   R!   Rb   Re   t   get_cookiesR    (   R!   (    (    R   R`   a  s    
 c         C   st   |  i o d  Sn t i |  i d d d d ƒ|  _ |  i i ƒ  o- |  i |  i d |  i |  i d ƒ d ƒ n d  S(   Nt   timeoutiØ¤  t   locki    t   hitsi   (   R!   RN   t   SessionR    t   is_newRS   R   (   R!   (    (    R   RM   e  s
    
 !c         C   s   t  |  i | ƒ o d  Sn t t t | ƒ d ƒ } t | ƒ o# t t	 | ƒ i
 ƒ  ƒ |  i | <n) h  d d <d g  <d g  <|  i | <d  S(   Ns   flt.infoRs   i    R2   t   messages(   R   R!   Rk   R*   R8   R9   t	   info_fileR   RT   RF   RH   (   R!   R*   Rw   (    (    R   RR   k  s     #c         C   s   |  i | d g ƒ d  S(   NR2   (   R!   t	   send_infoR*   (   R!   R*   (    (    R   RB   s  s    c         C   s   |  i | d d d g ƒ d  S(   NR2   Rs   Rv   (   R!   Rx   R*   (   R!   R*   (    (    R   RA   v  s    c         C   si   d | |  _ |  i d i g  } | D]# } | d | |  i | | ƒ f q% ~ ƒ 7_ |  i d 7_ d  S(   Ns
   INFO.%s={
t   ,s   %s:%s
s   };
(   R*   R!   t   scriptt   joint   _[1]t   keyst   kRS   (   R!   R*   R}   R|   R~   (    (    R   Rx   y  s    Ic         C   sý   |  i d d g j o |  i i |  i ƒ n! |  i i d |  i |  i f ƒ |  i o t d ƒ |  i i	 ƒ  n xo |  i
 D]d } |  i t t | ƒ ƒ t d | |  i | f ƒ t t t | d ƒ d ƒ i d |  i | ƒ q| Wt d	 t ƒ  t ƒ d  S(
   NR
   R)   s[   
<div class='rsp-data'>
 <div class='rsp-msg'>
%s
 </div>
 <script>
%s
 </script>
</div>
  s   saving sessions   saving user %s info: %ss   flt.infoR0   s   %ss   ok, processing took %s

(   R!   R   R    RG   RO   Rz   RQ   R   RN   R   RU   R*   RI   R8   R9   Rk   RF   Rg   t   T(   R!   R*   (    (    R   t   cleanup~  s     


 1c         C   sU   | p |  i } t | ƒ p4 t d | p |  i ƒ t d | p |  i ƒ n d  S(   Ns	   creating s   mkdir -p %s(   R8   R!   R:   R   R   R   (   R!   R8   (    (    R   RI   š  s    c         C   sz   t  d ƒ d |  i _ |  i |  i d j o d |  i i d d ƒ p d } t | t	 d | i
 ƒ  t |  _ t ‚ d  S(   Ns	   New page.s	   text/htmls
   index.htmls    : s   .htmlR   sš  
<div class='default' style='left:60px;top:30px;font-size:36px;color:#808080;font-weight:bold;font-family:sans-serif'>&nbsp;welcome to %s</div>
<div class='default' style='left:120px;width:500px;top:100px;font-size:14px;border:1px solid #000000;background-color:#ffffe0;font-family:sans-serif'>
<b>You have just created this website!</b><br/>
<ol>
<li>To start making changes just click on this box. Try moving and resizing it.</li>
<li>Click the pencil icon above the box to edit the text inside it.</li>
<li>Add new objects from the net, your computer, or from scratch using the toolbar above.</li>
</ol>
</div>
<script class='remove-me'>
new_site=true;
</script>
(   R   R!   R    R=   R   R   t   replaceR.   RJ   RK   t
   capitalizeRL   RO   R   (   R!   R.   (    (    R   R<      s
    
7#c         C   s+   |  i d | 7_ t d | ƒ t ‚ d  S(   Ns   (ERR) %s(   R!   RO   R   R   R   (   R!   R   (    (    R   R3   ¶  s    c         C   s   |  i d | 7_ t ‚ d  S(   Ns   (OK) %s(   R!   RO   R   R   (   R!   R   (    (    R   RE   »  s    (   R   R   RU   RZ   RQ   RO   Rz   R   RN   Rk   Rb   Rm   R(   RW   R?   Rf   RS   RY   R'   R`   RM   RR   RB   RA   Rx   R€   RI   R<   R3   RE   (    (    (    R   R   ¡   s4   		]										c         C   sA   t  |  ƒ } y | i ƒ  Wn t j
 o | i ƒ  n Xt i S(   sµ   flot.es handler routine.
        Interrupts Apache handlers in order to provide custom flot.es behaviour.
        ie) lazy creation of non-existent html files instead of 404 errors.N(   R   R    t   RRW   R   R€   t   apachet   OK(   R    Rƒ   (    (    R   t   handler¿  s     c         C   sz   |  i ƒ  |  i } | d } | d } | t | d ƒ p d 7} t d | | f ƒ |  i ƒ  d j o t	 i
 Sn t	 i S(   NR   R   R   R   s   AUTH for %s on %st	   prototype(   R    R"   R#   t   ENVR$   R&   R   R   t   get_basic_auth_pwR„   R…   t   HTTP_UNAUTHORIZED(   R    R$   Rˆ   R&   (    (    R   t   authenhandlerÊ  s    
	

(&   t   __doc__t   timeRg   R   t   sysR&   t   syspatht   osR   t
   mod_pythonR„   Rn   Rt   Re   RV   R\   R   R{   R8   R   R7   R6   R^   t   FHOSTt   FHOST_STATICR9   R   Rh   R>   R@   RJ   RK   RL   R   R   R   R†   R‹   (   Rh   Rg   R   R   R^   R   R   RJ   RK   R6   R\   R†   Re   R@   R   R9   R>   RL   R‹   R   Rn   R   R„   R&   R’   R   R7   R   Rt   R“   R8   (    (    R   t   ?   s:   						&B	ÿ 	
