From 5c0bee9b20f50a26c7ac3fa90d1db2b8329d358b Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Fri, 7 Apr 2017 17:40:38 -0700
Subject: [PATCH] refactor update ssh key use time (#1466)

---
 cmd/serv.go       |  8 +-------
 models/ssh_key.go | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/cmd/serv.go b/cmd/serv.go
index dc8952abe9..e3aeb41c56 100644
--- a/cmd/serv.go
+++ b/cmd/serv.go
@@ -316,13 +316,7 @@ func runServ(c *cli.Context) error {
 
 	// Update user key activity.
 	if keyID > 0 {
-		key, err := models.GetPublicKeyByID(keyID)
-		if err != nil {
-			fail("Internal error", "GetPublicKeyById: %v", err)
-		}
-
-		key.Updated = time.Now()
-		if err = models.UpdatePublicKey(key); err != nil {
+		if err = models.UpdatePublicKeyUpdated(keyID); err != nil {
 			fail("Internal error", "UpdatePublicKey: %v", err)
 		}
 	}
diff --git a/models/ssh_key.go b/models/ssh_key.go
index ba7007028f..75a0120c59 100644
--- a/models/ssh_key.go
+++ b/models/ssh_key.go
@@ -500,6 +500,20 @@ func UpdatePublicKey(key *PublicKey) error {
 	return err
 }
 
+// UpdatePublicKeyUpdated updates public key use time.
+func UpdatePublicKeyUpdated(id int64) error {
+	cnt, err := x.ID(id).Cols("updated").Update(&PublicKey{
+		Updated: time.Now(),
+	})
+	if err != nil {
+		return err
+	}
+	if cnt != 1 {
+		return ErrKeyNotExist{id}
+	}
+	return nil
+}
+
 // deletePublicKeys does the actual key deletion but does not update authorized_keys file.
 func deletePublicKeys(e *xorm.Session, keyIDs ...int64) error {
 	if len(keyIDs) == 0 {