Loading CHANGELOG.md +6 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,12 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Go runtime group creation now correctly validates max count. - Consistent expiry calculation in leaderboard records haystack queries. - Convert custom SQL query and exec parameters to integers where appropriate. - Correctly validate users before adding them to groups. - Add missing group chat channel message when a user joins the group. - Add missing group chat channel message when a user leaves the group. - Add missing group chat channel message when a user is added to the group. - Add missing group chat channel message when a user is kicked from the group. - Add missing group chat channel message when a user is promoted in the group. ## [2.6.0] - 2019-07-01 ### Added Loading main.go +1 −1 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ func main() { metrics := server.NewMetrics(logger, startupLogger, config, metricsExporter) statusHandler := server.NewLocalStatusHandler(logger, sessionRegistry, matchRegistry, tracker, metricsExporter, config.GetName()) consoleServer := server.StartConsoleServer(logger, startupLogger, db, config, tracker, statusHandler, configWarnings, semver) consoleServer := server.StartConsoleServer(logger, startupLogger, db, config, tracker, router, statusHandler, configWarnings, semver) apiServer := server.StartApiServer(logger, startupLogger, db, jsonpbMarshaler, jsonpbUnmarshaler, config, socialClient, leaderboardCache, leaderboardRankCache, sessionRegistry, matchRegistry, matchmaker, tracker, router, pipeline, runtime) gaenabled := len(os.Getenv("NAKAMA_TELEMETRY")) < 1 Loading server/api_group.go +8 −5 Original line number Diff line number Diff line Loading @@ -272,11 +272,12 @@ func (s *ApiServer) JoinGroup(ctx context.Context, in *api.JoinGroupRequest) (*e func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) (*empty.Empty, error) { userID := ctx.Value(ctxUserIDKey{}).(uuid.UUID) username := ctx.Value(ctxUsernameKey{}).(string) // Before hook. if fn := s.runtime.BeforeLeaveGroup(); fn != nil { beforeFn := func(clientIP, clientPort string) error { result, err, code := fn(ctx, s.logger, userID.String(), ctx.Value(ctxUsernameKey{}).(string), ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) result, err, code := fn(ctx, s.logger, userID.String(), username, ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) if err != nil { return status.Error(code, err.Error()) } Loading Loading @@ -305,7 +306,7 @@ func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) ( return nil, status.Error(codes.InvalidArgument, "Group ID must be a valid ID.") } err = LeaveGroup(ctx, s.logger, s.db, groupID, userID) err = LeaveGroup(ctx, s.logger, s.db, s.router, groupID, userID, username) if err != nil { if err == ErrGroupLastSuperadmin { return nil, status.Error(codes.InvalidArgument, "Cannot leave group when you are the last superadmin.") Loading @@ -316,7 +317,7 @@ func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) ( // After hook. if fn := s.runtime.AfterLeaveGroup(); fn != nil { afterFn := func(clientIP, clientPort string) { fn(ctx, s.logger, userID.String(), ctx.Value(ctxUsernameKey{}).(string), ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) fn(ctx, s.logger, userID.String(), username, ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) } // Execute the after function lambda wrapped in a trace for stats measurement. Loading Loading @@ -380,6 +381,8 @@ func (s *ApiServer) AddGroupUsers(ctx context.Context, in *api.AddGroupUsersRequ return nil, status.Error(codes.NotFound, "Group not found or permission denied.") } else if err == ErrGroupFull { return nil, status.Error(codes.InvalidArgument, "Group is full.") } else if err == ErrGroupUserNotFound { return nil, status.Error(codes.InvalidArgument, "One or more users not found.") } return nil, status.Error(codes.Internal, "Error while trying to add users to a group.") } Loading Loading @@ -445,7 +448,7 @@ func (s *ApiServer) KickGroupUsers(ctx context.Context, in *api.KickGroupUsersRe userIDs = append(userIDs, uid) } if err = KickGroupUsers(ctx, s.logger, s.db, userID, groupID, userIDs); err != nil { if err = KickGroupUsers(ctx, s.logger, s.db, s.router, userID, groupID, userIDs); err != nil { if err == ErrGroupPermissionDenied { return nil, status.Error(codes.NotFound, "Group not found or permission denied.") } Loading Loading @@ -513,7 +516,7 @@ func (s *ApiServer) PromoteGroupUsers(ctx context.Context, in *api.PromoteGroupU userIDs = append(userIDs, uid) } err = PromoteGroupUsers(ctx, s.logger, s.db, userID, groupID, userIDs) err = PromoteGroupUsers(ctx, s.logger, s.db, s.router, userID, groupID, userIDs) if err != nil { if err == ErrGroupPermissionDenied { return nil, status.Error(codes.NotFound, "Group not found or permission denied.") Loading server/console.go +3 −1 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ type ConsoleServer struct { db *sql.DB config Config tracker Tracker router MessageRouter statusHandler StatusHandler configWarnings map[string]string serverVersion string Loading @@ -52,7 +53,7 @@ type ConsoleServer struct { grpcGatewayServer *http.Server } func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.DB, config Config, tracker Tracker, statusHandler StatusHandler, configWarnings map[string]string, serverVersion string) *ConsoleServer { func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.DB, config Config, tracker Tracker, router MessageRouter, statusHandler StatusHandler, configWarnings map[string]string, serverVersion string) *ConsoleServer { var gatewayContextTimeoutMs string if config.GetConsole().IdleTimeoutMs > 500 { // Ensure the GRPC Gateway timeout is just under the idle timeout (if possible) to ensure it has priority. Loading @@ -73,6 +74,7 @@ func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.D db: db, config: config, tracker: tracker, router: router, statusHandler: statusHandler, configWarnings: configWarnings, serverVersion: serverVersion, Loading server/console_account.go +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ func (s *ConsoleServer) DeleteGroupUser(ctx context.Context, in *console.DeleteG return nil, status.Error(codes.InvalidArgument, "Requires a valid group ID.") } if err = KickGroupUsers(ctx, s.logger, s.db, uuid.Nil, groupID, []uuid.UUID{userID}); err != nil { if err = KickGroupUsers(ctx, s.logger, s.db, s.router, uuid.Nil, groupID, []uuid.UUID{userID}); err != nil { // Error already logged in function above. return nil, status.Error(codes.Internal, "An error occurred while trying to remove the user from the group.") } Loading Loading
CHANGELOG.md +6 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,12 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Go runtime group creation now correctly validates max count. - Consistent expiry calculation in leaderboard records haystack queries. - Convert custom SQL query and exec parameters to integers where appropriate. - Correctly validate users before adding them to groups. - Add missing group chat channel message when a user joins the group. - Add missing group chat channel message when a user leaves the group. - Add missing group chat channel message when a user is added to the group. - Add missing group chat channel message when a user is kicked from the group. - Add missing group chat channel message when a user is promoted in the group. ## [2.6.0] - 2019-07-01 ### Added Loading
main.go +1 −1 Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ func main() { metrics := server.NewMetrics(logger, startupLogger, config, metricsExporter) statusHandler := server.NewLocalStatusHandler(logger, sessionRegistry, matchRegistry, tracker, metricsExporter, config.GetName()) consoleServer := server.StartConsoleServer(logger, startupLogger, db, config, tracker, statusHandler, configWarnings, semver) consoleServer := server.StartConsoleServer(logger, startupLogger, db, config, tracker, router, statusHandler, configWarnings, semver) apiServer := server.StartApiServer(logger, startupLogger, db, jsonpbMarshaler, jsonpbUnmarshaler, config, socialClient, leaderboardCache, leaderboardRankCache, sessionRegistry, matchRegistry, matchmaker, tracker, router, pipeline, runtime) gaenabled := len(os.Getenv("NAKAMA_TELEMETRY")) < 1 Loading
server/api_group.go +8 −5 Original line number Diff line number Diff line Loading @@ -272,11 +272,12 @@ func (s *ApiServer) JoinGroup(ctx context.Context, in *api.JoinGroupRequest) (*e func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) (*empty.Empty, error) { userID := ctx.Value(ctxUserIDKey{}).(uuid.UUID) username := ctx.Value(ctxUsernameKey{}).(string) // Before hook. if fn := s.runtime.BeforeLeaveGroup(); fn != nil { beforeFn := func(clientIP, clientPort string) error { result, err, code := fn(ctx, s.logger, userID.String(), ctx.Value(ctxUsernameKey{}).(string), ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) result, err, code := fn(ctx, s.logger, userID.String(), username, ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) if err != nil { return status.Error(code, err.Error()) } Loading Loading @@ -305,7 +306,7 @@ func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) ( return nil, status.Error(codes.InvalidArgument, "Group ID must be a valid ID.") } err = LeaveGroup(ctx, s.logger, s.db, groupID, userID) err = LeaveGroup(ctx, s.logger, s.db, s.router, groupID, userID, username) if err != nil { if err == ErrGroupLastSuperadmin { return nil, status.Error(codes.InvalidArgument, "Cannot leave group when you are the last superadmin.") Loading @@ -316,7 +317,7 @@ func (s *ApiServer) LeaveGroup(ctx context.Context, in *api.LeaveGroupRequest) ( // After hook. if fn := s.runtime.AfterLeaveGroup(); fn != nil { afterFn := func(clientIP, clientPort string) { fn(ctx, s.logger, userID.String(), ctx.Value(ctxUsernameKey{}).(string), ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) fn(ctx, s.logger, userID.String(), username, ctx.Value(ctxExpiryKey{}).(int64), clientIP, clientPort, in) } // Execute the after function lambda wrapped in a trace for stats measurement. Loading Loading @@ -380,6 +381,8 @@ func (s *ApiServer) AddGroupUsers(ctx context.Context, in *api.AddGroupUsersRequ return nil, status.Error(codes.NotFound, "Group not found or permission denied.") } else if err == ErrGroupFull { return nil, status.Error(codes.InvalidArgument, "Group is full.") } else if err == ErrGroupUserNotFound { return nil, status.Error(codes.InvalidArgument, "One or more users not found.") } return nil, status.Error(codes.Internal, "Error while trying to add users to a group.") } Loading Loading @@ -445,7 +448,7 @@ func (s *ApiServer) KickGroupUsers(ctx context.Context, in *api.KickGroupUsersRe userIDs = append(userIDs, uid) } if err = KickGroupUsers(ctx, s.logger, s.db, userID, groupID, userIDs); err != nil { if err = KickGroupUsers(ctx, s.logger, s.db, s.router, userID, groupID, userIDs); err != nil { if err == ErrGroupPermissionDenied { return nil, status.Error(codes.NotFound, "Group not found or permission denied.") } Loading Loading @@ -513,7 +516,7 @@ func (s *ApiServer) PromoteGroupUsers(ctx context.Context, in *api.PromoteGroupU userIDs = append(userIDs, uid) } err = PromoteGroupUsers(ctx, s.logger, s.db, userID, groupID, userIDs) err = PromoteGroupUsers(ctx, s.logger, s.db, s.router, userID, groupID, userIDs) if err != nil { if err == ErrGroupPermissionDenied { return nil, status.Error(codes.NotFound, "Group not found or permission denied.") Loading
server/console.go +3 −1 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ type ConsoleServer struct { db *sql.DB config Config tracker Tracker router MessageRouter statusHandler StatusHandler configWarnings map[string]string serverVersion string Loading @@ -52,7 +53,7 @@ type ConsoleServer struct { grpcGatewayServer *http.Server } func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.DB, config Config, tracker Tracker, statusHandler StatusHandler, configWarnings map[string]string, serverVersion string) *ConsoleServer { func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.DB, config Config, tracker Tracker, router MessageRouter, statusHandler StatusHandler, configWarnings map[string]string, serverVersion string) *ConsoleServer { var gatewayContextTimeoutMs string if config.GetConsole().IdleTimeoutMs > 500 { // Ensure the GRPC Gateway timeout is just under the idle timeout (if possible) to ensure it has priority. Loading @@ -73,6 +74,7 @@ func StartConsoleServer(logger *zap.Logger, startupLogger *zap.Logger, db *sql.D db: db, config: config, tracker: tracker, router: router, statusHandler: statusHandler, configWarnings: configWarnings, serverVersion: serverVersion, Loading
server/console_account.go +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ func (s *ConsoleServer) DeleteGroupUser(ctx context.Context, in *console.DeleteG return nil, status.Error(codes.InvalidArgument, "Requires a valid group ID.") } if err = KickGroupUsers(ctx, s.logger, s.db, uuid.Nil, groupID, []uuid.UUID{userID}); err != nil { if err = KickGroupUsers(ctx, s.logger, s.db, s.router, uuid.Nil, groupID, []uuid.UUID{userID}); err != nil { // Error already logged in function above. return nil, status.Error(codes.Internal, "An error occurred while trying to remove the user from the group.") } Loading