ó
"b<]c           @   s–  d  Z  d d d g Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d	 l	 m
 Z
 m Z d d
 l m Z d d l m Z m Z e r§ d „  Z n	 d „  Z d d l Z d d l Z e j j e j ƒ  e ƒ Z e j j j e j e j j ƒ d  ƒ Z d Z d a d „  Z d „  Z  d d „ Z! e" d k r’d Z# d d l$ m$ Z$ e$ e# e% ƒ  ƒ Z& e  e& _' d d d „  ƒ  YZ( e& j) ƒ  n  d S(   sÜ   
pretty debug errors
(part of web.py)

portions adapted from Django <djangoproject.com> 
Copyright (c) 2005, the Lawrence Journal-World
Used under the modified BSD license:
http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
t
   debugerrort   djangoerrort   emailerrorsiÿÿÿÿNi   (   t   Template(   t   websafe(   t   sendmailt   safestr(   t   webapi(   t   urljoint   PY2c         C   s   |  j  j j | ƒ d  S(   N(   t   tt   func_globalst   update(   R
   t   globals(    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   update_globals_template   s    c         C   s   |  j  j j | ƒ d  S(   N(   R
   t   __globals__R   (   R
   R   (    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyR      s    sð  $def with (exception_type, exception_value, frames)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="robots" content="NONE,NOARCHIVE" />
  <title>$exception_type at $ctx.path</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; }
    h2 { margin-bottom:.8em; }
    h2 span { font-size:80%; color:#666; font-weight:normal; }
    h3 { margin:1em 0 .5em 0; }
    h4 { margin:0 0 .5em 0; font-weight: normal; }
    table { 
        border:1px solid #ccc; border-collapse: collapse; background:white; }
    tbody td, tbody th { vertical-align:top; padding:2px 3px; }
    thead th { 
        padding:1px 6px 1px 3px; background:#fefefe; text-align:left; 
        font-weight:normal; font-size:11px; border:1px solid #ddd; }
    tbody th { text-align:right; color:#666; padding-right:.5em; }
    table.vars { margin:5px 0 2px 40px; }
    table.vars td, table.req td { font-family:monospace; }
    table td.code { width:100%;}
    table td.code div { overflow:hidden; }
    table.source th { color:#666; }
    table.source td { 
        font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
    ul.traceback { list-style-type:none; }
    ul.traceback li.frame { margin-bottom:1em; }
    div.context { margin: 10px 0; }
    div.context ol { 
        padding-left:30px; margin:0 10px; list-style-position: inside; }
    div.context ol li { 
        font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
    div.context ol.context-line li { color:black; background-color:#ccc; }
    div.context ol.context-line li span { float: right; }
    div.commands { margin-left: 40px; }
    div.commands a { color:black; text-decoration:none; }
    #summary { background: #ffc; }
    #summary h2 { font-weight: normal; color: #666; }
    #explanation { background:#eee; }
    #template, #template-not-exist { background:#f6f6f6; }
    #template-not-exist ul { margin: 0 0 0 20px; }
    #traceback { background:#eee; }
    #requestinfo { background:#f6f6f6; padding-left:120px; }
    #summary table { border:none; background:transparent; }
    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
    #requestinfo h3 { margin-bottom:-1em; }
    .error { background: #ffc; }
    .specific { color:#cc3300; font-weight:bold; }
  </style>
  <script type="text/javascript">
  //<!--
    function getElementsByClassName(oElm, strTagName, strClassName){
        // Written by Jonathan Snook, http://www.snook.ca/jon; 
        // Add-ons by Robert Nyman, http://www.robertnyman.com
        var arrElements = (strTagName == "*" && document.all)? document.all :
        oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        strClassName = strClassName.replace(/\-/g, "\-");
        var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$$)");
        var oElement;
        for(var i=0; i<arrElements.length; i++){
            oElement = arrElements[i];
            if(oRegExp.test(oElement.className)){
                arrReturnElements.push(oElement);
            }
        }
        return (arrReturnElements)
    }
    function hideAll(elems) {
      for (var e = 0; e < elems.length; e++) {
        elems[e].style.display = 'none';
      }
    }
    window.onload = function() {
      hideAll(getElementsByClassName(document, 'table', 'vars'));
      hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
      hideAll(getElementsByClassName(document, 'ol', 'post-context'));
    }
    function toggle() {
      for (var i = 0; i < arguments.length; i++) {
        var e = document.getElementById(arguments[i]);
        if (e) {
          e.style.display = e.style.display == 'none' ? 'block' : 'none';
        }
      }
      return false;
    }
    function varToggle(link, id) {
      toggle('v' + id);
      var s = link.getElementsByTagName('span')[0];
      var uarr = String.fromCharCode(0x25b6);
      var darr = String.fromCharCode(0x25bc);
      s.innerHTML = s.innerHTML == uarr ? darr : uarr;
      return false;
    }
    //-->
  </script>
</head>
<body>

$def dicttable (d, kls='req', id=None):
    $ items = d and list(d.items()) or []
    $items.sort()
    $:dicttable_items(items, kls, id)
        
$def dicttable_items(items, kls='req', id=None):
    $if items:
        <table class="$kls"
        $if id: id="$id"
        ><thead><tr><th>Variable</th><th>Value</th></tr></thead>
        <tbody>
        $for k, v in items:
            <tr><td>$k</td><td class="code"><div>$prettify(v)</div></td></tr>
        </tbody>
        </table>
    $else:
        <p>No data.</p>

<div id="summary">
  <h1>$exception_type at $ctx.path</h1>
  <h2>$exception_value</h2>
  <table><tr>
    <th>Python</th>
    <td>$frames[0].filename in $frames[0].function, line $frames[0].lineno</td>
  </tr><tr>
    <th>Web</th>
    <td>$ctx.method $ctx.home$ctx.path</td>
  </tr></table>
</div>
<div id="traceback">
<h2>Traceback <span>(innermost first)</span></h2>
<ul class="traceback">
$for frame in frames:
    <li class="frame">
    <code>$frame.filename</code> in <code>$frame.function</code>
    $if frame.context_line is not None:
        <div class="context" id="c$frame.id">
        $if frame.pre_context:
            <ol start="$frame.pre_context_lineno" class="pre-context" id="pre$frame.id">
            $for line in frame.pre_context:
                <li onclick="toggle('pre$frame.id', 'post$frame.id')">$line</li>
            </ol>
            <ol start="$frame.lineno" class="context-line"><li onclick="toggle('pre$frame.id', 'post$frame.id')">$frame.context_line <span>...</span></li></ol>
        $if frame.post_context:
            <ol start='${frame.lineno + 1}' class="post-context" id="post$frame.id">
            $for line in frame.post_context:
                <li onclick="toggle('pre$frame.id', 'post$frame.id')">$line</li>
            </ol>
      </div>
    
    $if frame.vars:
        <div class="commands">
        <a href='#' onclick="return varToggle(this, '$frame.id')"><span>&#x25b6;</span> Local vars</a>
        $# $inspect.formatargvalues(*inspect.getargvalues(frame['tb'].tb_frame))
        </div>
        $:dicttable(frame.vars, kls='vars', id=('v' + str(frame.id)))
      </li>
  </ul>
</div>

<div id="requestinfo">
$if ctx.output or ctx.headers:
    <h2>Response so far</h2>
    <h3>HEADERS</h3>
    $:dicttable_items(ctx.headers)

    <h3>BODY</h3>
    <p class="req" style="padding-bottom: 2em"><code>
    $ctx.output
    </code></p>
  
<h2>Request information</h2>

<h3>INPUT</h3>
$:dicttable(web.input(_unicode=False))

<h3 id="cookie-info">COOKIES</h3>
$:dicttable(web.cookies())

<h3 id="meta-info">META</h3>
$ newctx = [(k, v) for (k, v) in ctx.iteritems() if not k.startswith('_') and not isinstance(v, dict)]
$:dicttable(dict(newctx))

<h3 id="meta-info">ENVIRONMENT</h3>
$:dicttable(ctx.env)
</div>

<div id="explanation">
  <p>
    You're seeing this error because you have <code>web.config.debug</code>
    set to <code>True</code>. Set that to <code>False</code> if you don't want to see this.
  </p>
</div>

</body>
</html>
c          C   s«  d „  }  t  j ƒ  \ } } } g  } xû | d  k	 r!| j j j } | j j j } | j d } | | j j j	 d d ƒ 7} |  | | d ƒ \ } }	 }
 } d | j j k r| j
 t j i
 | d 6| d 6| d	 6| d
 6| j j d 6t | ƒ d 6|	 d 6|
 d 6| d 6| d 6ƒ ƒ n  | j } q' W| j ƒ  d „  } t d  k r\t t d t d t ƒa n  t } i t j d 6t d 6t d 6t d 6| d 6} t | | ƒ | | | | ƒ S(   Nc   
      S   sÚ   y¬ t  |  ƒ j ƒ  } t d | | ƒ } | | } g  | | | !D] } | j d ƒ ^ q@ } | | j d ƒ } g  | | d | !D] } | j d ƒ ^ q€ }	 | | | |	 f SWn' t t t f k
 rÕ d g  d g  f SXd S(   s™   
        Returns context_lines before and after lineno from file.
        Returns (pre_context_lineno, pre_context, context_line, post_context).
        i    s   
i   N(   t   opent	   readlinest   maxt   stript   OSErrort   IOErrort
   IndexErrort   None(
   t   filenamet   linenot   context_linest   sourcet   lower_boundt   upper_boundt   linet   pre_contextt   context_linet   post_context(    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   _get_lines_from_file'   s"    
)-i   t   __lineoffset__i    i   t   __hidetraceback__t   tbackR   t   functionR   t   varst   idR   R    R!   t   pre_context_linenoc         S   sO   y t  j |  ƒ } Wn5 t k
 rJ } d | j j d t | ƒ d } n X| S(   Ns   [could not display: <s   : s   >](   t   pprintt   pformatt	   Exceptiont	   __class__t   __name__t   str(   t   xt   outt   e(    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   prettifyV   s
    &t   filtert   ctxt   webt   dictR/   R3   (   t   syst   exc_infoR   t   tb_framet   f_codet   co_filenamet   co_namet	   tb_linenot   f_localst   gett   appendR6   t   storageR(   t   tb_nextt   reverset   djangoerror_rR   t   djangoerror_tt   __file__R   R5   R7   R/   R   (   R"   t   exception_typet   exception_valueR%   t   framesR   R&   R   R)   R   R    R!   R3   R
   R   (    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyR   $   sB    	
	
c           C   s   t  j t ƒ  ƒ S(   s  
    A replacement for `internalerror` that presents a nice page with lots
    of debug information for the programmer.
    
    (Based on the beautiful 500 page from [Django](http://djangoproject.com/), 
    designed by [Wilson Miner](http://wilsonminer.com/).)
    (   R6   t   _InternalErrorR   (    (    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyR    j   s    c            s%   ˆ  p	 ˆ ‰  ‡  ‡ ‡ f d †  } | S(   s  
    Wraps the old `internalerror` handler (pass as `olderror`) to 
    additionally email all errors to `to_address`, to aid in
    debugging production websites.
    
    Emails contain a normal text traceback as well as an
    attachment containing the nice `debugerror` page.
    c             sÈ   ˆ ƒ  }  t  j ƒ  } | d } | d } d j t j | Œ  ƒ } t j j } t j j d t j j	 t j j
 } d | | f } t d ˆ  d ˆ d t ƒ  | d	 t d
 d d t t ƒ  ƒ ƒ g ƒ|  S(   Ni    i   t    t    s	   
%s

%s

s   your buggy site <%s>s   the bugfixer <%s>s/   bug: %(error_name)s: %(error_value)s (%(path)s)t   attachmentsR   s   bug.htmlt   content(   R8   R9   t   joint	   tracebackt   format_exceptionR6   R5   t   patht   methodt   homet   fullpathR   t   localsR7   R   R   (   t   errort   tbt
   error_namet   error_valuet   tb_txtRS   t   requestt   message(   t   from_addresst   olderrort
   to_address(    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   emailerrors_internal€   s    	

$C(    (   Ra   R`   R_   Rb   (    (   R_   R`   Ra   s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyR   u   s    	t   __main__t   /t   index(   t   applicationc           B   s   e  Z d  „  Z RS(   c         C   s   t  d  S(   N(   t   thisdoesnotexist(   t   self(    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   GET—   s    (   R.   t
   __module__Ri   (    (    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyRe   •   s   (   Rd   Re   (    (*   t   __doc__t   __all__R8   R*   RQ   t   templateR   t   netR   t   utilsR   R   RL   R   R6   t
   py3helpersR   R	   R   t   ost   os.pathRS   RP   t   getcwdRG   t   whereamit   sept   splitRF   R   RE   R   R    R   R.   t   urlsRf   R   t   appt   internalerrorRe   t   run(    (    (    s§   /mnt/my-files/home/darkz3ro/Desktop/my files/malware analysing and devlopment/viruses codes and analysis/APT34-leat/MuddyC3v1.0.1-/muddyc3_v1.0.1/lib/web/debugerror.pyt   <module>
   s2   $	(	F		