From 9387fedfee3f957f5970b8d160958a89755bf7ef Mon Sep 17 00:00:00 2001
From: Lloyd Hilaiel <lloyd@hilaiel.com>
Date: Wed, 13 Apr 2011 16:58:32 -0600
Subject: [PATCH] fix set_key wsapi on authority, now properly associates a NEW
 key with an EXISTING email address owned by the currently authenticated user

---
 authority/server/db.js    | 27 +++++++++++++++++++++++++++
 authority/server/wsapi.js |  2 +-
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/authority/server/db.js b/authority/server/db.js
index 0e70d3a36..b00414b18 100644
--- a/authority/server/db.js
+++ b/authority/server/db.js
@@ -118,6 +118,33 @@ exports.addEmailToAccount = function(existing_email, email, pubkey, cb) {
   });
 }
 
+exports.addKeyToEmail = function(existing_email, email, pubkey, cb) {
+  console.log("so you want to add a key ("+pubkey+") to " + email);
+  emailToUserID(existing_email, function(userID) {
+    if (userID == undefined) {
+      cb("no such email: " + existing_email, undefined);
+      return;
+    }
+
+    db.execute("SELECT emails.id FROM emails,users WHERE users.id = ? AND emails.address = ? AND emails.user = users.id",
+               [ userID, email ],
+               function(err, rows) {
+                 if (err || rows.length != 1) {
+                   cb(err);
+                   return;
+                 }
+                 executeTransaction([
+                   [ "INSERT INTO keys (email, key, expires) VALUES(?,?,?)",
+                     [ rows[0].id, pubkey, ((new Date()).getTime() + (14 * 24 * 60 * 60 * 1000)) ]
+                   ]
+                 ], function (error) {
+                   if (error) cb(error);
+                   else cb();
+                 });
+               });
+  });
+}
+
 /* takes an argument object including email, pass, and pubkey. */
 exports.stageUser = function(obj) {
   var secret = generateSecret();
diff --git a/authority/server/wsapi.js b/authority/server/wsapi.js
index 9b8e22dc0..1dc316de1 100644
--- a/authority/server/wsapi.js
+++ b/authority/server/wsapi.js
@@ -134,7 +134,7 @@ exports.set_key = function (req, resp) {
   if (!checkParams(getArgs, resp, [ "email", "pubkey" ])) return;
   if (!isAuthed(req, resp)) return;
   logRequest("set_key", getArgs);
-  db.addEmailToAccount(req.session.authenticatedUser, getArgs.email, getArgs.pubkey, function (rv) {
+  db.addKeyToEmail(req.session.authenticatedUser, getArgs.email, getArgs.pubkey, function (rv) {
     httputils.jsonResponse(resp, rv);
   });
 };
-- 
GitLab