/op with pubkey.
authorAndrey Petrov <andrey.petrov@shazow.net>
Mon, 19 Jan 2015 04:03:08 +0000 (20:03 -0800)
committerAndrey Petrov <andrey.petrov@shazow.net>
Mon, 19 Jan 2015 04:03:08 +0000 (20:03 -0800)
chat/command.go
host.go

index d4873f3fe994d509b345b4fdab8f4b2b5b61a676..ea313c83e837318f7f4e234b48e183d891097fdf 100644 (file)
@@ -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 3f592332c5932e84cdd6e6c7e1c4b31117ca6ae6..2e1a57f2955d00f661fc114d4dbe02549e42f542 100644 (file)
--- 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
+               },
+       })
 }