From 613d13652f143333ef7a09eec95fa0537e06ec3c Mon Sep 17 00:00:00 2001 From: Kane York Date: Sat, 21 May 2016 11:35:32 -0700 Subject: [PATCH] Allow opt-out of user tracking --- socketserver/server/commands.go | 25 ++++++++++++++++++++----- socketserver/server/types.go | 2 ++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/socketserver/server/commands.go b/socketserver/server/commands.go index a112e6dc..2c71fd0c 100644 --- a/socketserver/server/commands.go +++ b/socketserver/server/commands.go @@ -111,17 +111,32 @@ func callHandler(handler CommandHandler, conn *websocket.Conn, client *ClientInf // C2SHello implements the `hello` C2S Command. // It calls SubscribeGlobal() and SubscribeDefaults() with the client, and fills out ClientInfo.Version and ClientInfo.ClientID. func C2SHello(conn *websocket.Conn, client *ClientInfo, msg ClientMessage) (rmsg ClientMessage, err error) { - version, clientID, err := msg.ArgumentsAsTwoStrings() - if err != nil { + ary, ok := msg.Arguments.([]interface{}) + if !ok { + err = ErrExpectedTwoStrings + return + } + if len(ary) != 2 { + err = ErrExpectedTwoStrings + return + } + version, ok := ary[0].(string) + if !ok { + err = ErrExpectedTwoStrings return } client.VersionString = copyString(version) client.Version = VersionFromString(version) - client.ClientID = uuid.FromStringOrNil(clientID) - if client.ClientID == uuid.Nil { - client.ClientID = uuid.NewV4() + if clientIDStr, ok := ary[1].(string); ok { + client.ClientID = uuid.FromStringOrNil(clientIDStr) + if client.ClientID == uuid.Nil { + client.ClientID = uuid.NewV4() + } + } else if _, ok := ary[1].(bool); ok { + // opt out + client.ClientID = AnonymousClientID } uniqueUserChannel <- client.ClientID diff --git a/socketserver/server/types.go b/socketserver/server/types.go index 3d360e26..e775acb5 100644 --- a/socketserver/server/types.go +++ b/socketserver/server/types.go @@ -11,6 +11,8 @@ import ( const NegativeOne = ^uint64(0) +var AnonymousClientID = uuid.FromStringOrNil("683b45e4-f853-4c45-bf96-7d799cc93e34") + type ConfigFile struct { // Numeric server id known to the backend ServerID int