国産IDaaS Exticを使ってみる 10. CSV出力 / CSVインポートAPI

[前回](https://qiita.com/ahra_/items/544c5218e287d89dbe21)の続きです。
# CSV出力とは
Exticのユーザー情報を指定した形式でCSV化し、ローカルディスク上に保存するためのWebアプリケーションです。
## 設定
### 事前準備
管理コンソール > アプリケーションから「CSV(オンプレミス)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/8fa66d0c-753d-4c3f-6d10-c922908c73d4.png)
表示名を設定し、接続キーを発行して保存します。
![スクリーンショット 2025-01-07 140839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/9bda76a9-0406-0754-c667-8a9cff80b37f.png)
### Webアプリケーションの設定
`csvagent.war`をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/79eb3861-c620-8727-4119-e60f0d25bc15.png)
`<tomcat_home>\webapps\`以下にコピーしてデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/a79fa143-1826-2ba1-128d-de3985da847e.png)
`<tomcat_home>\webapps\csvagent\WEB-INF\classes\META-INF\application_setting.properties`を開きます。
サブドメイン、接続キー、SQLiteのディレクトリを指定して保存、Tomcatを再起動します。
![スクリーンショット 2025-01-07 142013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/802b6a97-e1cc-990a-1d98-a2c1aaeb5e78.png)
`http://(ホスト名):(ポート番号)/csvagent/`にアクセスし、管理者ロールを持つユーザーでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/642a17a1-daed-7eea-02c3-0210e51b891a.png)
次の画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ab4ee1ca-c4de-0112-1cef-775ecf951e90.png)
右上プルダウンメニューから「設定」を選択します。
「CSV出力設定」では、出力先とモード（上書き/リネーム）、区切り文字などの出力ファイルに関する設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/84d602fb-5885-ad0f-4b29-c36e6893c432.png)
「ユーザーマッピング設定」ではExticの属性とCSVの項目名のマッピングを行います。
今回はこのようにしました。パスワードはハッシュ（SHA256もしくは512）、暗号化文字列、平文で出力できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f0321dc9-5b66-722e-2e2f-43a678a9bc3e.png)

「後続処理実行機能」ではCSVの出力後に実行ファイルを実行することができます。引数として出力したCSVファイルを指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b48ce47e-b0c5-1688-a1ec-86bf4a4b4b87.png)
最後にポーリング間隔と開始時間、自動起動の設定を行って完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7c926057-32cc-f606-4681-667043abad31.png)
## 確認
対象ユーザーのアプリケーション設定にて「使用する」設定にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/5fc16f6b-a6bb-3026-bef1-8981432d9f24.png)
アプリケーションを起動します。
まずは`ChangeType=ADD`でCSVファイルが作成されます。
![スクリーンショット 2025-01-07 145827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/33373cd6-aaca-80cc-0c3b-0ae32c83aac0.png)
ユーザー情報を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/c6afd45d-cf93-9cfd-87f8-0b47e01e6dcb.png)
設定の通り、ファイルがリネームされる形で`ChangeType=MOD`という行を持つCSVファイルが作成されます。
![スクリーンショット 2025-01-07 150102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/934ba36d-3994-21c1-d2e7-8f42cf21814a.png)
アプリケーションを「使用しない」設定にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ea8a9fed-0011-a845-6369-225356e7f5ec.png)
設定の通り、項目`username`のみが記載された`ChangeType=DEL`のCSVファイルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b30a044f-6199-f252-9562-760056d3858b.png)
# CSVインポートAPIとは
CSVファイルのインポート処理を行うAPIです。CSVファイル内の情報をAPIを介してExticに連携することが可能です。
## 実証
管理コンソール > 設定 > CSVインポートAPIより、任意のIDとパスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f0f6d7b3-b27a-5048-d1d6-d23c3585ab0c.png)
入力元となるCSVファイルを作成します。CSVエクスポート機能などを使用してテンプレートとなるCSVを入手しましょう。
今回は既存のユーザーにメールアドレスを追加します。
`ChangeType`に`MOD`を指定し、該当のフィールドに値を書き込みます。
![スクリーンショット 2025-01-07 152515.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/1304d8ea-3156-c466-8c33-03f76cc5ca2a.png)
APIをコールします。
```
curl -X POST https://(テナント名).ex-tic.com/idm/api/1.3/operation/importCsv -H "Authorization:Basic <ID:パスワード の形式で連結した文字をBase64エンコードしたもの>" -H "Accept-Language:ja" -F "file_input=@(ファイル名)"
```
コールすると、ユーザー情報が更新されます。
![スクリーンショット 2025-01-07 153910.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d2bb4c19-03bf-0ede-20d2-f995d8ba958e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/03248caa-eafb-d693-6c82-a1e2663456da.png)
### 連携処理ログの取得
コールした際のレスポンスとして返ってくるIDを付加した連携処理ログエンドポイントURIに向けてGETします。
```
curl -X GET  https://(テナント名).ex-tic.com/idm/api/1.3/logs/(ID) -H "Authorization:Basic <ID:パスワード の形式で連結した文字をBase64エンコードしたもの>" -H "Accept-Language:ja"
```
APIで実行した連携処理ログを入手できます。
![スクリーンショット 2025-01-07 155902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/8d154573-54f6-65da-687a-bc7079e31abb.png)
##
このようにして、CSVの出力とCSVからの入力が可能です。
[次回](https://qiita.com/ahra_/items/1715bd42320a110a5f82)はパスワードの変更と変更後のパスワード情報を印刷できる、「パスワード通知書印刷機能」について検証します。