diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a11af76 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at https://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.bat] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..51f3ea4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,36 @@ +# Define the line ending behavior of the different file extensions +# Set the default behavior, in case people don't have core.autocrlf set. +* text text=auto eol=lf + +*.php diff=php + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.gif binary +*.jpeg binary +*.zip binary +*.phar binary +*.ttf binary +*.woff binary +*.woff2 binary +*.eot binary +*.ico binary +*.mo binary +*.pdf binary +*.xsd binary +*.exe binary + +# Remove files for archives generated using `git archive` +dependency.json export-ignore +phpstan.json export-ignore +phpstan.neon export-ignore +psalm-report.json export-ignore linguist-generated=true +tooling.yml export-ignore +.coveralls.yml export-ignore +.travis.yml export-ignore +.editorconfig export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.github/ export-ignore +architecture-baseline.json export-ignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..99d049b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,61 @@ +name: CI + +on: + push: + branches: + - 'master' + pull_request: + workflow_dispatch: + +jobs: + validation: + name: Validation + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + extensions: mbstring, intl, bcmath + coverage: none + + - name: Composer Install + run: composer install --prefer-dist --no-interaction --profile + + - name: Run validation + run: composer validate + + - name: Syntax check + run: find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) + + - name: Run CodeStyle checks + run: composer cs-check + + - name: PHPStan setup + run: composer stan-setup + + - name: Run PHPStan + run: composer stan + + lowest: + name: Prefer Lowest + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.1' + extensions: mbstring, intl, bcmath + coverage: none + + - name: Composer Install + run: composer install --prefer-dist --no-interaction --profile + + - name: Composer Update + run: composer update --prefer-lowest --prefer-dist --no-interaction --profile -vvv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58b3e11 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# IDE +.idea/ +.project/ +nbproject/ +.buildpath/ +.settings/ +*.sublime-* + +# OS +.DS_Store +*.AppleDouble +*.AppleDB +*.AppleDesktop + +# grunt stuff +.grunt +.sass-cache +/node_modules/ + +# tooling +vendor/ +composer.lock +.phpunit.result.cache + +# built client resources +src/*/Zed/*/Static/Public +src/*/Zed/*/Static/Assets/sprite + +# Propel classes +src/*/Zed/*/Persistence/Propel/Base/* +src/*/Zed/*/Persistence/Propel/Map/* + +# tests +tests/**/_generated/ +tests/_output/* +!tests/_output/.gitkeep diff --git a/.license b/.license new file mode 100644 index 0000000..cf29a25 --- /dev/null +++ b/.license @@ -0,0 +1,4 @@ +/** + * MIT License + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..740e64b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# AmazonQuicksight Changelog + +[Release Changelog](https://github.com/spryker-eco/amazon-quicksight/releases) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d376fd6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,40 @@ +SPRYKER SYSTEMS GMBH EVALUATION LICENSE AGREEMENT + +SPRYKER SYSTEMS GMBH, REGISTERED WITH THE COMMERCIAL REGISTER OF THE LOWER COURT OF HAMBURG UNDER HRB 134310 +(“WE” OR ”SPRYKER”)GRANTS YOU (THE “LICENSEE”) THE RIGHT TO USE THE SOFTWARE (AS DEFINED BELOW) +UNDER THE PROVISIONS OF THIS EVALUATION LICENSE AGREEMENT (THE “AGREEMENT”). + +The “Software” includes any software owned and distributed by Spryker under this Agreement. The Software +contains elements of open source components, to which different license terms apply respectively. +These open source components are needed to be installed separately. + +Spryker grants to Licensee, during the 45-calendar-day period (the “Evaluation Period”) following the download of the Software, +the nontransferable, nonexclusive limited, free of charge license to permit Licensee’s employees to internally use the Software +to test and evaluate the Software in connection with potentially purchasing non-evaluation licenses to the Software. + +Licensee shall not (i) use the Software to set up a productive live system, for development purposes or any other purposes apart +from evaluating the Software; (ii) copy any part of the Software except to make one copy for back-up purposes; (iii) distribute, +disclose, market, rent, lease, or transfer the Software or act as a service bureau with respect to the Software; (iv) export the +Software or install it in multiple locations; (v) disclose any confidential information provided by Spryker; (vi) modify or make +derivative works of the Software; or (vii) allow others to make or obtain copies of the Software. + +THE SOFTWARE IS PROVIDED “AS-IS” AND WITHOUT WARRANTY OF ANY KIND. SPRYKER DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. SPRYKER WILL NOT +BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH THE SOFTWARE, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL +DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST PROFITS, EVEN IF SPRYKER HAS BEEN ADVISED OF +THE POSSIBILITY OF SUCH DAMAGES. + +Licensee's license to use the Software shall terminate on the earlier of (i) the expiration of the Evaluation Period, or (ii) the date +both parties enter into a definitive agreement for the provision by Spryker to Licensee of a non-evaluation license to the Software. +Upon termination of the license as provided above, Licensee shall promptly destroy the Software and any back-up copy of the Software +made during the Evaluation Period if Spryker and the Licensee have not agreed a non-evaluation license to the Software. + +This Agreement shall be governed by the laws of Germany to the exclusion of IPR (International Law) and the United Nations Convention +on Contracts for the International Sale of Goods (CISG). The parties consent to the jurisdiction of the courts in Berlin (Germany). + +This Agreement is not assignable or transferable by Licensee and any attempt to do so is null and void. + +This Agreement constitutes the entire agreement between the parties concerning Licensee’s use of the Software. This Agreement supersedes +any prior verbal understanding between the parties and any Licensee purchase order or other ordering document, regardless of whether such +document is received by Spryker before or after execution of this Agreement. This Agreement may be amended only in a writing signed by +an authorized officer of Spryker. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7d6d933 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# AmazonQuicksight Module +[![Latest Stable Version](https://poser.pugx.org/spryker-eco/amazon-quicksight/v/stable.svg)](https://packagist.org/packages/spryker-eco/amazon-quicksight) +[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.1-8892BF.svg)](https://php.net/) + +AmazonQuicksight module allows the Spryker project to connect to the Amazon QuickSight service. + +## Installation + +``` +composer require spryker-eco/amazon-quicksight +``` + +## Documentation + +[Spryker Documentation](https://docs.spryker.com) diff --git a/architecture-baseline.json b/architecture-baseline.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/architecture-baseline.json @@ -0,0 +1 @@ +[] diff --git a/codeception.yml b/codeception.yml new file mode 100644 index 0000000..3b8fdfc --- /dev/null +++ b/codeception.yml @@ -0,0 +1,14 @@ +namespace: AmazonQuicksight +include: + - tests/SprykerEcoTest/Zed/AmazonQuicksight +paths: + tests: tests/ + output: tests/_output/ + data: tests/_data/ + support: tests/_support/ + envs: tests/_envs/ +settings: + suite_class: \PHPUnit\Framework\TestSuite + colors: true + memory_limit: 1024M + log: true diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..cd38031 --- /dev/null +++ b/composer.json @@ -0,0 +1,45 @@ +{ + "name": "spryker-eco/amazon-quicksight", + "type": "library", + "description": "AmazonQuicksight module", + "license": "proprietary", + "require": { + "aws/aws-sdk-php": "^3.90.0", + "php": ">=8.1", + "spryker/kernel": "^3.30.0", + "spryker/user": "^3.0.0" + }, + "require-dev": { + "spryker/code-sniffer": "*", + "spryker/testify": "*" + }, + "autoload": { + "psr-4": { + "SprykerEco\\": "src/SprykerEco/" + } + }, + "autoload-dev": { + "psr-4": { + "SprykerEcoTest\\": "tests/SprykerEcoTest/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "cs-check": "phpcs -p -s --standard=vendor/spryker/code-sniffer/SprykerStrict/ruleset.xml src/ tests/", + "cs-fix": "phpcbf -p --standard=vendor/spryker/code-sniffer/SprykerStrict/ruleset.xml src/ tests/", + "stan": "phpstan analyse -c phpstan.neon -l 6 src/", + "stan-setup": "cp composer.json composer.backup && COMPOSER_MEMORY_LIMIT=-1 composer require --dev phpstan/phpstan:^0.12 && mv composer.backup composer.json" + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + } +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..3260382 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,6 @@ +parameters: + level: 8 + paths: + - src/ + excludePaths: + - src/SprykerEco/Zed/AmazonQuicksight/Persistence/Propel/Abstract*.php diff --git a/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php b/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php new file mode 100644 index 0000000..088f022 --- /dev/null +++ b/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + diff --git a/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php new file mode 100644 index 0000000..1e94c97 --- /dev/null +++ b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php @@ -0,0 +1,77 @@ +get(AmazonQuicksightConstants::AWS_ACCOUNT_ID); + } + + /** + * Specification: + * - Returns the namespace for the Quicksight user registration. + * + * @api + * + * @return string + */ + public function getQuicksightUserRegisterNamespace(): string + { + return static::QUICKSIGHT_USER_REGISTER_NAMESPACE; + } + + /** + * Specification: + * - Provides configuration for the Quicksight client. + * + * @link https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.AwsClient.html#method___construct + * + * @api + * + * @return array + */ + public function getQuicksightClientConfiguration(): array + { + $quicksightClientConfiguration = [ + 'region' => $this->get(AmazonQuicksightConstants::AWS_REGION), + ]; + + $awsCredentialsKey = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_KEY); + $awsCredentialsSecret = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_SECRET); + $awsCredentialsToken = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_TOKEN); + + if ($awsCredentialsKey && $awsCredentialsSecret && $awsCredentialsToken) { + $quicksightClientConfiguration['credentials'] = new Credentials( + $awsCredentialsKey, + $awsCredentialsSecret, + $awsCredentialsToken, + ); + } + + return $quicksightClientConfiguration; + } +} diff --git a/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php new file mode 100644 index 0000000..32ea401 --- /dev/null +++ b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php @@ -0,0 +1,52 @@ +addAwsQuicksightClient($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function addAwsQuicksightClient(Container $container): Container + { + $container->set(static::AWS_QUICKSIGHT_CLIENT, function () { + return new AmazonQuicksightToAwsQuicksightClientAdapter( + $this->getConfig()->getQuicksightClientConfiguration(), + ); + }); + + return $container; + } +} diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php b/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php new file mode 100644 index 0000000..07adc4a --- /dev/null +++ b/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php @@ -0,0 +1,19 @@ + $args + */ + public function __construct(array $args) + { + $this->quicksightClient = new QuickSightClient($args); + } + + /** + * @param array $registerUserRequestData + * + * @return \Aws\ResultInterface + */ + public function registerUser(array $registerUserRequestData): ResultInterface + { + return $this->quicksightClient->registerUser($registerUserRequestData); + } + + /** + * @param array $generateEmbedUrlRequestData + * + * @return \Aws\ResultInterface + */ + public function generateEmbedUrlForRegisteredUser(array $generateEmbedUrlRequestData): ResultInterface + { + return $this->quicksightClient->generateEmbedUrlForRegisteredUser($generateEmbedUrlRequestData); + } +} diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php b/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php new file mode 100644 index 0000000..55d64b9 --- /dev/null +++ b/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php @@ -0,0 +1,27 @@ + $registerUserRequestData + * + * @return \Aws\ResultInterface + */ + public function registerUser(array $registerUserRequestData): ResultInterface; + + /** + * @param array $generateEmbedUrlRequestData + * + * @return \Aws\ResultInterface + */ + public function generateEmbedUrlForRegisteredUser(array $generateEmbedUrlRequestData): ResultInterface; +} diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php b/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php new file mode 100644 index 0000000..1676134 --- /dev/null +++ b/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
diff --git a/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml b/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml new file mode 100644 index 0000000..e3d070b --- /dev/null +++ b/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml @@ -0,0 +1,12 @@ +namespace: SprykerEcoTest\Zed\AmazonQuicksight +paths: + tests: . + data: ../../../_data + support: _support + output: ../../../_output +coverage: + enabled: true + remote: false + whitelist: + include: + - '../../../../src/*' diff --git a/tooling.yml b/tooling.yml new file mode 100644 index 0000000..5849649 --- /dev/null +++ b/tooling.yml @@ -0,0 +1,4 @@ +architecture-sniffer: + priority: 2 +code-sniffer: + level: 2