Commit 7707775c authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Implement user-readable message for kick.

parent 5c97e739
...@@ -64,7 +64,9 @@ type connectionFailedAction struct { ...@@ -64,7 +64,9 @@ type connectionFailedAction struct {
type permissionsChangedAction struct{} type permissionsChangedAction struct{}
type kickAction struct{} type kickAction struct{
message string
}
var groups struct { var groups struct {
mu sync.Mutex mu sync.Mutex
......
...@@ -437,12 +437,14 @@ ServerConnection.prototype.groupAction = function(kind) { ...@@ -437,12 +437,14 @@ ServerConnection.prototype.groupAction = function(kind) {
* *
* @param {string} kind - One of "op", "unop", "kick", "present", "unpresent". * @param {string} kind - One of "op", "unop", "kick", "present", "unpresent".
* @param {string} id * @param {string} id
* @param {string} [message]
*/ */
ServerConnection.prototype.userAction = function(kind, id) { ServerConnection.prototype.userAction = function(kind, id, message) {
this.send({ this.send({
type: 'useraction', type: 'useraction',
kind: kind, kind: kind,
id: id, id: id,
value: message,
}); });
} }
......
...@@ -955,14 +955,14 @@ function handleInput() { ...@@ -955,14 +955,14 @@ function handleInput() {
message = data.substring(1); message = data.substring(1);
me = false; me = false;
} else { } else {
let space, cmd, rest; let cmd, rest;
space = data.indexOf(' '); let space = data.indexOf(' ');
if(space < 0) { if(space < 0) {
cmd = data; cmd = data;
rest = ''; rest = '';
} else { } else {
cmd = data.slice(0, space); cmd = data.slice(0, space);
rest = data.slice(space + 1).trim(); rest = data.slice(space + 1);
} }
switch(cmd) { switch(cmd) {
...@@ -1005,22 +1005,31 @@ function handleInput() { ...@@ -1005,22 +1005,31 @@ function handleInput() {
displayError("You're not an operator"); displayError("You're not an operator");
return; return;
} }
let username, message;
let space = rest.indexOf(' ');
if(space < 0) {
username = rest;
message = null;
} else {
username = rest.slice(0, space);
message = rest.slice(space + 1).trim();
}
let id; let id;
if(rest in users) { if(username in users) {
id = rest; id = rest;
} else { } else {
for(let i in users) { for(let i in users) {
if(users[i] === rest) { if(users[i] === username) {
id = i; id = i;
break; break;
} }
} }
} }
if(!id) { if(!id) {
displayError('Unknown user ' + rest); displayError('Unknown user ' + username);
return; return;
} }
serverConnection.userAction(cmd.slice(1), id) serverConnection.userAction(cmd.slice(1), id, message);
return; return;
} }
default: default:
......
...@@ -870,7 +870,7 @@ func clientLoop(c *webClient, conn *websocket.Conn) error { ...@@ -870,7 +870,7 @@ func clientLoop(c *webClient, conn *websocket.Conn) error {
} }
} }
case kickAction: case kickAction:
return userError("you have been kicked") return userError(a.message)
default: default:
log.Printf("unexpected action %T", a) log.Printf("unexpected action %T", a)
return errors.New("unexpected action") return errors.New("unexpected action")
...@@ -943,7 +943,7 @@ func setPermissions(g *group, id string, perm string) error { ...@@ -943,7 +943,7 @@ func setPermissions(g *group, id string, perm string) error {
return c.action(permissionsChangedAction{}) return c.action(permissionsChangedAction{})
} }
func kickClient(g *group, id string) error { func kickClient(g *group, id string, message string) error {
g.mu.Lock() g.mu.Lock()
defer g.mu.Unlock() defer g.mu.Unlock()
...@@ -957,7 +957,7 @@ func kickClient(g *group, id string) error { ...@@ -957,7 +957,7 @@ func kickClient(g *group, id string) error {
return userError("this is not a real user") return userError("this is not a real user")
} }
return c.action(kickAction{}) return c.action(kickAction{message})
} }
func handleClientMessage(c *webClient, m clientMessage) error { func handleClientMessage(c *webClient, m clientMessage) error {
...@@ -1094,7 +1094,11 @@ func handleClientMessage(c *webClient, m clientMessage) error { ...@@ -1094,7 +1094,11 @@ func handleClientMessage(c *webClient, m clientMessage) error {
if !c.permissions.Op { if !c.permissions.Op {
return c.error(userError("not authorised")) return c.error(userError("not authorised"))
} }
err := kickClient(c.group, m.Id) message := m.Value
if message == "" {
message = "you have been kicked"
}
err := kickClient(c.group, m.Id, message)
if err != nil { if err != nil {
return c.error(err) return c.error(err)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment