itk-dev / beskedfordeler-drupal
Drupal 的 Beskedfordeler
Requires
- drush/drush: ^11 || ^12
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.1
- drupal/coder: ^8.3
- mglaman/drupal-check: ^1.4
- phpunit/phpunit: ^9.5
- wsdltophp/packagegenerator: ^4.0
README
Drupal 的 Beskedfordeler。
https://digitaliseringskataloget.dk/kom-godt-i-gang-vejledninger » “Kom godt i gang med” » “Fælleskommunal Beskedfordeler” (https://docs.kombit.dk/latest/ba48e791)
https://digitaliseringskataloget.dk/kom-godt-i-gang-vejledninger » “Kom godt i gang med” » “Certifikater” (https://docs.kombit.dk/latest/81fa3a9e)
安装
composer require itk-dev/beskedfordeler drush pm:enable beskedfordeler
安装该模块将启用一个 beskedfordeler/PostStatusBeskedModtag
端点,Beskedfordeler 可以向其发送消息。有关如何使用端点的详细信息,请参阅“Fælleskommunal Beskedfordeler”。
客户端证书
从 https://digitaliseringskataloget.dk/teknik/certifikater 下载根证书。
出于测试目的,可以使用自签名证书。有关详细信息,请参阅 https://dev.to/darshitpp/how-to-implement-two-way-ssl-with-nginx-2g39#creating-certificates 并按照以下方式发送请求
curl --location --data '<e/>' --header 'content-type: application/xml' …/beskedfordeler/PostStatusBeskedModtag --cert user.pfx --cert-type P12
nginx 配置
Beskedfordeler 需要 "相互 TLS"(参照 https://docs.kombit.dk/latest/81fa3a9e),我们需要一些特殊的 nginx
技巧才能仅在 Beskedfordeler 路由上使其工作(参照 https://serverfault.com/a/1068211)。
server { … # Enables mutual TLS/two way SSL to verify the client # We use `optional` (rather than `on`) to be able to require this only on the Beskedfordeler routes (cf. <https://serverfault.com/a/1068211>). ssl_verify_client optional; ssl_client_certificate …/trusted_ca.pem; # We may be redirected to to a path with a language prefix and therefore we check if end of location match the Beskedfordeler route. location ~ /beskedfordeler/PostStatusBeskedModtag$ { @see https://serverfault.com/a/1068211 if ($ssl_client_verify != "SUCCESS") { return 403; } # Pass the request on to Drupal rewrite ^/(.*)$ /index.php?q=$1 last; } … location ~ '\.php$|^/update.php' { … # Include ssl info for debugging (cf. https://serverfault.com/a/1068211) fastcgi_param SSL_CLIENT_VERIFY $ssl_client_verify; fastcgi_param SSL_CLIENT_S_DN $ssl_client_s_dn; fastcgi_param SSL_CLIENT_I_DN $ssl_client_i_dn; fastcgi_param SSL_PROTOCOL $ssl_protocol; fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial; fastcgi_param SSL_CLIENT_V_END $ssl_client_v_end; fastcgi_param SSL_CLIENT_V_REMAIN $ssl_client_v_remain; fastcgi_param SSL_CLIENT_FINGERPRINT $ssl_client_fingerprint; … } }
事件订阅者
必须创建一个事件订阅者,以便在从 Beskedfordeler 接收消息时执行一些有用的操作。
<?php # my_module/src/EventSubscriber/BeskedfordelerEventSubscriber.php; namespace Drupal\my_module\EventSubscriber; use Drupal\beskedfordeler\Event\PostStatusBeskedModtagEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class BeskedfordelerEventSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ PostStatusBeskedModtagEvent::class => 'postStatusBeskedModtag', ]; } public function postStatusBeskedModtag(PostStatusBeskedModtagEvent $event): void { // Do something with the event. } }
# my_module/my_module.services.yml services: Drupal\my_module\EventSubscriber\BeskedfordelerEventSubscriber: tags: - { name: 'event_subscriber' }
转发消息
可以使用 Beskedfordeler forward 模块 来转发在 beskedfordeler/PostStatusBeskedModtag
端点接收到的消息。有关模块的详细信息,请参阅 <modules/beskedfordeler_forward/README.md>。
将消息存储在数据库中
可以使用 Beskedfordeler 数据库 将在 beskedfordeler/PostStatusBeskedModtag
端点接收到的消息存储在数据库中。有关模块的详细信息,请参阅 <modules/beskedfordeler_database/README.md>。
测试
curl --data '<e/>' --header 'content-type: application/xml' …/beskedfordeler/PostStatusBeskedModtag
编码标准
所有编码标准在提交拉取请求时都通过 GitHub Actions 进行检查(参照 pr.yaml)。
检查编码标准
docker run --rm --interactive --tty --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer install docker run --rm --interactive --tty --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-check docker run --rm --interactive --tty --volume ${PWD}:/app node:18 yarn --cwd /app install docker run --rm --interactive --tty --volume ${PWD}:/app node:18 yarn --cwd /app coding-standards-check
应用编码标准
docker run --rm --interactive --tty --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-apply docker run --rm --interactive --tty --volume ${PWD}:/app node:18 yarn --cwd /app coding-standards-apply