プロジェクト

全般

プロフィール

SOAPサーバ機能・API

SympaでSOAPのAPIを利用してリストの操作を行いたい場合、組み込みのSOAPサーバを利用することが可能。

ただし、これで通常のWebUIやsympaコマンドに比べて運用が劇的にやりやすくなるわけではない。
「WebUIでの操作では手間が掛かる」かつ「SSHでの操作を行いたくない」といった場合に「perlやpython
のプラグラミングであれば惜しまず労力を傾けることができる」という(どうしてもの)場合にのみ有効です。

エラー処理なども含めてプログラム側に実装する必要があるなど「新たにクライアントを作る」というレベルに
なってくるので、基本的に「あらゆる手を尽くしたがSOAPでなければ解決できない」という場合を除いてはSSH
越しのsympaコマンドでスクリプトを組むなどした方がお勧めです。

準備

  • 次の必要パッケージを追加導入します。
    # dnf install perl-SOAP-Lite
    
  • SOAP用のWDSLファイル(WebAPI用の定義ファイル)と、クライアントの信頼設定ファイルをコピーしてきます。
    (仮想ドメインがなければ/etc/sympa以下にあればよいとします)
    # cp -p /etc/sympa/sympa.wsdl /etc/sympa/ドメイン
    # cp -p /usr/share/doc/sympa/samples/trusted_applications.conf /etc/sympa/ドメイン/
    

クライアントの信頼設定を作成

  • 次のコマンドでクライアントの認証のためのdigest文字列を作成します
    # sympa.pl --md5_digest=パスワード
    
  • 表示される「md5 digest : 文字列」の文字列部分をコピーします。
  • コピーした「trusted_applications.conf」で次の項目を設定します。
    # vi /etc/sympa/ドメイン/trusted_applications.conf
    ----------------------------------------
    trusted_application
      # name of the trusted application. This is the appname soap element
      name アプリ名
      #
      md5password 先ほどのdigest文字列
      # The md5 digest of the application pasword.
      # You can get it with 'sympa md5_digest <the password>'.
      #
      proxy_for_variables USER_EMAIL ←USER_EMAIL属性のみ使用するのでこれだけにします
      # the comma separated list of vars the trusted application can set. 
    

wwsympaに関する設定

  • 「sympa.conf」または仮想ドメイン使用時の「robot.conf」にあるWebサーバ設定「wwsympa_url」
    の下にSOAPサーバ設定「sympasoap」に関する設定を行います。
    wwsympa_url     https://ドメイン名/sympa
    soap_url        https://ドメイン名/sympasoap
    
  • Apacheのsympa設定ファイルにおいてデフォルトではコメントアウトされているSOAPサーバの
    設定を有効化し、「Require」による公開範囲を調整します。
    # vi /etc/httpd/conf.d/sympa.conf
    ----------------------------------------
    #    # You may uncomment following lines to enable SympaSOAP
    feature.
        <Location /sympasoap>
            SetHandler
    "proxy:unix:/var/run/sympa/sympasoap.socket|fcgi://localhost" 
            # Don't forget to edit lines below!
            #Require local
            Require all granted
        </Location>
    
    • もし古いパッケージ内容で「SetHandler」の最後が「sympasoap.socket|fcgi://」で終わっている場合、
      上記例のように「sympasoap.socket|fcgi://localhost」となるよう「localhost」を足してください。

設定の反映と新たな起動設定

  • 既存サービスで設定変更の影響を受けるものを再起動します
    # systemctl restart sympa wwsympa httpd
    
  • あらたにSOAPサービスを起動登録します
    # systemctl enable --now sympasoap
    
    • なおsympasoapサービスはwwsympaサービスのように停止の際は「sympasoap.socket」を停止する必要があります。

コマンドベースのテスト

  • アプリケーション名を仮定したテストコマンド「sympa test soap」コマンドを使用します。
    # sympa test soap \
     --service=info \
     --trusted_application=nameの文字列 \
     --trusted_application_password='digest元のパスワード' \
     --proxy_vars='USER_EMAIL=リストマスターのアドレス' \
     --service_parameters='リスト名' \
     https://ドメイン名/sympasoap
    
  • 上記「info」に基づいたリスト情報が表示されれば問題ありません。

プログラムベースのテスト

  • 例としてコミュニティのリファレンスに記載されているperlプログラムをベースとします。
    https://www.sympa.community/manual/customize/soap-api.html#trust-remote-applications
    # vi myTestApp.pl
    ---
    #!/usr/bin/perl
    #
    use SOAP::Lite;
    
    my $soap = SOAP::Lite->new();
    $soap->uri('urn:sympasoap');
    $soap->proxy('https://ドメイン/sympasoap');
    
    my $response = $soap->authenticateRemoteAppAndRun(
        'アプリ名',
        'パスワード',
        'USER_EMAIL=リストマスターのアドレス',
        'add',
        ['リスト名','読者アドレス','名前',通知フラグ]
    );
    ---
    
  • この簡易プログラムでは前述の「info」の結果を出力する実装をしていないので、「add」で
    テスト用のアドレスをリストに追加する形とします。
  • 実行可能属性を付与し、プログラムを実行します
    # chmod a+x myTestApp.pl
    # ./myTestApp.pl
    
  • 実行結果を表示する機能を実装していないので、実行後は別途リストを確認します。
    追加されていれば正しくクライアントの信頼とSOAP-APIは実行されています。

更に作り込む際は、下記のリファレンスに基づいたコーディングが必要です。
https://www.sympa.community/manual/customize/soap-api.html#sympa-soap-services-and-the-command-line-tool