<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>templates/keys/address_verified.html</filename>
    </added>
    <added>
      <filename>templates/keys/address_verifyfailed.html</filename>
    </added>
    <added>
      <filename>templates/keys/email_confirmation_message.txt</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,5 @@
 TODO:
 
-* actually check whether a mail/key pair is Verified before returning it.
 * check for weak keys when a key is uploaded
 * allow upload of more than one key/associate with more than one mail 
   address at once.</diff>
      <filename>TODO</filename>
    </modified>
    <modified>
      <diff>@@ -44,19 +44,22 @@ class AddressKey (models.Model):
         else:
             return False
 
-    def send_confirmation(self, email_address):
+    def send_confirmation(self, keyobj):
         salt = sha.new(str(random())).hexdigest()[:5]
         # FIXME: Is this random enough?
-        confirmation_key = sha.new(salt + email_address.address.address).hexdigest()
+        confirmation_key = sha.new(salt + keyobj.address.address).hexdigest()
         activate_url = u&quot;http://%s%s&quot; % (
             &quot;sshkeys.net/confirm_email/&quot;, confirmation_key)
 
         message = render_to_string(&quot;keys/email_confirmation_message.txt&quot;, {
             &quot;confirmation_key&quot;: confirmation_key,
+            &quot;sshkey&quot;: keyobj.sshkey.keytext,
+            &quot;email_address&quot;: keyobj.address.address
         })
-        send_mail(&quot;SSH Key verification.&quot;, message, settings.FROM_EMAIL, [email_address.address.address])
-        email_address.token = confirmation_key
-        email_address.save()
+        send_mail(&quot;SSH Key verification.&quot;, message, 
+                  settings.FROM_EMAIL, [keyobj.address.address])
+        keyobj.token = confirmation_key
+        keyobj.save()
 
     def delete_expired_confirmations(self):
         for confirmation in self.all():</diff>
      <filename>keys/models.py</filename>
    </modified>
    <modified>
      <diff>@@ -17,13 +17,17 @@ def index(request):
 
 def list(request, **kwargs):
     kwargs['allow_empty'] = True
-    kwargs['queryset'] = Address.objects.all().order_by(&quot;address&quot;)
+    kwargs['queryset'] = \
+      AddressKey.objects.filter(verified=True).order_by(&quot;address__address&quot;)
     return object_list(request, **kwargs)
 
 def detail(request, address):
-    owner = Address.objects.get(address=address)
-    keys = [unicode(key) for key in owner.sshkey_set.all()]
-    return HttpResponse(&quot;\n&quot;.join(keys), mimetype=&quot;text/plain&quot;)
+    keyobjs = AddressKey.objects.filter(verified=True, 
+                                        address__address=address)
+    keylist = set()
+    for key in keyobjs:
+        keylist.add(unicode(key.sshkey))
+    return HttpResponse(&quot;\n&quot;.join(keylist), mimetype=&quot;text/plain&quot;)
 
 def upload(request):
     address_str = request.POST['address']
@@ -39,18 +43,18 @@ def upload(request):
                           defaults={'date_added': datetime.now(),
                                     'verified': False,
                                     'token_sent': datetime.now()})
-    if created:
-        newrel.send_confirmation(newrel)
-        return render_to_response(&quot;keys/address_uploaded.html&quot;)
-    else:
-        newrel.send_confirmation(newrel)
-        return render_to_response(&quot;keys/address_index.html&quot;)
+
+    # &quot;if created:&quot; can tell us whether we created a new pair or
+    # just sent out a reminder about an old one, if we care.
+    newrel.send_confirmation(newrel)
+    return render_to_response(&quot;keys/address_uploaded.html&quot;)
 
 def search(request, **kwargs):
     search_str = request.POST['search']
     search = search_str.rstrip()
     kwargs['allow_empty'] = True
-    kwargs['queryset'] = Address.objects.filter(address__contains=search)
+    kwargs['queryset'] = AddressKey.objects.filter(verified=True,
+        address__address__contains=search).order_by(&quot;address__address&quot;)
     return object_list(request, extra_context={&quot;search&quot;: search}, **kwargs)
 
 def confirm(request, token):
@@ -63,13 +67,11 @@ def confirm(request, token):
 
 def download(request):
     search_str = request.POST['search']
-    addresses = Address.objects.filter(address__contains=search_str)
-    keys = set()
-    for address in addresses:
-        for key in address.sshkey_set.all():
-            keys.add(unicode(key))
+    keys = AddressKey.objects.filter(verified=True,
+        address__address__contains=search_str).order_by(&quot;address__address&quot;)
+
+    keylist = set()
+    for key in keys:
+        keylist.add(unicode(key.sshkey))
 
-    if len(keys) &gt; 0:
-        return HttpResponse(&quot;\n&quot;.join(keys), mimetype=&quot;text/plain&quot;)
-    else:
-        raise Http404
+    return HttpResponse(&quot;\n&quot;.join(keylist), mimetype=&quot;text/plain&quot;)</diff>
      <filename>keys/views.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0c17c360a30797a86fc5c55f038b2bda4da930e9</id>
    </parent>
  </parents>
  <author>
    <name>Chris Ball</name>
    <email>chris@printf.net</email>
  </author>
  <url>http://github.com/cjb/sshkeys/commit/903b94708c3a9d6508ce01838a1086c54b3f5a5f</url>
  <id>903b94708c3a9d6508ce01838a1086c54b3f5a5f</id>
  <committed-date>2008-09-03T00:18:01-07:00</committed-date>
  <authored-date>2008-09-03T00:18:01-07:00</authored-date>
  <message>Implement &quot;verified&quot; checking in all views.</message>
  <tree>cac6b6c173203fd5215b7d7d7f67f2cf1ad94795</tree>
  <committer>
    <name>Chris Ball</name>
    <email>chris@printf.net</email>
  </committer>
</commit>
