/** * @param string $queryType * @param string $query * * @return array[] */ public function suggest($queryType, $query) { if ('user' == $queryType) { $dql = $this->em->createQuery(sprintf('SELECT u FROM %s u WHERE u.firstName LIKE ?0 OR u.lastName LIKE ?0 OR u.username LIKE ?0 OR u.email LIKE ?0', User::clazz())); $dql->setParameter(0, '%' . $query . '%'); $rawResult = []; foreach ($dql->getResult() as $user) { /* @var User $user */ $value = $this->stringifyUser($user); $rawResult[] = array('id' => $user->getId(), 'value' => $value); } return $rawResult; } elseif ('exact-user' == $queryType) { // find by ID $user = $this->em->find(User::clazz(), $query); if (!$user) { throw new \DomainException(T::trans('Unable to find a user "%username%"', array('%username%' => $query))); } return [array('id' => $user->getId(), 'value' => $this->stringifyUser($user))]; } elseif ('eventType' == $queryType) { $activities = $this->activityManager->query(array('filter' => [array('property' => 'type', 'value' => 'like:%' . $query . '%')])); $rawResult = []; foreach ($activities['items'] as $activity) { /* @var ActivityInterface $activity */ $rawResult[] = $activity->getType(); } $rawResult = array_values(array_unique($rawResult)); $result = []; foreach ($rawResult as $item) { $result[] = array('id' => $item, 'value' => $item); } return $result; } }
public function testPostLoadWithEntity() { $user = \Phake::mock(User::clazz()); $event = $this->createEvent($user); $listener = new RootUserHandlerInjectionListener($this->container); $listener->postLoad($event); \Phake::verify($user)->init($this->rootUserHandler); }
public function testRootUser() { $em = \Phake::mock('Doctrine\\ORM\\EntityManager'); $rootUserHandler = \Phake::mock('Modera\\SecurityBundle\\RootUserHandling\\RootUserHandlerInterface'); $service = new UserService($em, $rootUserHandler); $user = \Phake::mock(User::clazz()); \Phake::when($rootUserHandler)->getUser()->thenReturn($user); \Phake::when($rootUserHandler)->isRootUser($user)->thenReturn(true); $this->assertEquals($user, $service->getRootUser()); $this->assertTrue($service->isRootUser($user)); }
public function testSecurityRolesMerger() { $roles = array(new Role('ROLE_USER'), new Role('ROLE_ADMIN')); $user = \Phake::mock(User::clazz()); \Phake::when($user)->getId()->thenReturn(777); \Phake::when($user)->getFullName()->thenReturn('John Doe'); \Phake::when($user)->getEmail()->thenReturn('*****@*****.**'); \Phake::when($user)->getUsername()->thenReturn('john.doe'); $token = \Phake::mock('Symfony\\Component\\Security\\Core\\Authentication\\Token\\TokenInterface'); \Phake::when($token)->getUser()->thenReturn($user); \Phake::when($token)->getRoles()->thenReturn($roles); $serviceDefinitions = array('fooService', 'barService'); $clientDiDefinitionsProvider = $this->createMock(ContributorInterface::CLAZZ); $clientDiDefinitionsProvider->expects($this->atLeastOnce())->method('getItems')->will($this->returnValue($serviceDefinitions)); $tokenStorage = \Phake::mock('Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface'); \Phake::when($tokenStorage)->getToken()->thenReturn($token); $provider = new ConfigMergersProvider($tokenStorage, $clientDiDefinitionsProvider); $mergers = $provider->getItems(); $this->assertEquals(2, count($mergers)); /* @var ConfigMergerInterface $securityRolesMerger */ $securityRolesMerger = $mergers[0]; /* @var ConfigMergerInterface $clientDiDefinitionsProviderMerger */ $clientDiDefinitionsProviderMerger = $mergers[1]; $this->assertInstanceOf('Modera\\MjrIntegrationBundle\\Config\\ConfigMergerInterface', $securityRolesMerger); $this->assertInstanceOf('Modera\\MjrIntegrationBundle\\Config\\ConfigMergerInterface', $clientDiDefinitionsProviderMerger); $existingConfig = array('something' => 'blah'); $mergedConfig = $securityRolesMerger->merge($existingConfig); $this->assertTrue(is_array($mergedConfig)); $this->assertArrayHasKey('something', $mergedConfig); $this->assertEquals('blah', $mergedConfig['something']); $this->assertArrayHasKey('roles', $mergedConfig); $this->assertTrue(is_array($mergedConfig['roles'])); $this->assertEquals(2, count($mergedConfig['roles'])); $this->assertTrue(in_array('ROLE_USER', $mergedConfig['roles'])); $this->assertTrue(in_array('ROLE_ADMIN', $mergedConfig['roles'])); $this->assertArrayHasKey('userProfile', $mergedConfig); $this->assertTrue(is_array($mergedConfig['userProfile'])); $this->assertArrayHasKey('id', $mergedConfig['userProfile']); $this->assertArrayHasKey('name', $mergedConfig['userProfile']); $this->assertArrayHasKey('email', $mergedConfig['userProfile']); $this->assertArrayHasKey('username', $mergedConfig['userProfile']); $this->assertEquals(777, $mergedConfig['userProfile']['id']); $this->assertEquals('John Doe', $mergedConfig['userProfile']['name']); $this->assertEquals('*****@*****.**', $mergedConfig['userProfile']['email']); $this->assertEquals('john.doe', $mergedConfig['userProfile']['username']); $mergedConfig = $clientDiDefinitionsProviderMerger->merge($existingConfig); $this->assertArrayHasKey('serviceDefinitions', $mergedConfig); $this->assertTrue(is_array($mergedConfig['serviceDefinitions'])); $this->assertEquals(2, count($mergedConfig['serviceDefinitions'])); $this->assertTrue(in_array('fooService', $mergedConfig['serviceDefinitions'])); $this->assertTrue(in_array('barService', $mergedConfig['serviceDefinitions'])); }
/** * @param ActivityInterface $activity * * @return array */ public function resolve(ActivityInterface $activity) { $isId = preg_match('/^[0-9]+$/', $activity->getAuthor()); if ($isId) { /* @var User $user */ $user = $this->om->find(User::clazz(), $activity->getAuthor()); if ($user) { return array('id' => $user->getId(), 'isUser' => true, 'fullName' => $user->getFullName(), 'username' => $user->getUsername()); } else { return array('isUser' => false, 'identity' => $activity->getAuthor()); } } else { return array('isUser' => false, 'identity' => $activity->getAuthor() ? $activity->getAuthor() : T::trans('Unknown')); } }
public function testIsRootUser() { $container = \Phake::mock('Symfony\\Component\\DependencyInjection\\ContainerInterface'); $bundleConfig = array('root_user' => array('query' => array('dat', 'is', 'query'))); $em = \Phake::mock('Doctrine\\ORM\\EntityManager'); \Phake::when($container)->getParameter(ModeraSecurityExtension::CONFIG_KEY)->thenReturn($bundleConfig); \Phake::when($container)->get('doctrine.orm.entity_manager')->thenReturn($em); $handler = new SemanticConfigRootUserHandler($container); $anonymousUser = \Phake::mock(User::clazz()); $dbUser = \Phake::mock(User::clazz()); \Phake::when($dbUser)->isEqualTo($anonymousUser)->thenReturn('dat is true'); $userRepository = \Phake::mock('Doctrine\\Common\\Persistence\\ObjectRepository'); \Phake::when($userRepository)->findOneBy($bundleConfig['root_user']['query'])->thenReturn($dbUser); \Phake::when($em)->getRepository(User::clazz())->thenReturn($userRepository); $this->assertEquals('dat is true', $handler->isRootUser($anonymousUser)); }
public function testUserToArray() { $user = \Phake::mock(User::clazz()); \Phake::when($user)->getId()->thenReturn(777); \Phake::when($user)->getFullName()->thenReturn('John Doe'); \Phake::when($user)->getEmail()->thenReturn('*****@*****.**'); \Phake::when($user)->getUsername()->thenReturn('john.doe'); $result = Authenticator::userToArray($user); $this->assertTrue(is_array($result)); $this->assertArrayHasKey('id', $result); $this->assertArrayHasKey('name', $result); $this->assertArrayHasKey('email', $result); $this->assertArrayHasKey('username', $result); $this->assertEquals(777, $result['id']); $this->assertEquals('John Doe', $result['name']); $this->assertEquals('*****@*****.**', $result['email']); $this->assertEquals('john.doe', $result['username']); }
public function testGetItems() { $user = \Phake::mock(User::clazz()); \Phake::when($user)->getId()->thenReturn('foo-id'); $token = \Phake::mock('Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken'); \Phake::when($token)->getUser()->thenReturn($user); $tokenStorage = \Phake::mock('Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface'); \Phake::when($tokenStorage)->getToken()->thenReturn($token); $configEntry = \Phake::mock('Modera\\ConfigBundle\\Config\\ConfigurationEntryInterface'); \Phake::when($configEntry)->getValue()->thenReturn('foo-value'); $configEntriesManager = \Phake::mock('Modera\\ConfigBundle\\Config\\ConfigurationEntriesManagerInterface'); \Phake::when($configEntriesManager)->findOneByNameOrDie(ModeraBackendGoogleAnalyticsBundle::TRACKING_CODE_CONFIG_KEY)->thenReturn($configEntry); $provider = new ConfigMergersProvider($tokenStorage, $configEntriesManager, 'prod'); $items = $provider->getItems(); $this->assertTrue(is_array($items)); $this->assertEquals(1, count($items)); /* @var ConfigMergerInterface $merger */ $merger = $items[0]; $this->assertInstanceOf('Modera\\MjrIntegrationBundle\\Config\\ConfigMergerInterface', $merger); $config = $merger->merge(array()); $this->assertArrayHasKey('modera_backend_google_analytics', $config); $config = $config['modera_backend_google_analytics']; $this->assertArrayHasKey('tracking_code', $config); $this->assertEquals('foo-value', $config['tracking_code']); $this->assertEquals('foo-id', $config['user_id']); $this->assertArrayHasKey('user_id', $config); $this->assertArrayHasKey('is_debug', $config); $this->assertFalse($config['is_debug']); // because it's "prod" env now $this->assertArrayHasKey('prefix', $config); $this->assertEquals('/backend', $config['prefix']); // --- env = dev $provider = new ConfigMergersProvider($tokenStorage, $configEntriesManager, 'dev'); $items = $provider->getItems(); $this->assertTrue(is_array($items)); $this->assertEquals(1, count($items)); $config = $items[0]->merge(array()); $this->assertTrue($config['modera_backend_google_analytics']['is_debug']); }
/** * Find users by some property. * * @param $property * @param $value * * @return User[] */ public function findUsersBy($property, $value) { return $this->em->getRepository(User::clazz())->findBy(array($property => $value)); }
/** * @return array */ private static function getTablesClasses() { return array(Permission::clazz(), PermissionCategory::clazz(), User::clazz(), Group::clazz(), Activity::clazz()); }
/** * {@inheritdoc} */ public function getUser() { return $this->em->getRepository(User::clazz())->findOneBy($this->config['query']); }
public function testDataMapper_ExcludedFiled() { $mappedFields = \Phake::makeVisible($this->mapper)->getAllowedFields(User::clazz()); $this->assertTrue(false === array_search('meta', $mappedFields)); }
/** * @return array */ public function getConfig() { $self = $this; return array('entity' => User::clazz(), 'create_default_data_mapper' => function (ContainerInterface $container) { return $this->container->get('modera_backend_security.data_mapper.user_data_mapper'); }, 'security' => array('actions' => array('create' => ModeraBackendSecurityBundle::ROLE_MANAGE_USER_PROFILES, 'update' => function (AuthorizationCheckerInterface $ac, array $params) use($self) { /* @var TokenStorageInterface $ts */ $ts = $self->get('security.token_storage'); /* @var User $user */ $user = $ts->getToken()->getUser(); if ($ac->isGranted(ModeraBackendSecurityBundle::ROLE_MANAGE_USER_PROFILES)) { return true; } else { // irrespectively of what privileges user has we will always allow him to edit his // own profile data return $user instanceof User && isset($params['record']['id']) && $user->getId() == $params['record']['id']; } }, 'remove' => ModeraBackendSecurityBundle::ROLE_MANAGE_USER_PROFILES, 'list' => ModeraBackendSecurityBundle::ROLE_ACCESS_BACKEND_TOOLS_SECURITY_SECTION)), 'hydration' => array('groups' => array('main-form' => ['id', 'username', 'email', 'firstName', 'lastName', 'middleName', 'meta'], 'list' => function (User $user) { $groups = array(); foreach ($user->getGroups() as $group) { $groups[] = $group->getName(); } return array('id' => $user->getId(), 'username' => $user->getUsername(), 'email' => $user->getEmail(), 'firstName' => $user->getFirstName(), 'lastName' => $user->getLastName(), 'middleName' => $user->getMiddleName(), 'state' => $user->getState(), 'groups' => $groups, 'meta' => $user->getMeta()); }, 'compact-list' => ['id', 'username', 'fullname'], 'delete-user' => ['username']), 'profiles' => array('list', 'delete-user', 'main-form', 'compact-list', 'modera-backend-security-group-groupusers' => HydrationProfile::create(false)->useGroups(array('compact-list')))), 'map_data_on_create' => function (array $params, User $entity, DataMapperInterface $defaultMapper, ContainerInterface $container) use($self) { $defaultMapper->mapData($params, $entity); if (isset($params['plainPassword']) && $params['plainPassword']) { $plainPassword = $params['plainPassword']; } else { $plainPassword = $self->generatePassword(); } $self->setPassword($entity, $plainPassword); if (isset($params['sendPassword']) && $params['sendPassword'] != '') { /* @var MailService $mailService */ $mailService = $container->get('modera_backend_security.service.mail_service'); $mailService->sendPassword($entity, $plainPassword); } }, 'map_data_on_update' => function (array $params, User $entity, DataMapperInterface $defaultMapper, ContainerInterface $container) use($self) { $defaultMapper->mapData($params, $entity); /* @var LoggerInterface $activityMgr */ $activityMgr = $container->get('modera_activity_logger.manager.activity_manager'); /* @var TokenStorageInterface $ts */ $ts = $container->get('security.token_storage'); if (isset($params['plainPassword']) && $params['plainPassword']) { $self->setPassword($entity, $params['plainPassword']); if (isset($params['sendPassword']) && $params['sendPassword'] != '') { /* @var MailService $mailService */ $mailService = $container->get('modera_backend_security.service.mail_service'); $mailService->sendPassword($entity, $params['plainPassword']); } $activityMsg = T::trans('Password has been changed for user "%user%".', array('%user%' => $entity->getUsername())); $activityContext = array('type' => 'user.password_changed', 'author' => $ts->getToken()->getUser()->getId()); $activityMgr->info($activityMsg, $activityContext); } else { $activityMsg = T::trans('Profile data is changed for user "%user%".', array('%user%' => $entity->getUsername())); $activityContext = array('type' => 'user.profile_updated', 'author' => $ts->getToken()->getUser()->getId()); $activityMgr->info($activityMsg, $activityContext); } }, 'remove_entities_handler' => function ($entities, $params, $defaultHandler, ContainerInterface $container) { /* @var UserService $userService */ $userService = $container->get('modera_security.service.user_service'); $operationResult = new OperationResult(); foreach ($entities as $entity) { /* @var User $entity*/ $userService->remove($entity); $operationResult->reportEntity(User::clazz(), $entity->getId(), OperationResult::TYPE_ENTITY_REMOVED); } return $operationResult; }); }
/** * {@inheritdoc} */ public static function doTearDownAfterClass() { self::$st->dropSchema(array(self::$em->getClassMetadata(User::clazz()), self::$em->getClassMetadata(Group::clazz()), self::$em->getClassMetadata(Permission::clazz()))); }