From 84df305ddfcd66dce168268f65cb7146a6680039 Mon Sep 17 00:00:00 2001
From: Andrey Petrov <andrey.petrov@shazow.net>
Date: Sun, 18 Jan 2015 20:03:08 -0800
Subject: [PATCH] /op with pubkey.

---
 chat/command.go | 27 ---------------------------
 host.go         | 30 ++++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/chat/command.go b/chat/command.go
index d4873f3..ea313c8 100644
--- a/chat/command.go
+++ b/chat/command.go
@@ -216,31 +216,4 @@ func InitCommands(c *Commands) {
 			return nil
 		},
 	})
-
-	c.Add(Command{
-		Op:         true,
-		Prefix:     "/op",
-		PrefixHelp: "USER",
-		Help:       "Mark user as admin.",
-		Handler: func(room *Room, msg CommandMsg) error {
-			if !room.IsOp(msg.From()) {
-				return errors.New("must be op")
-			}
-
-			args := msg.Args()
-			if len(args) != 1 {
-				return errors.New("must specify user")
-			}
-
-			// TODO: Add support for fingerprint-based op'ing. This will
-			// probably need to live in host land.
-			member, ok := room.MemberById(args[0])
-			if !ok {
-				return errors.New("user not found")
-			}
-
-			member.Op = true
-			return nil
-		},
-	})
 }
diff --git a/host.go b/host.go
index 3f59233..2e1a57f 100644
--- a/host.go
+++ b/host.go
@@ -400,4 +400,34 @@ func (h *Host) InitCommands(c *chat.Commands) {
 			return nil
 		},
 	})
+
+	c.Add(chat.Command{
+		Op:         true,
+		Prefix:     "/op",
+		PrefixHelp: "USER",
+		Help:       "Set USER as admin.",
+		Handler: func(room *chat.Room, msg chat.CommandMsg) error {
+			if !room.IsOp(msg.From()) {
+				return errors.New("must be op")
+			}
+
+			args := msg.Args()
+			if len(args) != 1 {
+				return errors.New("must specify user")
+			}
+
+			member, ok := room.MemberById(args[0])
+			if !ok {
+				return errors.New("user not found")
+			}
+			member.Op = true
+			id := member.Identifier.(*Identity)
+			h.auth.Op(id.PublicKey())
+
+			body := fmt.Sprintf("Made op by %s.", msg.From().Name())
+			room.Send(chat.NewSystemMsg(body, member.User))
+
+			return nil
+		},
+	})
 }