private PlayerIdentityToken DecodePlayerIdentityToken(string pit)
        {
            var decodedPit = getFromCache(pit);

            if (decodedPit != null)
            {
                return(decodedPit);
            }

            try
            {
                var resp = _authClient.DecodePlayerIdentityToken(new DecodePlayerIdentityTokenRequest
                {
                    PlayerIdentityToken = pit
                });
                if (resp.PlayerIdentityToken.ExpiryTime.ToDateTime() <= DateTime.Now)
                {
                    throw new Exception("PIT has expired");
                }

                cacheResult(pit, resp.PlayerIdentityToken);
                return(resp.PlayerIdentityToken);
            }
            catch (Exception exception)
            {
                throw new RpcException(new Status(StatusCode.PermissionDenied,
                                                  "Failed to decode Player Identity Token: " + exception.Message));
            }
        }
Beispiel #2
0
        protected override void Run()
        {
            Console.WriteLine("Creating a PlayerIdentityToken");
            var playerIdentityTokenResponse = _playerAuthServiceClient.CreatePlayerIdentityToken(
                new CreatePlayerIdentityTokenRequest
            {
                Provider         = "provider",
                PlayerIdentifier = "player_identifier",
                ProjectName      = ProjectName
            });

            Console.WriteLine("Verifying PlayerIdentityToken");
            var decodePlayerIdentityTokenResponse = _playerAuthServiceClient.DecodePlayerIdentityToken(
                new DecodePlayerIdentityTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken
            });
            var playerIdentityToken = decodePlayerIdentityTokenResponse.PlayerIdentityToken;

            if (playerIdentityToken.Provider != "provider")
            {
                throw new Exception("Provider not recognised.");
            }
            if (playerIdentityToken.ProjectName != ProjectName)
            {
                throw new Exception("Project not recognised.");
            }
            if (DateTime.Now.CompareTo(playerIdentityToken.ExpiryTime.ToDateTime()) > 0)
            {
                throw new Exception("PlayerIdentityToken expired.");
            }

            Console.WriteLine("Choosing a deployment");
            var listDeploymentsRequest = new ListDeploymentsRequest
            {
                ProjectName = ProjectName,
                Filters     = { new Filter
                                {
                                    TagsPropertyFilter = new TagsPropertyFilter
                                    {
                                        Tag      = "player_auth_tag",
                                        Operator = TagsPropertyFilter.Types.Operator.Equal,
                                    },
                                } }
            };
            var suitableDeployment = _deploymentServiceClient.ListDeployments(listDeploymentsRequest).First();

            Console.WriteLine("Creating a LoginToken for the selected deployment");
            var createLoginTokenResponse = _playerAuthServiceClient.CreateLoginToken(
                new CreateLoginTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                DeploymentId        = suitableDeployment.Id.ToString(),
                LifetimeDuration    = Duration.FromTimeSpan(new TimeSpan(0, 0, 30, 0)),
                WorkerType          = ScenarioWorkerType
            });

            Console.WriteLine("Connecting to the deployment using the LoginToken and PlayerIdentityToken");
            var locatorParameters = new LocatorParameters
            {
                PlayerIdentity = new PlayerIdentityCredentials
                {
                    PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                    LoginToken          = createLoginTokenResponse.LoginToken
                }
            };
            var locator = new Locator(LocatorServerAddress, LocatorServerPort, locatorParameters);

            using (var connectionFuture = locator.ConnectAsync(new ConnectionParameters
            {
                WorkerType = ScenarioWorkerType,
                Network = { ConnectionType = NetworkConnectionType.Tcp, UseExternalIp = true }
            }))
            {
                var connFuture = connectionFuture.Get(Convert.ToUInt32(Defaults.ConnectionTimeoutMillis));
                if (!connFuture.HasValue || !connFuture.Value.IsConnected)
                {
                    throw new Exception("No connection or connection not established");
                }
                Console.WriteLine($"Assigned worker ID: {connFuture.Value.GetWorkerId()}");
            }
        }