diff --git a/docs/en/configuration.md b/docs/en/configuration.md index ca3bee1..434cfa6 100644 --- a/docs/en/configuration.md +++ b/docs/en/configuration.md @@ -150,7 +150,7 @@ environment. In this environment, RealMe provide all SSL certificates required t - Add a new line as line 1 of the file with the following: `-----BEGIN CERTIFICATE-----` - Add a new line as the last line of the file with the following: `-----END CERTIFICATE-----` - Ensure your `realme.yml` [configuration](docs/en/configuration.md) is complete (see above). -- Run the RealMe build task to validate your configuration and get the XML metadata to provide to MTS: `vendor/bin/sake dev/tasks/RealMeSetupTask forEnv=mts` +- Run the RealMe build task to validate your configuration and get the XML metadata to provide to MTS: `vendor/bin/sake tasks:RealMeSetupTask --forEnv=mts` - Save the XML output from the above task to an XML file, and upload this to MTS: - For a 'logon' integration, submit here: [MTS logon metadata upload](https://mtscloud.realme.govt.nz/Login/home). - For an 'assert' integration, submit here: [MTS assert metadata upload](https://mtscloud.realme.govt.nz/Assertion/home). @@ -232,7 +232,7 @@ To setup syncing, you **must** be using the `login` type of authentication and h on `Member` (or a subclass of it) and then tell the module to sync with the database via the following configuration in realme.yml. You can also include `login_member_after_authentication` which will automatically login a user (as a Silverstripe `Member` object) after successful RealMe authentication. - + ```yaml SilverStripe\Security\Member: extensions: @@ -243,7 +243,7 @@ SilverStripe\RealMe\RealMeService: login_member_after_authentication: true ``` -Run a `dev/build` to ensure the configuration changes are accounted for. +Run `sake db:build --flush` to ensure the configuration changes are accounted for. When a RealMe login completes with success, a new member will be synced based on the RealMe FLT. If no member matching the FLT is found, a new member will be created. _Note this is not supported for `assert`, as the FIT is transient (changes each diff --git a/src/Task/RealMeSetupTask.php b/src/Task/RealMeSetupTask.php index 7897da5..fcf2584 100644 --- a/src/Task/RealMeSetupTask.php +++ b/src/Task/RealMeSetupTask.php @@ -4,13 +4,15 @@ use Exception; -use SilverStripe\Control\HTTPRequest; -use SilverStripe\Core\Injector\Injector; use SilverStripe\Core\Manifest\ModuleLoader; use SilverStripe\RealMe\RealMeService; use SilverStripe\Control\Director; use SilverStripe\Control\Controller; use SilverStripe\Dev\BuildTask; +use SilverStripe\HybridExecution\HybridOutput; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; /** * Class RealMeSetupTask @@ -25,15 +27,16 @@ */ class RealMeSetupTask extends BuildTask { - private static $segment = 'RealMeSetupTask'; + protected static string $commandName = 'RealMeSetupTask'; private static $dependencies = [ 'Service' => '%$' . RealMeService::class, ]; - protected $title = "RealMe Setup Task"; + protected string $title = "RealMe Setup Task"; - protected $description = 'Validates a realme configuration & creates the resources needed to integrate with realme'; + protected static string $description = 'Validates a realme configuration & creates the resources ' + . 'needed to integrate with realme'; /** * @var RealMeService @@ -47,13 +50,14 @@ class RealMeSetupTask extends BuildTask */ private $errors = array(); + private HybridOutput $output; + /** * Run this setup task. See class phpdoc for the full description of what this does - * - * @param HTTPRequest $request */ - public function run($request) + protected function execute(InputInterface $input, HybridOutput $output): int { + $this->output = $output; try { // Ensure we are running on the command-line, and not running in a browser if (false === Director::is_cli()) { @@ -64,22 +68,37 @@ public function run($request) } // Validate all required values exist - $forEnv = $request->getVar('forEnv'); + $forEnv = $input->getOption('forEnv'); // Throws an exception if there was a problem with the config. $this->validateInputs($forEnv); $this->outputMetadataXmlContent($forEnv); - $this->message(PHP_EOL . _t( + $this->output->writeln(['', _t( RealMeSetupTask::class . '.BUILD_FINISH', 'RealMe setup complete. Please copy the XML into a file for upload to the {env} environment or DIA ' . 'to complete the integration', array('env' => $forEnv) - )); + )]); } catch (Exception $e) { - $this->message($e->getMessage() . PHP_EOL); + $this->output->writeln('' . $e->getMessage() . ''); + return Command::FAILURE; } + return Command::SUCCESS; + } + + public function getOptions(): array + { + return [ + new InputOption( + 'forEnv', + null, + InputOption::VALUE_REQUIRED, + 'The RealMe environment to set up', + suggestedValues: $this->service->getAllowedRealMeEnvironments() + ), + ]; } /** @@ -135,7 +154,7 @@ private function validateInputs($forEnv) )); } - $this->message(_t( + $this->output->writeln(_t( RealMeSetupTask::class . '.VALIDATION_SUCCESS', 'Validation succeeded, continuing with setup...' )); @@ -149,7 +168,7 @@ private function validateInputs($forEnv) private function outputMetadataXmlContent($forEnv) { // Output metadata XML so that it can be sent to RealMe via the agency - $this->message(_t( + $this->output->writeln(_t( RealMeSetupTask::class . '.OUPUT_PREFIX', 'Metadata XML is listed below for the \'{env}\' RealMe environment, this should be sent to the agency so ' . 'they can pass it on to RealMe Operations staff', @@ -181,7 +200,7 @@ private function outputMetadataXmlContent($forEnv) ) ); - $this->message($message); + $this->output->writeln($message); } /** @@ -223,16 +242,6 @@ private function getConfigurationTemplateDir() return $path . '/templates/saml-conf'; } - /** - * Output a message to the console - * @param string $message - * @return void - */ - private function message($message) - { - echo $message . PHP_EOL; - } - /** * Thin wrapper around is_readable(), used mainly so we can test this class completely * @@ -371,7 +380,7 @@ private function validateRealMeEnvironments($forEnv) $this->errors[] = _t( RealMeSetupTask::class . '.ERR_ENV_NOT_SPECIFIED', 'The RealMe environment was not specified on the cli It must be one of: {allowedEnvs} ' . - 'e.g. vendor/bin/sake dev/tasks/RealMeSetupTask forEnv=mts', + 'e.g. vendor/bin/sake tasks:RealMeSetupTask --forEnv=mts', array( 'allowedEnvs' => join(', ', $allowedEnvs) )