View Issue Details

IDProjectCategoryView StatusLast Update
0004247Talerobsolete componentpublic2016-03-23 20:02
ReporterTorsten Grothoff Assigned ToMarcello Stanisci  
PriorityurgentSeverityblockReproducibilityalways
Status closedResolutionfixed 
Platformi7OSDebian GNU/LinuxOS Versionsqueeze
Product Version0.0 
Target Version0.0Fixed in Version0.0 
Summary0004247: TypeError at /pin/verify
DescriptionAfter solving the captcha to withdraw funds from the test bank, Torsten reports getting the following (reproduced by me):

TypeError at /pin/verify
Unicode-objects must be encoded before hashing
Request Method: POST
Request URL: https://bank.test.taler.net/pin/verify
Django Version: 1.9.2
Exception Type: TypeError
Exception Value:
Unicode-objects must be encoded before hashing
Exception Location: ./bank_app/captcha.py in pin_tan_verify_attempt, line 111
Python Executable: /home/test/bank-venv/bin/uwsgi
Python Version: 3.4.4
Python Path:
['.',
 '',
 '/home/test/bank-venv/lib/python3.4',
 '/home/test/bank-venv/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/test/bank-venv/lib/python3.4/lib-dynload',
 '/usr/lib/python3.4',
 '/usr/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/test/bank-venv/lib/python3.4/site-packages']
Server time: Sat, 19 Mar 2016 11:52:25 +0000
Traceback Switch to copy-and-paste view

/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py in get_response
                    response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py in get_response
                    response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
./bank_app/captcha.py in pin_tan_verify
▶ Local vars
./bank_app/lib.py in check_login
def check_db(fn): ...
▶ Local vars
./bank_app/captcha.py in pin_tan_verify_attempt
    except Exception: # FIXME narrow the Exception type ...
▶ Local vars
Additional InformationRequest information

GET
No GET data
POST
Variable Value
pin_0
'80'
pin_1
'4a395bfe6fd829436a75ae2d7ec6c0962933841d'
csrfmiddlewaretoken
'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'
FILES
No FILES data
COOKIES
Variable Value
sessionid
'btk5dbp4g0qcj309msdhlkdommkkw0fe'
csrftoken
'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'
META
Variable Value
wsgi.input
<uwsgi._Input object at 0x7f461ba9e558>
wsgi.version
(1, 0)
HTTP_CACHE_CONTROL
'max-age=0'
HTTP_ACCEPT_LANGUAGE
'en-US,en;q=0.8'
wsgi.multithread
False
HTTPS
'on'
REQUEST_SCHEME
'https'
SCRIPT_NAME
''
HTTP_CONTENT_TYPE
'application/x-www-form-urlencoded'
CONTENT_LENGTH
'108'
wsgi.errors
<_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.multiprocess
False
HTTP_REFERER
'https://bank.test.taler.net/auth/pin/question?exchange=https%3A%2F%2Fexchange.test.taler.net%2F&reserve_pub=S6H0A3J88R3BCYM7DR8YX28G91FBCT7ZD17WMFMJADC1AY9GJ3B0&amount_value=1&amount_fraction=0&amount_currency=PUDOS'
HTTP_CONNECTION
'keep-alive'
HTTP_HOST
'bank.test.taler.net'
SERVER_PROTOCOL
'HTTP/1.1'
wsgi.file_wrapper
''
PATH_INFO
'/pin/verify'
REMOTE_ADDR
'86.253.40.254'
HTTP_USER_AGENT
('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
 'Chrome/48.0.2564.116 Safari/537.36')
QUERY_STRING
''
CSRF_COOKIE
'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'
SERVER_NAME
'bank.test.taler.net'
uwsgi.node
b'tripwire'
DOCUMENT_ROOT
'/usr/share/nginx/html'
SERVER_PORT
'443'
HTTP_CONTENT_LENGTH
'108'
wsgi.url_scheme
'https'
CONTENT_TYPE
'application/x-www-form-urlencoded'
HTTP_UPGRADE_INSECURE_REQUESTS
'1'
REQUEST_URI
'/pin/verify'
uwsgi.version
b'2.0.12'
HTTP_ACCEPT_ENCODING
'gzip, deflate'
HTTP_COOKIE
('sessionid=btk5dbp4g0qcj309msdhlkdommkkw0fe; '
 'csrftoken=hKj8qq3kZhEDrEg9onPiAj230KinSjBw')
REQUEST_METHOD
'POST'
wsgi.run_once
False
HTTP_ORIGIN
'https://bank.test.taler.net'
HTTP_ACCEPT
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
REMOTE_PORT
'44930'


TagsNo tags attached.
Attached Files
TypeError at _pin_verify.html (60,923 bytes)   
<!DOCTYPE html>
<!-- saved from url=(0038)https://bank.test.taler.net/pin/verify -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>TypeError at /pin/verify</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; }
    code, pre { font-size: 100%; white-space: pre-wrap; }
    table { border:1px solid #ccc; border-collapse: collapse; width:100%; 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 { width:12em; 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 pre { 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; color: #222; }
    ul.traceback li.frame { padding-bottom:1em; color:#666; }
    ul.traceback li.user { background-color:#e0e0e0; color:#000 }
    div.context { padding:10px 0; overflow:hidden; }
    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }
    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }
    div.context ol li pre { display:inline; }
    div.context ol.context-line li { color:#505050; background-color:#dfdfdf; padding: 3px 2px; }
    div.context ol.context-line li span { position:absolute; right:32px; }
    .user div.context ol.context-line li { background-color:#bbb; color:#000; }
    .user div.context ol li { color:#666; }
    div.commands { margin-left: 40px; }
    div.commands a { color:#555; text-decoration:none; }
    .user div.commands a { color: black; }
    #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 10px 20px; }
    #template-not-exist .postmortem-section { margin-bottom: 3px; }
    #unicode-hint { background:#eee; }
    #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; }
    h2 span.commands { font-size:.7em;}
    span.commands a:link {color:#5E5694;}
    pre.exception_value { font-family: sans-serif; color: #666; font-size: 1.5em; margin: 10px 0 10px 0; }
    .append-bottom { margin-bottom: 10px; }
  </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'));
      hideAll(getElementsByClassName(document, 'div', 'pastebin'));
    }
    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;
    }
    function switchPastebinFriendly(link) {
      s1 = "Switch to copy-and-paste view";
      s2 = "Switch back to interactive view";
      link.innerHTML = link.innerHTML.trim() == s1 ? s2: s1;
      toggle('browserTraceback', 'pastebinTraceback');
      return false;
    }
    //-->
  </script>
  
</head>
<body>
<div id="summary">
  <h1>TypeError at /pin/verify</h1>
  <pre class="exception_value">Unicode-objects must be encoded before hashing</pre>
  <table class="meta">

    <tbody><tr>
      <th>Request Method:</th>
      <td>POST</td>
    </tr>
    <tr>
      <th>Request URL:</th>
      <td>https://bank.test.taler.net/pin/verify</td>
    </tr>

    <tr>
      <th>Django Version:</th>
      <td>1.9.2</td>
    </tr>

    <tr>
      <th>Exception Type:</th>
      <td>TypeError</td>
    </tr>


    <tr>
      <th>Exception Value:</th>
      <td><pre>Unicode-objects must be encoded before hashing</pre></td>
    </tr>


    <tr>
      <th>Exception Location:</th>
      <td>./bank_app/captcha.py in pin_tan_verify_attempt, line 111</td>
    </tr>

    <tr>
      <th>Python Executable:</th>
      <td>/home/test/bank-venv/bin/uwsgi</td>
    </tr>
    <tr>
      <th>Python Version:</th>
      <td>3.4.4</td>
    </tr>
    <tr>
      <th>Python Path:</th>
      <td><pre>['.',
 '',
 '/home/test/bank-venv/lib/python3.4',
 '/home/test/bank-venv/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/test/bank-venv/lib/python3.4/lib-dynload',
 '/usr/lib/python3.4',
 '/usr/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/test/bank-venv/lib/python3.4/site-packages']</pre></td>
    </tr>
    <tr>
      <th>Server time:</th>
      <td>Sat, 19 Mar 2016 11:52:25 +0000</td>
    </tr>
  </tbody></table>
</div>




<div id="traceback">
  <h2>Traceback <span class="commands"><a href="https://bank.test.taler.net/pin/verify#" onclick="return switchPastebinFriendly(this);">
    Switch to copy-and-paste view</a></span>
  </h2>
  
  <div id="browserTraceback">
    <ul class="traceback">
      
        
        <li class="frame django">
          <code>/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py</code> in <code>get_response</code>

          
            <div class="context" id="c139939042096008">
              
                <ol start="142" class="pre-context" id="pre139939042096008" style="display: none;">
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                        break</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre></pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>            if response is None:</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                wrapped_callback = self.make_view_atomic(callback)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                try:</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                    response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                except Exception as e:</pre></li>
                
                </ol>
              
              <ol start="149" class="context-line">
                <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                    response = self.process_exception_by_middleware(e, request)</pre> <span>...</span></li></ol>
              
                <ol start="150" class="post-context" id="post139939042096008" style="display: none;">
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre></pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>            # Complain if the view returned None (a common error).</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>            if response is None:</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                if isinstance(callback, types.FunctionType):    # FBV</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                    view_name = callback.__name__</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042096008&#39;, &#39;post139939042096008&#39;)"><pre>                else:                                           # CBV</pre></li>
                  
              </ol>
              
            </div>
          

          
            <div class="commands">
                
                    <a href="https://bank.test.taler.net/pin/verify#" onclick="return varToggle(this, &#39;139939042096008&#39;)"><span>▶</span> Local vars</a>
                
            </div>
            <table class="vars" id="v139939042096008" style="display: none;">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                
                  <tr>
                    <td>urlconf</td>
                    <td class="code"><pre>'bank_project.urls'</pre></td>
                  </tr>
                
                  <tr>
                    <td>response_is_rendered</td>
                    <td class="code"><pre>False</pre></td>
                  </tr>
                
                  <tr>
                    <td>request</td>
                    <td class="code"><pre>&lt;WSGIRequest: POST '/pin/verify'&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>self</td>
                    <td class="code"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f461be72f60&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback_args</td>
                    <td class="code"><pre>()</pre></td>
                  </tr>
                
                  <tr>
                    <td>resolver</td>
                    <td class="code"><pre>&lt;RegexURLResolver 'bank_project.urls' (None:None) ^/&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>resolver_match</td>
                    <td class="code"><pre>ResolverMatch(func=bank_app.captcha.pin_tan_verify, args=(), kwargs={}, url_name=None, app_names=[], namespaces=[])</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback</td>
                    <td class="code"><pre>&lt;function pin_tan_verify at 0x7f4618f44950&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>response</td>
                    <td class="code"><pre>None</pre></td>
                  </tr>
                
                  <tr>
                    <td>wrapped_callback</td>
                    <td class="code"><pre>&lt;function pin_tan_verify at 0x7f4618f44950&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback_kwargs</td>
                    <td class="code"><pre>{}</pre></td>
                  </tr>
                
                  <tr>
                    <td>middleware_method</td>
                    <td class="code"><pre>&lt;bound method CsrfViewMiddleware.process_view of &lt;django.middleware.csrf.CsrfViewMiddleware object at 0x7f46190e6d68&gt;&gt;</pre></td>
                  </tr>
                
              </tbody>
            </table>
          
        </li>
      
        
        <li class="frame django">
          <code>/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py</code> in <code>get_response</code>

          
            <div class="context" id="c139939042095496">
              
                <ol start="140" class="pre-context" id="pre139939042095496" style="display: none;">
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                    response = middleware_method(request, callback, callback_args, callback_kwargs)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                    if response:</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                        break</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre></pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>            if response is None:</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                wrapped_callback = self.make_view_atomic(callback)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                try:</pre></li>
                
                </ol>
              
              <ol start="147" class="context-line">
                <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                    response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>...</span></li></ol>
              
                <ol start="148" class="post-context" id="post139939042095496" style="display: none;">
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                except Exception as e:</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                    response = self.process_exception_by_middleware(e, request)</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre></pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>            # Complain if the view returned None (a common error).</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>            if response is None:</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095496&#39;, &#39;post139939042095496&#39;)"><pre>                if isinstance(callback, types.FunctionType):    # FBV</pre></li>
                  
              </ol>
              
            </div>
          

          
            <div class="commands">
                
                    <a href="https://bank.test.taler.net/pin/verify#" onclick="return varToggle(this, &#39;139939042095496&#39;)"><span>▶</span> Local vars</a>
                
            </div>
            <table class="vars" id="v139939042095496" style="display: none;">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                
                  <tr>
                    <td>urlconf</td>
                    <td class="code"><pre>'bank_project.urls'</pre></td>
                  </tr>
                
                  <tr>
                    <td>response_is_rendered</td>
                    <td class="code"><pre>False</pre></td>
                  </tr>
                
                  <tr>
                    <td>request</td>
                    <td class="code"><pre>&lt;WSGIRequest: POST '/pin/verify'&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>self</td>
                    <td class="code"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f461be72f60&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback_args</td>
                    <td class="code"><pre>()</pre></td>
                  </tr>
                
                  <tr>
                    <td>resolver</td>
                    <td class="code"><pre>&lt;RegexURLResolver 'bank_project.urls' (None:None) ^/&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>resolver_match</td>
                    <td class="code"><pre>ResolverMatch(func=bank_app.captcha.pin_tan_verify, args=(), kwargs={}, url_name=None, app_names=[], namespaces=[])</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback</td>
                    <td class="code"><pre>&lt;function pin_tan_verify at 0x7f4618f44950&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>response</td>
                    <td class="code"><pre>None</pre></td>
                  </tr>
                
                  <tr>
                    <td>wrapped_callback</td>
                    <td class="code"><pre>&lt;function pin_tan_verify at 0x7f4618f44950&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>callback_kwargs</td>
                    <td class="code"><pre>{}</pre></td>
                  </tr>
                
                  <tr>
                    <td>middleware_method</td>
                    <td class="code"><pre>&lt;bound method CsrfViewMiddleware.process_view of &lt;django.middleware.csrf.CsrfViewMiddleware object at 0x7f46190e6d68&gt;&gt;</pre></td>
                  </tr>
                
              </tbody>
            </table>
          
        </li>
      
        
        <li class="frame user">
          <code>./bank_app/captcha.py</code> in <code>pin_tan_verify</code>

          

          
            <div class="commands">
                
                    <a href="https://bank.test.taler.net/pin/verify#" onclick="return varToggle(this, &#39;139939042096264&#39;)"><span>▶</span> Local vars</a>
                
            </div>
            <table class="vars" id="v139939042096264" style="display: none;">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                
                  <tr>
                    <td>request</td>
                    <td class="code"><pre>&lt;WSGIRequest: POST '/pin/verify'&gt;</pre></td>
                  </tr>
                
              </tbody>
            </table>
          
        </li>
      
        
        <li class="frame user">
          <code>./bank_app/lib.py</code> in <code>check_login</code>

          
            <div class="context" id="c139939042095752">
              
                <ol start="106" class="pre-context" id="pre139939042095752" style="display: none;">
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>    return amount_dict['value'] + (amount_dict['fraction'] / 1000000)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre></pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>def write_log_file(data, log_file="/tmp/django.log", flag='a'):</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>    f = open(log_file, flag)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>    f.write(data)</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>    f.close()</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre></pre></li>
                
                </ol>
              
              <ol start="113" class="context-line">
                <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>def check_db(fn):</pre> <span>...</span></li></ol>
              
                <ol start="114" class="post-context" id="post139939042095752" style="display: none;">
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>    def fake_query(request):</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>        try: User.objects.get(username='Bank')</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>        except User.DoesNotExist:</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>            return no_bank_account_handler(request)</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>        except ProgrammingError:</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042095752&#39;, &#39;post139939042095752&#39;)"><pre>            return internal_error_handler(request,</pre></li>
                  
              </ol>
              
            </div>
          

          
            <div class="commands">
                
                    <a href="https://bank.test.taler.net/pin/verify#" onclick="return varToggle(this, &#39;139939042095752&#39;)"><span>▶</span> Local vars</a>
                
            </div>
            <table class="vars" id="v139939042095752" style="display: none;">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                
                  <tr>
                    <td>fn</td>
                    <td class="code"><pre>&lt;function pin_tan_verify_attempt at 0x7f4618f449d8&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>request</td>
                    <td class="code"><pre>&lt;WSGIRequest: POST '/pin/verify'&gt;</pre></td>
                  </tr>
                
              </tbody>
            </table>
          
        </li>
      
        
        <li class="frame user">
          <code>./bank_app/captcha.py</code> in <code>pin_tan_verify_attempt</code>

          
            <div class="context" id="c139939042053384">
              
                <ol start="104" class="pre-context" id="pre139939042053384" style="display: none;">
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre></pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>def pin_tan_verify_attempt(request):</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    if request.method != 'POST':</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>        raise WrongMethod("POST")</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    try:</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>        given = request.POST['pin_0']</pre></li>
                
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>        hashed_result = request.POST['pin_1']</pre></li>
                
                </ol>
              
              <ol start="111" class="context-line">
                <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    except Exception: # FIXME narrow the Exception type</pre> <span>...</span></li></ol>
              
                <ol start="112" class="post-context" id="post139939042053384" style="display: none;">
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>        raise BadPostValue</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    hasher = hashlib.new("sha1")</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    hasher.update(settings.SECRET_KEY)</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    hasher.update(given)</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    hashed_attempt = hasher.hexdigest()</pre></li>
                  
                  <li onclick="toggle(&#39;pre139939042053384&#39;, &#39;post139939042053384&#39;)"><pre>    if hashed_attempt == hashed_result:</pre></li>
                  
              </ol>
              
            </div>
          

          
            <div class="commands">
                
                    <a href="https://bank.test.taler.net/pin/verify#" onclick="return varToggle(this, &#39;139939042053384&#39;)"><span>▶</span> Local vars</a>
                
            </div>
            <table class="vars" id="v139939042053384" style="display: none;">
              <thead>
                <tr>
                  <th>Variable</th>
                  <th>Value</th>
                </tr>
              </thead>
              <tbody>
                
                  <tr>
                    <td>hasher</td>
                    <td class="code"><pre>&lt;sha1 HASH object @ 0x7f4618e4b990&gt;</pre></td>
                  </tr>
                
                  <tr>
                    <td>hashed_result</td>
                    <td class="code"><pre>'4a395bfe6fd829436a75ae2d7ec6c0962933841d'</pre></td>
                  </tr>
                
                  <tr>
                    <td>given</td>
                    <td class="code"><pre>'80'</pre></td>
                  </tr>
                
                  <tr>
                    <td>request</td>
                    <td class="code"><pre>&lt;WSGIRequest: POST '/pin/verify'&gt;</pre></td>
                  </tr>
                
              </tbody>
            </table>
          
        </li>
      
    </ul>
  </div>
  
  <form action="http://dpaste.com/" name="pasteform" id="pasteform" method="post">

  <div id="pastebinTraceback" class="pastebin" style="display: none;">
    <input type="hidden" name="language" value="PythonConsole">
    <input type="hidden" name="title" value="TypeError at /pin/verify">
    <input type="hidden" name="source" value="Django Dpaste Agent">
    <input type="hidden" name="poster" value="Django">
    <textarea name="content" id="traceback_area" cols="140" rows="25">Environment:


Request Method: POST
Request URL: https://bank.test.taler.net/pin/verify

Django Version: 1.9.2
Python Version: 3.4.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'bank_app']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "/home/test/bank-venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "./bank_app/captcha.py" in pin_tan_verify


File "./bank_app/lib.py" in check_login
  113. def check_db(fn):

File "./bank_app/captcha.py" in pin_tan_verify_attempt
  111.     except Exception: # FIXME narrow the Exception type

Exception Type: TypeError at /pin/verify
Exception Value: Unicode-objects must be encoded before hashing
</textarea>
  <br><br>
  <input type="submit" value="Share this traceback on a public website">
  </div>
</form>
</div>



<div id="requestinfo">
  <h2>Request information</h2>


  <h3 id="get-info">GET</h3>
  
    <p>No GET data</p>
  

  <h3 id="post-info">POST</h3>
  
    <table class="req">
      <thead>
        <tr>
          <th>Variable</th>
          <th>Value</th>
        </tr>
      </thead>
      <tbody>
        
          <tr>
            <td>pin_0</td>
            <td class="code"><pre>'80'</pre></td>
          </tr>
        
          <tr>
            <td>pin_1</td>
            <td class="code"><pre>'4a395bfe6fd829436a75ae2d7ec6c0962933841d'</pre></td>
          </tr>
        
          <tr>
            <td>csrfmiddlewaretoken</td>
            <td class="code"><pre>'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'</pre></td>
          </tr>
        
      </tbody>
    </table>
  
  <h3 id="files-info">FILES</h3>
  
    <p>No FILES data</p>
  


  <h3 id="cookie-info">COOKIES</h3>
  
    <table class="req">
      <thead>
        <tr>
          <th>Variable</th>
          <th>Value</th>
        </tr>
      </thead>
      <tbody>
        
          <tr>
            <td>sessionid</td>
            <td class="code"><pre>'btk5dbp4g0qcj309msdhlkdommkkw0fe'</pre></td>
          </tr>
        
          <tr>
            <td>csrftoken</td>
            <td class="code"><pre>'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'</pre></td>
          </tr>
        
      </tbody>
    </table>
  

  <h3 id="meta-info">META</h3>
  <table class="req">
    <thead>
      <tr>
        <th>Variable</th>
        <th>Value</th>
      </tr>
    </thead>
    <tbody>
      
        <tr>
          <td>wsgi.input</td>
          <td class="code"><pre>&lt;uwsgi._Input object at 0x7f461ba9e558&gt;</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.version</td>
          <td class="code"><pre>(1, 0)</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_CACHE_CONTROL</td>
          <td class="code"><pre>'max-age=0'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_ACCEPT_LANGUAGE</td>
          <td class="code"><pre>'en-US,en;q=0.8'</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.multithread</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>HTTPS</td>
          <td class="code"><pre>'on'</pre></td>
        </tr>
      
        <tr>
          <td>REQUEST_SCHEME</td>
          <td class="code"><pre>'https'</pre></td>
        </tr>
      
        <tr>
          <td>SCRIPT_NAME</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_CONTENT_TYPE</td>
          <td class="code"><pre>'application/x-www-form-urlencoded'</pre></td>
        </tr>
      
        <tr>
          <td>CONTENT_LENGTH</td>
          <td class="code"><pre>'108'</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.errors</td>
          <td class="code"><pre>&lt;_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'&gt;</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.multiprocess</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_REFERER</td>
          <td class="code"><pre>'https://bank.test.taler.net/auth/pin/question?exchange=https%3A%2F%2Fexchange.test.taler.net%2F&amp;reserve_pub=S6H0A3J88R3BCYM7DR8YX28G91FBCT7ZD17WMFMJADC1AY9GJ3B0&amp;amount_value=1&amp;amount_fraction=0&amp;amount_currency=PUDOS'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_CONNECTION</td>
          <td class="code"><pre>'keep-alive'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_HOST</td>
          <td class="code"><pre>'bank.test.taler.net'</pre></td>
        </tr>
      
        <tr>
          <td>SERVER_PROTOCOL</td>
          <td class="code"><pre>'HTTP/1.1'</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.file_wrapper</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>PATH_INFO</td>
          <td class="code"><pre>'/pin/verify'</pre></td>
        </tr>
      
        <tr>
          <td>REMOTE_ADDR</td>
          <td class="code"><pre>'86.253.40.254'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_USER_AGENT</td>
          <td class="code"><pre>('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
 'Chrome/48.0.2564.116 Safari/537.36')</pre></td>
        </tr>
      
        <tr>
          <td>QUERY_STRING</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE</td>
          <td class="code"><pre>'hKj8qq3kZhEDrEg9onPiAj230KinSjBw'</pre></td>
        </tr>
      
        <tr>
          <td>SERVER_NAME</td>
          <td class="code"><pre>'bank.test.taler.net'</pre></td>
        </tr>
      
        <tr>
          <td>uwsgi.node</td>
          <td class="code"><pre>b'tripwire'</pre></td>
        </tr>
      
        <tr>
          <td>DOCUMENT_ROOT</td>
          <td class="code"><pre>'/usr/share/nginx/html'</pre></td>
        </tr>
      
        <tr>
          <td>SERVER_PORT</td>
          <td class="code"><pre>'443'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_CONTENT_LENGTH</td>
          <td class="code"><pre>'108'</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.url_scheme</td>
          <td class="code"><pre>'https'</pre></td>
        </tr>
      
        <tr>
          <td>CONTENT_TYPE</td>
          <td class="code"><pre>'application/x-www-form-urlencoded'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_UPGRADE_INSECURE_REQUESTS</td>
          <td class="code"><pre>'1'</pre></td>
        </tr>
      
        <tr>
          <td>REQUEST_URI</td>
          <td class="code"><pre>'/pin/verify'</pre></td>
        </tr>
      
        <tr>
          <td>uwsgi.version</td>
          <td class="code"><pre>b'2.0.12'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_ACCEPT_ENCODING</td>
          <td class="code"><pre>'gzip, deflate'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_COOKIE</td>
          <td class="code"><pre>('sessionid=btk5dbp4g0qcj309msdhlkdommkkw0fe; '
 'csrftoken=hKj8qq3kZhEDrEg9onPiAj230KinSjBw')</pre></td>
        </tr>
      
        <tr>
          <td>REQUEST_METHOD</td>
          <td class="code"><pre>'POST'</pre></td>
        </tr>
      
        <tr>
          <td>wsgi.run_once</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_ORIGIN</td>
          <td class="code"><pre>'https://bank.test.taler.net'</pre></td>
        </tr>
      
        <tr>
          <td>HTTP_ACCEPT</td>
          <td class="code"><pre>'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'</pre></td>
        </tr>
      
        <tr>
          <td>REMOTE_PORT</td>
          <td class="code"><pre>'44930'</pre></td>
        </tr>
      
    </tbody>
  </table>


  <h3 id="settings-info">Settings</h3>
  <h4>Using settings module <code>bank_project.settings</code></h4>
  <table class="req">
    <thead>
      <tr>
        <th>Setting</th>
        <th>Value</th>
      </tr>
    </thead>
    <tbody>
      
        <tr>
          <td>ADMINS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_SAVE_EVERY_REQUEST</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>AUTH_PASSWORD_VALIDATORS</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_FILE_PATH</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>MESSAGE_STORAGE</td>
          <td class="code"><pre>'django.contrib.messages.storage.fallback.FallbackStorage'</pre></td>
        </tr>
      
        <tr>
          <td>X_FRAME_OPTIONS</td>
          <td class="code"><pre>'SAMEORIGIN'</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_NAME</td>
          <td class="code"><pre>'csrftoken'</pre></td>
        </tr>
      
        <tr>
          <td>DATABASE_ROUTERS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_INDEX_TABLESPACE</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_DOMAIN</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGE_COOKIE_DOMAIN</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATE_CONTEXT_PROCESSORS</td>
          <td class="code"><pre>['django.contrib.auth.context_processors.auth',
 'django.template.context_processors.debug',
 'django.template.context_processors.i18n',
 'django.template.context_processors.media',
 'django.template.context_processors.static',
 'django.template.context_processors.tz',
 'django.contrib.messages.context_processors.messages']</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_PATH</td>
          <td class="code"><pre>'/'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_USE_SSL</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>WSGI_APPLICATION</td>
          <td class="code"><pre>'bank_project.wsgi.application'</pre></td>
        </tr>
      
        <tr>
          <td>MEDIA_ROOT</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>MIDDLEWARE_CLASSES</td>
          <td class="code"><pre>['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']</pre></td>
        </tr>
      
        <tr>
          <td>DATE_FORMAT</td>
          <td class="code"><pre>'N j, Y'</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_AGE</td>
          <td class="code"><pre>31449600</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_HOST</td>
          <td class="code"><pre>'localhost'</pre></td>
        </tr>
      
        <tr>
          <td>YEAR_MONTH_FORMAT</td>
          <td class="code"><pre>'F Y'</pre></td>
        </tr>
      
        <tr>
          <td>TEST_NON_SERIALIZED_APPS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>
          <td class="code"><pre>2621440</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_CONTENT_TYPE</td>
          <td class="code"><pre>'text/html'</pre></td>
        </tr>
      
        <tr>
          <td>SHORT_DATE_FORMAT</td>
          <td class="code"><pre>'m/d/Y'</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_SECURE</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>STATIC_URL</td>
          <td class="code"><pre>'/static/'</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_HTTPONLY</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>FIXTURE_DIRS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>MIGRATION_MODULES</td>
          <td class="code"><pre>{}</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATES</td>
          <td class="code"><pre>[{'APP_DIRS': True,
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [],
  'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
                                     'django.template.context_processors.request',
                                     'django.contrib.auth.context_processors.auth',
                                     'django.contrib.messages.context_processors.messages']}}]</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_BROWSER_XSS_FILTER</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>STATIC_ROOT</td>
          <td class="code"><pre>'static/'</pre></td>
        </tr>
      
        <tr>
          <td>LOGIN_REDIRECT_URL</td>
          <td class="code"><pre>'/accounts/profile/'</pre></td>
        </tr>
      
        <tr>
          <td>FORMAT_MODULE_PATH</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>ROOT_URLCONF</td>
          <td class="code"><pre>'bank_project.urls'</pre></td>
        </tr>
      
        <tr>
          <td>INSTALLED_APPS</td>
          <td class="code"><pre>['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'bank_app']</pre></td>
        </tr>
      
        <tr>
          <td>FIRST_DAY_OF_WEEK</td>
          <td class="code"><pre>0</pre></td>
        </tr>
      
        <tr>
          <td>LOGIN_URL</td>
          <td class="code"><pre>'/accounts/login/'</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATE_DIRS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_PROXY_SSL_HEADER</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_SECURE</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SETTINGS_MODULE</td>
          <td class="code"><pre>'bank_project.settings'</pre></td>
        </tr>
      
        <tr>
          <td>USE_X_FORWARDED_PORT</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>USE_THOUSAND_SEPARATOR</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SECRET_KEY</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>PREPEND_WWW</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>IGNORABLE_404_URLS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_TABLESPACE</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>DATABASES</td>
          <td class="code"><pre>{'default': {'ATOMIC_REQUESTS': False,
             'AUTOCOMMIT': True,
             'CONN_MAX_AGE': 0,
             'ENGINE': 'django.db.backends.postgresql_psycopg2',
             'HOST': '',
             'NAME': 'talertest',
             'OPTIONS': {},
             'PASSWORD': '********************',
             'PORT': '',
             'TEST': {'CHARSET': None,
                      'COLLATION': None,
                      'MIRROR': None,
                      'NAME': None},
             'TIME_ZONE': None,
             'USER': ''}}</pre></td>
        </tr>
      
        <tr>
          <td>USE_L10N</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>DATE_INPUT_FORMATS</td>
          <td class="code"><pre>['%Y-%m-%d',
 '%m/%d/%Y',
 '%m/%d/%y',
 '%b %d %Y',
 '%b %d, %Y',
 '%d %b %Y',
 '%d %b, %Y',
 '%B %d %Y',
 '%B %d, %Y',
 '%d %B %Y',
 '%d %B, %Y']</pre></td>
        </tr>
      
        <tr>
          <td>FILE_UPLOAD_HANDLERS</td>
          <td class="code"><pre>['django.core.files.uploadhandler.MemoryFileUploadHandler',
 'django.core.files.uploadhandler.TemporaryFileUploadHandler']</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGE_CODE</td>
          <td class="code"><pre>'en-us'</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATE_LOADERS</td>
          <td class="code"><pre>['django.template.loaders.filesystem.Loader',
 'django.template.loaders.app_directories.Loader']</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_SSL_REDIRECT</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_SSL_HOST</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATE_DEBUG</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_HTTPONLY</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>TIME_INPUT_FORMATS</td>
          <td class="code"><pre>['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']</pre></td>
        </tr>
      
        <tr>
          <td>CACHE_MIDDLEWARE_ALIAS</td>
          <td class="code"><pre>'default'</pre></td>
        </tr>
      
        <tr>
          <td>DATETIME_FORMAT</td>
          <td class="code"><pre>'N j, Y, P'</pre></td>
        </tr>
      
        <tr>
          <td>TEST_RUNNER</td>
          <td class="code"><pre>'django.test.runner.DiscoverRunner'</pre></td>
        </tr>
      
        <tr>
          <td>TEMPLATE_STRING_IF_INVALID</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>DATETIME_INPUT_FORMATS</td>
          <td class="code"><pre>['%Y-%m-%d %H:%M:%S',
 '%Y-%m-%d %H:%M:%S.%f',
 '%Y-%m-%d %H:%M',
 '%Y-%m-%d',
 '%m/%d/%Y %H:%M:%S',
 '%m/%d/%Y %H:%M:%S.%f',
 '%m/%d/%Y %H:%M',
 '%m/%d/%Y',
 '%m/%d/%y %H:%M:%S',
 '%m/%d/%y %H:%M:%S.%f',
 '%m/%d/%y %H:%M',
 '%m/%d/%y']</pre></td>
        </tr>
      
        <tr>
          <td>ALLOWED_INCLUDE_ROOTS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>NUMBER_GROUPING</td>
          <td class="code"><pre>0</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGE_COOKIE_PATH</td>
          <td class="code"><pre>'/'</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_SERIALIZER</td>
          <td class="code"><pre>'django.contrib.sessions.serializers.JSONSerializer'</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_FILE_STORAGE</td>
          <td class="code"><pre>'django.core.files.storage.FileSystemStorage'</pre></td>
        </tr>
      
        <tr>
          <td>STATICFILES_STORAGE</td>
          <td class="code"><pre>'django.contrib.staticfiles.storage.StaticFilesStorage'</pre></td>
        </tr>
      
        <tr>
          <td>SILENCED_SYSTEM_CHECKS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_REDIRECT_EXEMPT</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>STATICFILES_FINDERS</td>
          <td class="code"><pre>['django.contrib.staticfiles.finders.FileSystemFinder',
 'django.contrib.staticfiles.finders.AppDirectoriesFinder']</pre></td>
        </tr>
      
        <tr>
          <td>LOGOUT_URL</td>
          <td class="code"><pre>'/accounts/logout/'</pre></td>
        </tr>
      
        <tr>
          <td>SIGNING_BACKEND</td>
          <td class="code"><pre>'django.core.signing.TimestampSigner'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_TIMEOUT</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>TIME_ZONE</td>
          <td class="code"><pre>'UTC'</pre></td>
        </tr>
      
        <tr>
          <td>AUTH_USER_MODEL</td>
          <td class="code"><pre>'auth.User'</pre></td>
        </tr>
      
        <tr>
          <td>DEBUG</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>SHORT_DATETIME_FORMAT</td>
          <td class="code"><pre>'m/d/Y P'</pre></td>
        </tr>
      
        <tr>
          <td>TIME_FORMAT</td>
          <td class="code"><pre>'P'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_HOST_PASSWORD</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_NAME</td>
          <td class="code"><pre>'sessionid'</pre></td>
        </tr>
      
        <tr>
          <td>MANAGERS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_BACKEND</td>
          <td class="code"><pre>'django.core.mail.backends.smtp.EmailBackend'</pre></td>
        </tr>
      
        <tr>
          <td>LOGGING</td>
          <td class="code"><pre>{}</pre></td>
        </tr>
      
        <tr>
          <td>INTERNAL_IPS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGE_COOKIE_NAME</td>
          <td class="code"><pre>'django_language'</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_FROM_EMAIL</td>
          <td class="code"><pre>'webmaster@localhost'</pre></td>
        </tr>
      
        <tr>
          <td>FILE_UPLOAD_PERMISSIONS</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>USE_TZ</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>USE_I18N</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>
          <td class="code"><pre>'django.views.debug.SafeExceptionReporterFilter'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_HOST_USER</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>FILE_CHARSET</td>
          <td class="code"><pre>'utf-8'</pre></td>
        </tr>
      
        <tr>
          <td>DEFAULT_CHARSET</td>
          <td class="code"><pre>'utf-8'</pre></td>
        </tr>
      
        <tr>
          <td>USE_X_FORWARDED_HOST</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_TRUSTED_ORIGINS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGES_BIDI</td>
          <td class="code"><pre>['he', 'ar', 'fa', 'ur']</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_AGE</td>
          <td class="code"><pre>1209600</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_COOKIE_DOMAIN</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_ENGINE</td>
          <td class="code"><pre>'django.contrib.sessions.backends.db'</pre></td>
        </tr>
      
        <tr>
          <td>ALLOWED_HOSTS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>PASSWORD_RESET_TIMEOUT_DAYS</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>MONTH_DAY_FORMAT</td>
          <td class="code"><pre>'F j'</pre></td>
        </tr>
      
        <tr>
          <td>THOUSAND_SEPARATOR</td>
          <td class="code"><pre>','</pre></td>
        </tr>
      
        <tr>
          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGE_COOKIE_AGE</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_FAILURE_VIEW</td>
          <td class="code"><pre>'django.views.csrf.csrf_failure'</pre></td>
        </tr>
      
        <tr>
          <td>FORCE_SCRIPT_NAME</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>SERVER_EMAIL</td>
          <td class="code"><pre>'root@localhost'</pre></td>
        </tr>
      
        <tr>
          <td>STATICFILES_DIRS</td>
          <td class="code"><pre>['/home/test/bank/django/bank_app/my-static']</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_SUBJECT_PREFIX</td>
          <td class="code"><pre>'[Django] '</pre></td>
        </tr>
      
        <tr>
          <td>SECURE_HSTS_SECONDS</td>
          <td class="code"><pre>0</pre></td>
        </tr>
      
        <tr>
          <td>APPEND_SLASH</td>
          <td class="code"><pre>True</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_SSL_CERTFILE</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>DISALLOWED_USER_AGENTS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_SSL_KEYFILE</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_USE_TLS</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>CSRF_HEADER_NAME</td>
          <td class="code"><pre>'HTTP_X_CSRFTOKEN'</pre></td>
        </tr>
      
        <tr>
          <td>EMAIL_PORT</td>
          <td class="code"><pre>25</pre></td>
        </tr>
      
        <tr>
          <td>ABSOLUTE_URL_OVERRIDES</td>
          <td class="code"><pre>{}</pre></td>
        </tr>
      
        <tr>
          <td>LOGGING_CONFIG</td>
          <td class="code"><pre>'logging.config.dictConfig'</pre></td>
        </tr>
      
        <tr>
          <td>AUTHENTICATION_BACKENDS</td>
          <td class="code"><pre>['django.contrib.auth.backends.ModelBackend']</pre></td>
        </tr>
      
        <tr>
          <td>CACHES</td>
          <td class="code"><pre>{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}</pre></td>
        </tr>
      
        <tr>
          <td>LOCALE_PATHS</td>
          <td class="code"><pre>[]</pre></td>
        </tr>
      
        <tr>
          <td>FILE_UPLOAD_TEMP_DIR</td>
          <td class="code"><pre>None</pre></td>
        </tr>
      
        <tr>
          <td>DECIMAL_SEPARATOR</td>
          <td class="code"><pre>'.'</pre></td>
        </tr>
      
        <tr>
          <td>PASSWORD_HASHERS</td>
          <td class="code"><pre>'********************'</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_COOKIE_PATH</td>
          <td class="code"><pre>'/'</pre></td>
        </tr>
      
        <tr>
          <td>MEDIA_URL</td>
          <td class="code"><pre>''</pre></td>
        </tr>
      
        <tr>
          <td>USE_ETAGS</td>
          <td class="code"><pre>False</pre></td>
        </tr>
      
        <tr>
          <td>BASE_DIR</td>
          <td class="code"><pre>'/home/test/bank/django'</pre></td>
        </tr>
      
        <tr>
          <td>CACHE_MIDDLEWARE_SECONDS</td>
          <td class="code"><pre>600</pre></td>
        </tr>
      
        <tr>
          <td>LANGUAGES</td>
          <td class="code"><pre>[('af', 'Afrikaans'),
 ('ar', 'Arabic'),
 ('ast', 'Asturian'),
 ('az', 'Azerbaijani'),
 ('bg', 'Bulgarian'),
 ('be', 'Belarusian'),
 ('bn', 'Bengali'),
 ('br', 'Breton'),
 ('bs', 'Bosnian'),
 ('ca', 'Catalan'),
 ('cs', 'Czech'),
 ('cy', 'Welsh'),
 ('da', 'Danish'),
 ('de', 'German'),
 ('el', 'Greek'),
 ('en', 'English'),
 ('en-au', 'Australian English'),
 ('en-gb', 'British English'),
 ('eo', 'Esperanto'),
 ('es', 'Spanish'),
 ('es-ar', 'Argentinian Spanish'),
 ('es-co', 'Colombian Spanish'),
 ('es-mx', 'Mexican Spanish'),
 ('es-ni', 'Nicaraguan Spanish'),
 ('es-ve', 'Venezuelan Spanish'),
 ('et', 'Estonian'),
 ('eu', 'Basque'),
 ('fa', 'Persian'),
 ('fi', 'Finnish'),
 ('fr', 'French'),
 ('fy', 'Frisian'),
 ('ga', 'Irish'),
 ('gd', 'Scottish Gaelic'),
 ('gl', 'Galician'),
 ('he', 'Hebrew'),
 ('hi', 'Hindi'),
 ('hr', 'Croatian'),
 ('hu', 'Hungarian'),
 ('ia', 'Interlingua'),
 ('id', 'Indonesian'),
 ('io', 'Ido'),
 ('is', 'Icelandic'),
 ('it', 'Italian'),
 ('ja', 'Japanese'),
 ('ka', 'Georgian'),
 ('kk', 'Kazakh'),
 ('km', 'Khmer'),
 ('kn', 'Kannada'),
 ('ko', 'Korean'),
 ('lb', 'Luxembourgish'),
 ('lt', 'Lithuanian'),
 ('lv', 'Latvian'),
 ('mk', 'Macedonian'),
 ('ml', 'Malayalam'),
 ('mn', 'Mongolian'),
 ('mr', 'Marathi'),
 ('my', 'Burmese'),
 ('nb', 'Norwegian Bokmal'),
 ('ne', 'Nepali'),
 ('nl', 'Dutch'),
 ('nn', 'Norwegian Nynorsk'),
 ('os', 'Ossetic'),
 ('pa', 'Punjabi'),
 ('pl', 'Polish'),
 ('pt', 'Portuguese'),
 ('pt-br', 'Brazilian Portuguese'),
 ('ro', 'Romanian'),
 ('ru', 'Russian'),
 ('sk', 'Slovak'),
 ('sl', 'Slovenian'),
 ('sq', 'Albanian'),
 ('sr', 'Serbian'),
 ('sr-latn', 'Serbian Latin'),
 ('sv', 'Swedish'),
 ('sw', 'Swahili'),
 ('ta', 'Tamil'),
 ('te', 'Telugu'),
 ('th', 'Thai'),
 ('tr', 'Turkish'),
 ('tt', 'Tatar'),
 ('udm', 'Udmurt'),
 ('uk', 'Ukrainian'),
 ('ur', 'Urdu'),
 ('vi', 'Vietnamese'),
 ('zh-hans', 'Simplified Chinese'),
 ('zh-hant', 'Traditional Chinese')]</pre></td>
        </tr>
      
        <tr>
          <td>SESSION_CACHE_ALIAS</td>
          <td class="code"><pre>'default'</pre></td>
        </tr>
      
    </tbody>
  </table>

</div>

  <div id="explanation">
    <p>
      You're seeing this error because you have <code>DEBUG = True</code> in your
      Django settings file. Change that to <code>False</code>, and Django will
      display a standard page generated by the handler for this status code.
    </p>
  </div>



</body></html>
TypeError at _pin_verify.html (60,923 bytes)   

Activities

Marcello Stanisci

2016-03-21 15:02

reporter   ~0010309

fixed in 6ce3940..e06cb8d. Py3 wanted some explicit conversions to
utf-8 before hashing data. That's needed when the PIN/TAN given answer
is to be compared with the right one (which is a hash of the real value)

Issue History

Date Modified Username Field Change
2016-03-19 12:55 Christian Grothoff New Issue
2016-03-19 12:55 Christian Grothoff Status new => assigned
2016-03-19 12:55 Christian Grothoff Assigned To => Marcello Stanisci
2016-03-19 12:55 Christian Grothoff File Added: TypeError at _pin_verify.html
2016-03-20 21:53 Torsten Grothoff Issue cloned: 0004261
2016-03-21 00:21 Christian Grothoff Relationship added has duplicate 0004248
2016-03-21 15:02 Marcello Stanisci Note Added: 0010309
2016-03-21 15:02 Marcello Stanisci Status assigned => resolved
2016-03-21 15:02 Marcello Stanisci Resolution open => fixed
2016-03-22 17:14 Christian Grothoff Status resolved => closed
2016-03-22 17:14 Christian Grothoff Fixed in Version => 0.0
2016-03-23 20:02 Christian Grothoff Reporter Christian Grothoff => Torsten Grothoff
2022-08-23 20:26 Christian Grothoff Category bank (demonstrator) => py bank (demonstrator, obsolete)
2023-12-03 01:23 Christian Grothoff Category py bank (demonstrator, obsolete) => obsolete componet
2023-12-11 20:08 Florian Dold Category obsolete componet => obsolete component