예제 #1
0
        public void AddOrUpdateState_StoresValidState()
        {
            var cookies = new HttpCookieCollection();
            var handler = new LoginHandler();
            var rc = new RegisteredClient
            {
                DisplayName = "test-name",
                Identity = "test-identity",
                Photo = "test-photo",
                RegistrationId = "test-reg-id"
            };

            var mockResponse = new Mock<HttpResponseBase>();
            mockResponse.Setup( a => a.Cookies )
                        .Returns( cookies );

            var mockContext = new Mock<HttpContextBase>();
            mockContext.Setup( a => a.Response )
                       .Returns( mockResponse.Object );

            handler.AddOrUpdateState( rc, mockContext.Object );

            var cookie = cookies[ "gemfire.state" ];
            var state = JsonConvert.DeserializeObject<RegisteredClient>( cookie.Value );
            var decryptedIdentity = handler.DecryptIdentity( state.Identity );

            Assert.AreEqual( rc.Identity, decryptedIdentity );
            Assert.AreEqual( rc.DisplayName, state.DisplayName );
            Assert.AreEqual( rc.Photo, state.Photo );
            Assert.AreEqual( rc.RegistrationId, state.RegistrationId );
        }
예제 #2
0
        public void AddOrUpdateState_AddsStateCookie()
        {
            var cookies = new HttpCookieCollection();
            var handler = new LoginHandler();
            var rc      = new RegisteredClient
            {
                DisplayName    = "test-name",
                Identity       = "test-identity",
                Photo          = "test-photo",
                RegistrationId = "test-reg-id"
            };

            var mockResponse = new Mock <HttpResponseBase>();

            mockResponse.Setup(a => a.Cookies)
            .Returns(cookies);

            var mockContext = new Mock <HttpContextBase>();

            mockContext.Setup(a => a.Response)
            .Returns(mockResponse.Object);

            handler.AddOrUpdateState(rc, mockContext.Object);

            Assert.IsNotNull(cookies["gemfire.state"]);
        }
        public void UpdateRegisteredClient(RegisteredClient o)
        {
            if (o == null)
            {
                throw new ArgumentNullException(nameof(o));
            }
            if (string.IsNullOrEmpty(o.RegisteredClientId))
            {
                throw new ArgumentNullException(nameof(o.RegisteredClientId));
            }
            if (string.IsNullOrEmpty(o.UpdateUser))
            {
                throw new ArgumentNullException(nameof(o.UpdateUser));
            }
            if (o.UpdateDate == null)
            {
                throw new ArgumentNullException(nameof(o.UpdateDate));
            }

            var client = _registeredClients.FirstOrDefault(c => c.RegisteredClientId == o.RegisteredClientId);

            o.CreationDate = client.CreationDate;
            o.CreationUser = client.CreationUser;
            _registeredClients.Remove(client);
            _registeredClients.Add(o);

            SaveData();
        }
예제 #4
0
        public void AddOrUpdateState_StoresValidState()
        {
            var cookies = new HttpCookieCollection();
            var handler = new LoginHandler();
            var rc      = new RegisteredClient
            {
                DisplayName    = "test-name",
                Identity       = "test-identity",
                Photo          = "test-photo",
                RegistrationId = "test-reg-id"
            };

            var mockResponse = new Mock <HttpResponseBase>();

            mockResponse.Setup(a => a.Cookies)
            .Returns(cookies);

            var mockContext = new Mock <HttpContextBase>();

            mockContext.Setup(a => a.Response)
            .Returns(mockResponse.Object);

            handler.AddOrUpdateState(rc, mockContext.Object);

            var cookie            = cookies["gemfire.state"];
            var state             = JsonConvert.DeserializeObject <RegisteredClient>(cookie.Value);
            var decryptedIdentity = handler.DecryptIdentity(state.Identity);

            Assert.AreEqual(rc.Identity, decryptedIdentity);
            Assert.AreEqual(rc.DisplayName, state.DisplayName);
            Assert.AreEqual(rc.Photo, state.Photo);
            Assert.AreEqual(rc.RegistrationId, state.RegistrationId);
        }
        public async Task <IActionResult> Edit(string id, [Bind("ClientId,ClientName,ClientDomain,ClientIcon,RedirectUrl,CreatedAt,UpdatedAt,Status")] RegisteredClient registeredClient)
        {
            if (id != registeredClient.ClientId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(registeredClient);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!RegisteredClientExists(registeredClient.ClientId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(registeredClient));
        }
        public static void SetState(RegisteredClient rc, HttpResponseBase response)
        {
            // Save the cookie state
            Byte[] identity  = Encoding.UTF8.GetBytes(rc.Identity);
            Byte[] encrypted = MachineKey.Protect(identity, "TranMini.Identity");
            var    temp      = new RegisteredClient(rc.RegistrationID, HttpServerUtility.UrlTokenEncode(encrypted), rc.DisplayName);
            var    state     = JsonConvert.SerializeObject(temp);

            response.Cookies.Add(new HttpCookie("tranmini.state", state));
        }
        public async Task <IActionResult> Create([Bind("ClientId,ClientName,ClientDomain,ClientIcon,RedirectUrl,CreatedAt,UpdatedAt,Status")] RegisteredClient registeredClient)
        {
            if (ModelState.IsValid)
            {
                _context.Add(registeredClient);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(registeredClient));
        }
        public async Task <IActionResult> Create([Bind("ClientName,ClientDomain,ClientIcon,RedirectUrl")] RegisteredClient registeredClient)
        {
            if (ModelState.IsValid)
            {
                registeredClient.ClientId = Guid.NewGuid().ToString();
                _context.Add(registeredClient);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(registeredClient));
        }
        public static void SetState(RegisteredClient rc, IOwinResponse response)
        {
            // Save the cookie state
            Byte[] identity = Encoding.UTF8.GetBytes(rc.Identity);
            Byte[] encrypted = MachineKey.Protect(identity, "ShootR.Identity");
            var temp = new RegisteredClient(rc.RegistrationID, HttpServerUtility.UrlTokenEncode(encrypted), rc.DisplayName, rc.Photo);
            var state = JsonConvert.SerializeObject(temp);

            response.Cookies.Append("shootr.state", state, new CookieOptions
            {
                Expires = DateTime.Now.AddDays(30)
            });
        }
        public static void SetState(RegisteredClient rc, IOwinResponse response)
        {
            // Save the cookie state
            Byte[] identity  = Encoding.UTF8.GetBytes(rc.Identity);
            Byte[] encrypted = MachineKey.Protect(identity, "ShootR.Identity");
            var    temp      = new RegisteredClient(rc.RegistrationID, HttpServerUtility.UrlTokenEncode(encrypted), rc.DisplayName, rc.Photo);
            var    state     = JsonConvert.SerializeObject(temp);

            response.Cookies.Append("shootr.state", state, new CookieOptions
            {
                Expires = DateTime.Now.AddDays(30)
            });
        }
예제 #11
0
        public ActionResult Index()
        {
            RegisteredClient rc = new RegisteredClient();

            rc.RegistrationID = null;
            rc.DisplayName    = "Player " + GuestID++;
            rc.Identity       = "Player" + Guid.NewGuid().ToString();

            GameServer.Game.Instance.RegistrationHandler.Register(rc);

            TranMiniAuthenticationProvider.SetState(rc, Response);

            return(View());
        }
예제 #12
0
        public string CreateClient(RegisteredClient client)
        {
            var rand = new Random();

            client.RegisteredClientId = GenerateClientId(rand.Next(0, 1000000));
            while (_dataService.GetRegisteredClient(client.RegisteredClientId) != null)
            {
                client.RegisteredClientId = GenerateClientId(rand.Next(0, 1000000));
            }

            _dataService.CreateRegisteredClient(client);

            return(client.RegisteredClientId);
        }
예제 #13
0
        public void Register_RecyclesExisting()
        {
            var handler = new RegistrationHandler();
            var rc = new RegisteredClient
            {
                DisplayName = "test-name",
                Identity = "test-identity",
                Photo = "test-photo"
            };

            var registered = handler.Register( rc );
            var exists = handler.RegistrationExists( registered.RegistrationId );

            Assert.IsTrue( exists );
            Assert.AreEqual( rc.DisplayName, registered.DisplayName );
            Assert.AreEqual( rc.Identity, registered.Identity );
            Assert.AreEqual( rc.Photo, registered.Photo );
        }
예제 #14
0
        public void Register_RecyclesExisting()
        {
            var handler = new RegistrationHandler();
            var rc      = new RegisteredClient
            {
                DisplayName = "test-name",
                Identity    = "test-identity",
                Photo       = "test-photo"
            };

            var registered = handler.Register(rc);
            var exists     = handler.RegistrationExists(registered.RegistrationId);

            Assert.IsTrue(exists);
            Assert.AreEqual(rc.DisplayName, registered.DisplayName);
            Assert.AreEqual(rc.Identity, registered.Identity);
            Assert.AreEqual(rc.Photo, registered.Photo);
        }
        public override void ResponseSignIn(CookieResponseSignInContext context)
        {
            var principle = new ClaimsPrincipal(context.Identity);
            var pictureClaim = principle.FindFirst("profilePicture");
            var idClaim = principle.FindFirst(ClaimTypes.NameIdentifier);
            var nameClaim = principle.FindFirst(ClaimTypes.Name);
            var emailClaim = principle.FindFirst(ClaimTypes.Email);

            var id = idClaim == null ? Guid.NewGuid().ToString() : idClaim.Value;
            var name = nameClaim == null ? "unknown" : System.Net.WebUtility.HtmlEncode(nameClaim.Value);
            var photo = pictureClaim != null ? pictureClaim.Value :  GetPhotoUrl(emailClaim == null ? "" : emailClaim.Value);

            var rc = new RegisteredClient()
            {
                Identity = id,
                DisplayName = name,
                Photo = photo
            };

            SetState(rc, context.Response);
        }
        public override void ResponseSignIn(CookieResponseSignInContext context)
        {
            var principle    = new ClaimsPrincipal(context.Identity);
            var pictureClaim = principle.FindFirst("profilePicture");
            var idClaim      = principle.FindFirst(ClaimTypes.NameIdentifier);
            var nameClaim    = principle.FindFirst(ClaimTypes.Name);
            var emailClaim   = principle.FindFirst(ClaimTypes.Email);

            var id = idClaim == null?Guid.NewGuid().ToString() : idClaim.Value;

            var name  = nameClaim == null ? "unknown" : System.Net.WebUtility.HtmlEncode(nameClaim.Value);
            var photo = pictureClaim != null ? pictureClaim.Value :  GetPhotoUrl(emailClaim == null ? "" : emailClaim.Value);

            var rc = new RegisteredClient()
            {
                Identity    = id,
                DisplayName = name,
                Photo       = photo
            };

            SetState(rc, context.Response);
        }
예제 #17
0
        public void InitializeClient_ReassignsConnectionIfUserFound()
        {
            var connection = "123";
            var rc         = new RegisteredClient
            {
                DisplayName    = "name",
                Identity       = "id",
                Photo          = "photo",
                RegistrationId = "reg-id"
            };

            #region RegistrationHandler
            var registrationHandler = new Mock <IRegistrationHandler>();

            registrationHandler.Setup(a => a.RegistrationExists(It.IsAny <string>()))
            .Returns(true);

            registrationHandler.Setup(a => a.RemoveRegistration(It.IsAny <string>()))
            .Returns(rc);
            #endregion

            #region UserHandler
            var userHandler = new Mock <IUserHandler>();

            userHandler.Setup(a => a.UserExists(It.IsAny <string>()))
            .Returns(false);

            userHandler.Setup(a => a.FindUserByIdentity(rc.Identity))
            .Returns(new User(connection, rc));
            #endregion

            var hub = this.GetHub(connection,
                                  registrationHandler: registrationHandler,
                                  userHandler: userHandler);

            var result = hub.InitializeClient("reg");

            userHandler.Verify(a => a.ReassignUser(It.IsAny <string>(), It.IsAny <User>()));
        }
        public void CreateRegisteredClient(RegisteredClient o)
        {
            if (o == null)
            {
                throw new ArgumentNullException(nameof(o));
            }
            if (string.IsNullOrEmpty(o.RegisteredClientId))
            {
                throw new ArgumentNullException(nameof(o.RegisteredClientId));
            }
            if (string.IsNullOrEmpty(o.CreationUser))
            {
                throw new ArgumentNullException(nameof(o.CreationUser));
            }
            if (_registeredClients.Any(c => c.RegisteredClientId == o.RegisteredClientId))
            {
                throw new ArgumentException($"registered client with ID '{o.RegisteredClientId}' already exists!");
            }

            _registeredClients.Add(o);

            SaveData();
        }
예제 #19
0
        public void AddOrUpdateState_AddsStateCookie()
        {
            var cookies = new HttpCookieCollection();
            var handler = new LoginHandler();
            var rc = new RegisteredClient
            {
                DisplayName = "test-name",
                Identity = "test-identity",
                Photo = "test-photo",
                RegistrationId = "test-reg-id"
            };

            var mockResponse = new Mock<HttpResponseBase>();
            mockResponse.Setup( a => a.Cookies )
                        .Returns( cookies );

            var mockContext = new Mock<HttpContextBase>();
            mockContext.Setup( a => a.Response )
                       .Returns( mockResponse.Object );

            handler.AddOrUpdateState( rc, mockContext.Object );

            Assert.IsNotNull( cookies[ "gemfire.state" ] );
        }
예제 #20
0
파일: LobbyTests.cs 프로젝트: upta/gemfire
        public void InitializeClient_AddsUserToTheirGameGroups()
        {
            var connection = "123";
            var userid = "user-id";

            var rc = new RegisteredClient
            {
                DisplayName = "name",
                Identity = "id",
                Photo = "photo",
                RegistrationId = "reg-id"
            };

            var userGame = new Game( "name", "creator" )
            {
                Id = "game-id",
                Players = new List<string>() { userid }
            };

            var addedGroups = new List<string>();

            #region RegistrationHandler
            var registration = new Mock<IRegistrationHandler>();

            registration.Setup( a => a.RegistrationExists( It.IsAny<string>() ) )
                        .Returns( true );

            registration.Setup( a => a.RemoveRegistration( It.IsAny<string>() ) )
                        .Returns( rc );
            #endregion

            #region UserHandler
            var user = new Mock<IUserHandler>();

            user.Setup( a => a.UserExists( It.IsAny<string>() ) )
                .Returns( false );

            user.Setup( a => a.FindUserByIdentity( It.IsAny<string>() ) )
                .Returns( new User( connection, rc ) { Id = userid } );
            #endregion

            #region GameHandler
            var game = new Mock<IGameHandler>();

            game.Setup( a => a.GetGames() )
                .Returns( new List<Game>() { userGame } );
            #endregion

            #region GroupManager
            var groups = new Mock<IGroupManager>();

            groups.Setup( a => a.Add( It.IsAny<string>(), It.IsAny<string>() ) )
                  .Callback<string, string>( ( c, g ) => addedGroups.Add( g ) );
            #endregion

            var hub = this.GetHub( connection,
                                   groupManager: groups,
                                   registrationHandler: registration,
                                   userHandler: user,
                                   gameHandler: game );

            var result = hub.InitializeClient( "reg" );

            Assert.IsTrue( addedGroups.Any( a => a == userGame.GroupName ) );
        }
예제 #21
0
파일: LobbyTests.cs 프로젝트: upta/gemfire
        public void InitializeClient_SavesUser()
        {
            var connection = "123";
            var rc = new RegisteredClient
            {
                DisplayName = "name",
                Identity = "id",
                Photo = "photo",
                RegistrationId = "reg-id"
            };

            #region RegistrationHandler
            var registrationHandler = new Mock<IRegistrationHandler>();

            registrationHandler.Setup( a => a.RegistrationExists( It.IsAny<string>() ) )
                               .Returns( true );

            registrationHandler.Setup( a => a.RemoveRegistration( It.IsAny<string>() ) )
                               .Returns( rc );
            #endregion

            #region UserHandler
            var userHandler = new Mock<IUserHandler>();

            userHandler.Setup( a => a.UserExists( It.IsAny<string>() ) )
                       .Returns( false );
            #endregion

            var hub = this.GetHub( connection,
                                   registrationHandler: registrationHandler,
                                   userHandler: userHandler );

            var result = hub.InitializeClient( "reg" );

            userHandler.Verify( a => a.AddUser( It.IsAny<User>() ) );
        }
예제 #22
0
파일: LobbyTests.cs 프로젝트: upta/gemfire
        public void InitializeClient_ReturnsAvailableScenarios()
        {
            var connection = "123";
            var userid = "user-id";

            var rc = new RegisteredClient
            {
                DisplayName = "name",
                Identity = "id",
                Photo = "photo",
                RegistrationId = "reg-id"
            };

            var userGame = new Game( "name", "creator" )
            {
                Id = "game-id",
                Players = new List<string>() { userid }
            };

            var scenarioNames = new List<string>() { "s1", "s2" };

            #region RegistrationHandler
            var registration = new Mock<IRegistrationHandler>();

            registration.Setup( a => a.RegistrationExists( It.IsAny<string>() ) )
                        .Returns( true );

            registration.Setup( a => a.RemoveRegistration( It.IsAny<string>() ) )
                        .Returns( rc );
            #endregion

            #region UserHandler
            var user = new Mock<IUserHandler>();

            user.Setup( a => a.UserExists( It.IsAny<string>() ) )
                .Returns( false );

            user.Setup( a => a.FindUserByIdentity( It.IsAny<string>() ) )
                .Returns( new User( connection, rc ) { Id = userid } );
            #endregion

            #region GameHandler
            var game = new Mock<IGameHandler>();

            game.Setup( a => a.GetGames() )
                .Returns( new List<Game>() { userGame } );
            #endregion

            #region ScenarioHandler
            var scenarioHandler = new Mock<IScenarioHandler>();

            scenarioHandler.Setup( a => a.GetScenarioNames() )
                           .Returns( scenarioNames );
            #endregion

            var hub = this.GetHub( connection,
                                   registrationHandler: registration,
                                   userHandler: user,
                                   gameHandler: game,
                                   scenarioHandler: scenarioHandler );

            var result = hub.InitializeClient( "reg" );

            CollectionAssert.AreEquivalent( scenarioNames, result.Scenarios.ToList() );
        }
예제 #23
0
        public void InitializeClient_ReturnsAvailableScenarios()
        {
            var connection = "123";
            var userid     = "user-id";

            var rc = new RegisteredClient
            {
                DisplayName    = "name",
                Identity       = "id",
                Photo          = "photo",
                RegistrationId = "reg-id"
            };

            var userGame = new Game("name", "creator")
            {
                Id      = "game-id",
                Players = new List <string>()
                {
                    userid
                }
            };

            var scenarioNames = new List <string>()
            {
                "s1", "s2"
            };

            #region RegistrationHandler
            var registration = new Mock <IRegistrationHandler>();

            registration.Setup(a => a.RegistrationExists(It.IsAny <string>()))
            .Returns(true);

            registration.Setup(a => a.RemoveRegistration(It.IsAny <string>()))
            .Returns(rc);
            #endregion

            #region UserHandler
            var user = new Mock <IUserHandler>();

            user.Setup(a => a.UserExists(It.IsAny <string>()))
            .Returns(false);

            user.Setup(a => a.FindUserByIdentity(It.IsAny <string>()))
            .Returns(new User(connection, rc)
            {
                Id = userid
            });
            #endregion

            #region GameHandler
            var game = new Mock <IGameHandler>();

            game.Setup(a => a.GetGames())
            .Returns(new List <Game>()
            {
                userGame
            });
            #endregion

            #region ScenarioHandler
            var scenarioHandler = new Mock <IScenarioHandler>();

            scenarioHandler.Setup(a => a.GetScenarioNames())
            .Returns(scenarioNames);
            #endregion

            var hub = this.GetHub(connection,
                                  registrationHandler: registration,
                                  userHandler: user,
                                  gameHandler: game,
                                  scenarioHandler: scenarioHandler);

            var result = hub.InitializeClient("reg");

            CollectionAssert.AreEquivalent(scenarioNames, result.Scenarios.ToList());
        }
예제 #24
0
        public void InitializeClient_AddsUserToTheirGameGroups()
        {
            var connection = "123";
            var userid     = "user-id";

            var rc = new RegisteredClient
            {
                DisplayName    = "name",
                Identity       = "id",
                Photo          = "photo",
                RegistrationId = "reg-id"
            };

            var userGame = new Game("name", "creator")
            {
                Id      = "game-id",
                Players = new List <string>()
                {
                    userid
                }
            };

            var addedGroups = new List <string>();

            #region RegistrationHandler
            var registration = new Mock <IRegistrationHandler>();

            registration.Setup(a => a.RegistrationExists(It.IsAny <string>()))
            .Returns(true);

            registration.Setup(a => a.RemoveRegistration(It.IsAny <string>()))
            .Returns(rc);
            #endregion

            #region UserHandler
            var user = new Mock <IUserHandler>();

            user.Setup(a => a.UserExists(It.IsAny <string>()))
            .Returns(false);

            user.Setup(a => a.FindUserByIdentity(It.IsAny <string>()))
            .Returns(new User(connection, rc)
            {
                Id = userid
            });
            #endregion

            #region GameHandler
            var game = new Mock <IGameHandler>();

            game.Setup(a => a.GetGames())
            .Returns(new List <Game>()
            {
                userGame
            });
            #endregion

            #region GroupManager
            var groups = new Mock <IGroupManager>();

            groups.Setup(a => a.Add(It.IsAny <string>(), It.IsAny <string>()))
            .Callback <string, string>((c, g) => addedGroups.Add(g));
            #endregion

            var hub = this.GetHub(connection,
                                  groupManager: groups,
                                  registrationHandler: registration,
                                  userHandler: user,
                                  gameHandler: game);

            var result = hub.InitializeClient("reg");

            Assert.IsTrue(addedGroups.Any(a => a == userGame.GroupName));
        }