Skip to content

itk-dev/serviceplatformen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Serviceplatformen

Library for interacting with services on Serviceplatformen.

Supported services

Updating resources and classes

We use WsdlToPhp/PackageGenerator to generate PHP classes for talking to SOAP services. To update resources and generated classes, run

docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer install
# Update WSDL resources.
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/generate resources
# Generate PHP classes from WSDL resources.
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/generate classes

Test commands

docker run --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest vendor/bin/serviceplatformen-sf1601-kombipostafsend --help

Use bin/serviceplatformen-sf1601-kombipostafsend (symlinked to bin/SF1601/kombipostafsend) during development of this library. i.e.

docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/serviceplatformen-sf1601-kombipostafsend
docker run --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest vendor/bin/serviceplatformen-sf1601-postforespoerg --help
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/serviceplatformen-sf1601-postforespoerg

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

Prerequisites

  • Git 2.25 or above.
  • PHP 7.3 or above.
  • Composer 1.9 or above.

Installing

Clone the repository:

git clone https://github.com/itk-dev/serviceplatformen

Install the dependencies:

cd serviceplatformen

composer install

Running the tests

Unit tests:

docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer tests/unit

End to end tests:

docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer tests/end-to-end

And coding style tests

PHP_CodeSniffer

composer coding-standards-check/phpcs

PHP-CS-Fixer

composer coding-standards-check/php-cs-fixer

Static code analysis

Phan

composer static-code-analysis/phan

Deployment

composer require itk-dev/serviceplatformen

Usage

Certificate stored on local filesystem

<?php

require_once 'vendor/autoload.php';

use ItkDev\Serviceplatformen\Certificate\FilesystemCertificateLocator;
use ItkDev\Serviceplatformen\Request\InvocationContextRequestGenerator;
use ItkDev\Serviceplatformen\Service\PersonBaseDataExtendedService;

$certificateLocator = new FilesystemCertificateLocator(__DIR__.'path_to_certificate.pem', 'passphrase if any');

$pathToWsdl = __DIR__.'/resources/person-base-data-extended-service-contract/wsdl/context/PersonBaseDataExtendedService.wsdl';

$options = [
    'local_cert' => $certificateLocator->getAbsolutePathToCertificate(),
    'passphrase' => $certificateLocator->getPassphrase(),
    'location' => 'https://url.to.service.endpoint'
];

$soapClient = new SoapClient($pathToWsdl, $options);

$requestGenerator = new InvocationContextRequestGenerator(
    'xxxx', // Service agreement UUID
    'xxxx', // User system UUID
    'xxxx', // Service UUID
    'xxxx' // User UUID
);

$service = new PersonBaseDataExtendedService($soapClient, $requestGenerator);

$response = $service->personLookup('1234567891');

var_dump($response);

Certificate stored in Azure Key Vault

See Storing certificates in the vault for details on storing a certificate in the Azure Key Vault.

<?php

require_once 'vendor/autoload.php';

use ItkDev\AzureKeyVault\Authorisation\VaultToken;
use ItkDev\AzureKeyVault\KeyVault\VaultSecret;
use ItkDev\Serviceplatformen\Certificate\AzureKeyVaultCertificateLocator;
use ItkDev\Serviceplatformen\Request\InvocationContextRequestGenerator;
use ItkDev\Serviceplatformen\Service\PersonBaseDataExtendedService;

$vaultToken = new VaultToken(
    $httpClient, // PSR-18 compatible http client
    $requestFactory // PSR-17 compatible request factory
);

$token = $vaultToken->getToken(
    'xxxx', // Azure tenant id
    'xxxx', // Client id (azure application id)
    'xxxx' // Client secret
);

$vault = new VaultSecret(
    $httpClient, // PSR-18 compatible http client
    $requestFactory, // PSR-17 compatible request factory
    'testVault', // Name of vault
    $token->getAccessToken()
);

$certificateLocator = new AzureKeyVaultCertificateLocator(
    $vault,
    'xxxx', // Name of the certificate
    'xxxx', // Version of the certificate
    'yyyy' // optional passphrase for the certificate
);

$pathToWsdl = __DIR__.'/resources/person-base-data-extended-service-contract/wsdl/context/PersonBaseDataExtendedService.wsdl';

$options = [
    'local_cert' => $certificateLocator->getAbsolutePathToCertificate(),
    'passphrase' => $certificateLocator->getPassphrase(),
    'location' => 'https://url.to.service.endpoint'
];

$soapClient = new SoapClient($pathToWsdl, $options);

$requestGenerator = new InvocationContextRequestGenerator(
    'xxxx', // Service agreement UUID
    'xxxx', // User system UUID
    'xxxx', // Service UUID
    'xxxx' // User UUID
);

$service = new PersonBaseDataExtendedService($soapClient, $requestGenerator);

$response = $service->personLookup('1234567891');

var_dump($response);

Contributing

Pull Request Process

Before creating a pull request make sure you have considered the following:

  • Updating the README.md with details of changes that are relevant.
  • Updating the CHANGELOG.md with new features/changes/bug fixes etc.

You may merge the Pull Request in once you have the sign-off of one other developer, or if you do not have permission to do that, you may request the reviewer to merge it for you.

Coding standards

docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer install
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-apply
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-check
docker run --rm --volume ${PWD}:/md peterdavehello/markdownlint markdownlint --ignore vendor --ignore LICENSE.md '**/*.md' --fix
docker run --rm --volume ${PWD}:/md peterdavehello/markdownlint markdownlint --ignore vendor --ignore LICENSE.md '**/*.md'

Code analysis

docker run --interactive --tty --rm --volume ${PWD}:/app --env COMPOSER_MEMORY_LIMIT=-1 itkdev/php8.1-fpm:latest composer code-analysis

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

License

This project is licensed under the MIT License - see the LICENSE.md file for details