partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit a76aece930dcf515e7c2e16ba84111d4b6670fac
parent 2a4592d7f5ea1ed753a0c1740f6a202077a8bcb7
Author: Felicitus <felicitus@felicitus.org>
Date:   Sun,  7 Feb 2016 19:06:51 +0100

Merge branch 'master' of github.com:partkeepr/PartKeepr

Diffstat:
Asrc/PartKeepr/CoreBundle/Tests/SetupWebTestCase.php | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/PartKeepr/SetupBundle/Controller/AdminUserSetupController.php | 15++++++++++++++-
Msrc/PartKeepr/SetupBundle/Controller/CacheWarmupSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/ExistingConfigParserController.php | 12++++--------
Msrc/PartKeepr/SetupBundle/Controller/ExistingUserSetupController.php | 14++++++++++----
Msrc/PartKeepr/SetupBundle/Controller/FileMigrationController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/FootprintSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/ManufacturerSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/PartUnitSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/SchemaMigrationSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/SchemaSetupController.php | 8++++++--
Asrc/PartKeepr/SetupBundle/Controller/SetupBaseController.php | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/PartKeepr/SetupBundle/Controller/SetupController.php | 71+++++++----------------------------------------------------------------
Msrc/PartKeepr/SetupBundle/Controller/SiPrefixSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Controller/UnitSetupController.php | 8++++++--
Msrc/PartKeepr/SetupBundle/Services/ConfigSetupService.php | 14++++++++++++++
Asrc/PartKeepr/SetupBundle/Tests/ExistingUsersSetupTest.php | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17 files changed, 318 insertions(+), 95 deletions(-)

diff --git a/src/PartKeepr/CoreBundle/Tests/SetupWebTestCase.php b/src/PartKeepr/CoreBundle/Tests/SetupWebTestCase.php @@ -0,0 +1,53 @@ +<?php +/** + * Created by PhpStorm. + * User: felicitus + * Date: 10/9/15 + * Time: 7:43 PM + */ + +namespace PartKeepr\CoreBundle\Tests; + + +/** + * Special WebTestCase which forces to load the AppKernel. This is because the base getKernelClass() method + * does wildcard matching on *Kernel.php within the app/ directory, and on some systems it might happen that + * SetupAppKernel gets loaded first, causing unit tests to fail. + * + */ +class SetupWebTestCase extends WebTestCase +{ + + public function generateAndGetAuthKey() + { + $client = static::makeClient(); + + $client->request( + 'POST', + '/setup/generateAuthKey' + ); + + return $this->getContainer()->get("partkeepr.setup.config_service")->getAuthKey(); + } + + public function getConfiguration ($authKey) { + $client = static::makeClient(); + + $voidConfig = array( + "authKey" => $authKey, + "values" => array() + ); + $client->request( + 'POST', + '/setup/parseExistingConfig', + array(), + array(), + array(), + json_encode($voidConfig) + ); + + $responseObj = json_decode($client->getResponse()->getContent(), true); + + return $responseObj["config"]; + } +} diff --git a/src/PartKeepr/SetupBundle/Controller/AdminUserSetupController.php b/src/PartKeepr/SetupBundle/Controller/AdminUserSetupController.php @@ -6,7 +6,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class AdminUserSetupController extends SetupController +class AdminUserSetupController extends SetupBaseController { /** * @Route("/setup/createUser") @@ -25,6 +25,19 @@ class AdminUserSetupController extends SetupController */ public function intCreateUserAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + + $data = json_decode($request->getContent(), true); + if (!array_key_exists("authKey", $data) || !$this->verifyAuthKey($data["authKey"])) { + $response["success"] = false; + $response["message"] = "Invalid Authentication Key"; + $response["errors"] = array(); + + return new JsonResponse($response); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/CacheWarmupSetupController.php b/src/PartKeepr/SetupBundle/Controller/CacheWarmupSetupController.php @@ -9,13 +9,17 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class CacheWarmupSetupController extends SetupController +class CacheWarmupSetupController extends SetupBaseController { /** * @Route("/setup/_int_cache_warmup") */ - public function intCacheWarmupAction() + public function intCacheWarmupAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/ExistingConfigParserController.php b/src/PartKeepr/SetupBundle/Controller/ExistingConfigParserController.php @@ -5,22 +5,18 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; -class ExistingConfigParserController extends SetupController +class ExistingConfigParserController extends SetupBaseController { /** * @Route("/setup/parseExistingConfig") * @param Request $request + * * @return JsonResponse */ public function parseExistingConfigAction(Request $request) { - $data = json_decode($request->getContent(), true); - if (!array_key_exists("authKey", $data) || !$this->verifyAuthKey($data["authKey"])) { - $response["success"] = false; - $response["message"] = "Invalid Authentication Key"; - $response["errors"] = array(); - - return new JsonResponse($response); + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); } $response = array( diff --git a/src/PartKeepr/SetupBundle/Controller/ExistingUserSetupController.php b/src/PartKeepr/SetupBundle/Controller/ExistingUserSetupController.php @@ -6,7 +6,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -class ExistingUserSetupController extends SetupController +class ExistingUserSetupController extends SetupBaseController { /** * Checks if there are existing userds in the database @@ -14,6 +14,10 @@ class ExistingUserSetupController extends SetupController */ public function testExistingUsersAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $this->dumpConfig($request); $response = $this->handleRequest($request, "/setup/_int_test_existing_users"); @@ -24,11 +28,13 @@ class ExistingUserSetupController extends SetupController /** * @Route("/setup/_int_test_existing_users") */ - public function intTestExistingUsersAction() + public function intTestExistingUsersAction(Request $request) { - $repository = $this->getDoctrine()->getRepository("PartKeeprAuthBundle:User"); + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } - $legacyUsersDQL = "SELECT COUNT(u) FROM PartKeepr\AuthBundle\Entity\User u WHERE u.legacy = 1"; + $legacyUsersDQL = "SELECT COUNT(u) FROM PartKeepr\AuthBundle\Entity\User u WHERE u.legacy = true"; $legacyUsersQuery = $this->get("doctrine.orm.default_entity_manager")->createQuery($legacyUsersDQL); diff --git a/src/PartKeepr/SetupBundle/Controller/FileMigrationController.php b/src/PartKeepr/SetupBundle/Controller/FileMigrationController.php @@ -6,7 +6,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -class FileMigrationController extends SetupController +class FileMigrationController extends SetupBaseController { /** * Checks if there are existing userds in the database @@ -27,8 +27,12 @@ class FileMigrationController extends SetupController /** * @Route("/setup/_int_migrate_files_action") */ - public function intMigrateFilesAction() + public function intMigrateFilesAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/FootprintSetupController.php b/src/PartKeepr/SetupBundle/Controller/FootprintSetupController.php @@ -6,13 +6,17 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class FootprintSetupController extends SetupController +class FootprintSetupController extends SetupBaseController { /** * @Route("/setup/_int_create_footprints") */ - public function intCreateFootprints() + public function intCreateFootprints(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/ManufacturerSetupController.php b/src/PartKeepr/SetupBundle/Controller/ManufacturerSetupController.php @@ -8,13 +8,17 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class ManufacturerSetupController extends SetupController +class ManufacturerSetupController extends SetupBaseController { /** * @Route("/setup/_int_create_manufacturers") */ - public function intCreateManufacturersAction() + public function intCreateManufacturersAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/PartUnitSetupController.php b/src/PartKeepr/SetupBundle/Controller/PartUnitSetupController.php @@ -6,7 +6,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class PartUnitSetupController extends SetupController +class PartUnitSetupController extends SetupBaseController { /** * @Route("/setup/createPartUnits") @@ -23,8 +23,12 @@ class PartUnitSetupController extends SetupController /** * @Route("/setup/_int_create_part_units") */ - public function intCreatePartUnitsAction() + public function intCreatePartUnitsAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/SchemaMigrationSetupController.php b/src/PartKeepr/SetupBundle/Controller/SchemaMigrationSetupController.php @@ -9,13 +9,17 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class SchemaMigrationSetupController extends SetupController +class SchemaMigrationSetupController extends SetupBaseController { /** * @Route("/setup/_int_migrate_schema") */ - public function intMigrateSchemaAction() + public function intMigrateSchemaAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/SchemaSetupController.php b/src/PartKeepr/SetupBundle/Controller/SchemaSetupController.php @@ -7,13 +7,17 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class SchemaSetupController extends SetupController +class SchemaSetupController extends SetupBaseController { /** * @Route("/setup/_int_setup_schema") */ - public function intSetupSchemaAction() + public function intSetupSchemaAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/SetupBaseController.php b/src/PartKeepr/SetupBundle/Controller/SetupBaseController.php @@ -0,0 +1,91 @@ +<?php +namespace PartKeepr\SetupBundle\Controller; + +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + +class SetupBaseController extends Controller +{ + /** + * Handles the given request by setting up a setup_test environment. + * + * @param Request $request + * @param $uri + * @param array $parameters + * @param string $environment + * + * @return JsonResponse|\Symfony\Component\HttpFoundation\Response + */ + protected function handleRequest(Request $request, $uri, $parameters = array(), $environment = "setup_test") + { + $data = json_decode($request->getContent(), true); + if (!array_key_exists("authKey", $data) || !$this->verifyAuthKey($data["authKey"])) { + $response["success"] = false; + $response["message"] = "Invalid Authentication Key"; + $response["errors"] = array(); + + return new JsonResponse($response); + } + + $parameters["authKey"] = $data["authKey"]; + + try { + $kernel = new \AppKernel($environment, true); + + $internalRequest = Request::create($uri, "GET", $parameters); + + return $kernel->handle($internalRequest); + } catch (\Exception $e) { + $response["success"] = false; + $response["message"] = "Generic Error"; + $response["errors"] = [$e->getMessage()]; + + return new JsonResponse($response); + } + } + + protected function ensureAuthKey (Request $request) { + $data = json_decode($request->getContent(), true); + + if (!is_array($data) || !array_key_exists("authKey", $data) || !$this->verifyAuthKey($data["authKey"])) { + if ($request->query->has("authKey") && $this->verifyAuthKey($request->query->get("authKey"))) { + return true; + } + + return false; + } else { + return true; + } + } + + protected function getAuthKeyErrorResponse () { + $response["success"] = false; + $response["message"] = "Invalid Authentication Key"; + $response["errors"] = array(); + + return new JsonResponse($response); + } + + protected function verifyAuthKey($givenKey) + { + $key = $this->get("partkeepr.setup.config_service")->getAuthKey(); + + if ($key === $givenKey) { + return true; + } + + return false; + } + + protected function dumpConfig(Request $request, $test = true) + { + $data = json_decode($request->getContent(), true); + + $configService = $this->get("partkeepr.setup.config_service"); + + $config = $configService->getConfig($data["values"]); + + file_put_contents($configService->getConfigPath($test), $config); + } +} diff --git a/src/PartKeepr/SetupBundle/Controller/SetupController.php b/src/PartKeepr/SetupBundle/Controller/SetupController.php @@ -2,20 +2,22 @@ namespace PartKeepr\SetupBundle\Controller; use Doctrine\DBAL\Exception\DriverException; -use PartKeepr\SetupBundle\Services\ConfigSetupService; -use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class SetupController extends Controller +class SetupController extends SetupBaseController { /** * @Route("/setup/_int_test_connectivity") */ - public function intTestConnectivityAction() + public function intTestConnectivityAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], @@ -99,68 +101,9 @@ class SetupController extends Controller ); $contents = $this->container->get('templating')->render('PartKeeprSetupBundle::authkey.php.twig', $parameters); - file_put_contents($this->getAuthKeyPath(), $contents); + file_put_contents($this->get("partkeepr.setup.config_service")->getAuthKeyPath(), $contents); return new JsonResponse($response); } - - protected function handleRequest(Request $request, $uri, $parameters = array(), $environment = "setup_test") - { - $data = json_decode($request->getContent(), true); - if (!array_key_exists("authKey", $data) || !$this->verifyAuthKey($data["authKey"])) { - $response["success"] = false; - $response["message"] = "Invalid Authentication Key"; - $response["errors"] = array(); - - return new JsonResponse($response); - } - - try { - $kernel = new \AppKernel($environment, true); - $internalRequest = Request::create($uri, "GET", $parameters); - - return $kernel->handle($internalRequest); - } catch (\Exception $e) { - $response["success"] = false; - $response["message"] = "Generic Error"; - $response["errors"] = [$e->getMessage()]; - - return new JsonResponse($response); - } - } - - protected function verifyAuthKey($givenKey) - { - $findText = "Your auth key is: "; - - $data = file_get_contents($this->getAuthKeyPath()); - $position = strpos($data, $findText); - - $key = substr($data, $position + strlen($findText), ConfigSetupService::KEY_LENGTH); - - if ($key === $givenKey) { - return true; - } - - return false; - } - - protected function dumpConfig(Request $request, $test = true) - { - $data = json_decode($request->getContent(), true); - - $configService = $this->get("partkeepr.setup.config_service"); - - $config = $configService->getConfig($data["values"]); - - file_put_contents($configService->getConfigPath($test), $config); - } - - private function getAuthKeyPath() - { - return dirname(__FILE__)."/../../../../app/authkey.php"; - } - - } diff --git a/src/PartKeepr/SetupBundle/Controller/SiPrefixSetupController.php b/src/PartKeepr/SetupBundle/Controller/SiPrefixSetupController.php @@ -10,13 +10,17 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class SiPrefixSetupController extends SetupController +class SiPrefixSetupController extends SetupBaseController { /** * @Route("/setup/_int_create_si_prefixes") */ - public function intCreateSiPrefixes() + public function intCreateSiPrefixes(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Controller/UnitSetupController.php b/src/PartKeepr/SetupBundle/Controller/UnitSetupController.php @@ -8,13 +8,17 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -class UnitSetupController extends SetupController +class UnitSetupController extends SetupBaseController { /** * @Route("/setup/_int_create_units") */ - public function intCreateUnitsAction() + public function intCreateUnitsAction(Request $request) { + if (!$this->ensureAuthKey($request)) { + return $this->getAuthKeyErrorResponse(); + } + $response = array( "success" => true, "errors" => [], diff --git a/src/PartKeepr/SetupBundle/Services/ConfigSetupService.php b/src/PartKeepr/SetupBundle/Services/ConfigSetupService.php @@ -178,4 +178,18 @@ class ConfigSetupService return $secret; } + + public function getAuthKey () { + $findText = "Your auth key is: "; + + $data = file_get_contents($this->getAuthKeyPath()); + $position = strpos($data, $findText); + + return substr($data, $position + strlen($findText), ConfigSetupService::KEY_LENGTH); + } + + public function getAuthKeyPath() + { + return dirname(__FILE__)."/../../../../app/authkey.php"; + } } diff --git a/src/PartKeepr/SetupBundle/Tests/ExistingUsersSetupTest.php b/src/PartKeepr/SetupBundle/Tests/ExistingUsersSetupTest.php @@ -0,0 +1,71 @@ +<?php +namespace PartKeepr\SetupBundle\Tests; + +use PartKeepr\CoreBundle\Tests\SetupWebTestCase; + +class ExistingUsersSetupTest extends SetupWebTestCase +{ + public function setUp() + { + $this->loadFixtures(array()); + } + + + public function testExistingUsers() + { + $this->markTestSkipped("Setup tests requires setup refactoring, skipping"); + $authKey = $this->generateAndGetAuthKey(); + $configuration = $this->getConfiguration($authKey); + + $client = static::makeClient(); + + $parameters = array(); + + // First test: Ensure invalid auth key is returned + $client->request( + 'GET', + '/setup/testExistingUsers', + array(), + array(), + array(), + json_encode($parameters) + ); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + $data = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey("success", $data); + $this->assertArrayHasKey("errors", $data); + $this->assertArrayHasKey("message", $data); + + $this->assertFalse($data["success"]); + $this->assertEquals("Invalid Authentication Key", $data["message"]); + + $parameters["authKey"] = $authKey; + $parameters["values"] = $configuration; + + $client->request( + 'GET', + '/setup/testExistingUsers', + array(), + array(), + array(), + json_encode($parameters) + ); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent(), true); + + $this->assertArrayHasKey("success", $data); + $this->assertArrayHasKey("legacyUsers", $data); + $this->assertArrayHasKey("totalUsers", $data); + $this->assertArrayHasKey("errors", $data); + $this->assertArrayHasKey("message", $data); + + $this->assertTrue($data["success"]); + $this->assertEquals(0, $data["legacyUsers"]); + $this->assertEquals(0, $data["totalUsers"]); + $this->assertEquals(0, count($data["errors"])); + } +}