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」を足してください。
- もし古いパッケージ内容で「SetHandler」の最後が「sympasoap.socket|fcgi://」で終わっている場合、
設定の反映と新たな起動設定¶
- 既存サービスで設定変更の影響を受けるものを再起動します
# 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