itk-dev/beskedfordeler-drupal

Drupal 的 Beskedfordeler

安装次数: 3,926

依赖: 3

建议者: 0

安全: 0

星级: 0

关注者: 3

分支: 1

开放问题: 0

类型:drupal-module

1.2.0 2024-06-04 07:15 UTC

This package is auto-updated.

Last update: 2024-09-04 07:53:55 UTC


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