心地よいライフハック

これ便利だな〜と思ったことを書き溜めていければと思います。

QNAP の FileStation を HTTP API で使う ことはじめ

• 目的 •
 
QNAP の FileStaion へ HTTP API 経由でアクセスする。
「QNAP File Station」の画像検索結果
 
• QNAP とは •
 
「QNAP」の画像検索結果
本筋とは異なるのでざっくりと、、
 
お家や会社でクラウド的な機能を実現する高機能なNAS(ストレージ)です。
 
Fog Computing なマシン。 Fog とは 霧。 
 
クラウドの機能を手元に持ってきて使いやすくしたもの。
 
クラウドの機能を使って実現したいけど、機密情報が、、個人情報が、、データ容量代が高い、、 そういった場合の救世主。
 
ブラウザ上のGUIボタン操作で、ぽちぽちと、、VM できる。Docker も使える。VPNも使える。リモートワークに便利。Node-RED サーバーをQNAP上にたてて、VPNで繋がりあって圧倒的なスピードでの共同開発など、いつもお世話になってます。
「QNAP File Station」の画像検索結果
 
• 前提条件 •
 
( QNAP QTS File Station API v4.1 )
 
まず、QNAP (サーバー側) で API アクセスを許可する設定をしなくてOKか?
 
デフォルト設定では API アクセス許可している模様。
ただし、セキュリティID - sid を取得 しなければ HTTP API で FileStation へアクセスできない。
 
 

 
 
○ アクセストークンを取得するには?
 
1. GUI で QTS へログインしているユーザーで API アクセス権限がある設定ならば、そのユーザーで セキュリティID - sid を取得できる。取得するには、まず、そのユーザーのパスワードをエンコードし、その文字列を取得する。
 
javaScript 動作環境なら、簡単にエンコードできる。( 例: nodejs )
 
 
2. エンコードしたパスワードを使って、 QNAP HTTP API ヘ sid 要求する。
 
http://IPアドレス:8080/cgi-bin/filemanager/wfm2Login.cgi?user=ログインしたいユーザー名&pwd=エンコードしたパスワード文字列
 
成功すれば、"authPassed": 1 を含む以下、リターンがくる。
 
{
"status": 1,
"sid": "ここに目的となるsid文字列がくる",
"servername": "TVS-682など 型番 ",
"username": " ログインユーザー名 ",
"admingroup": *,
"supportACL": 1,
"enableACL": 0,
"dateFormat": 1,
"timeFormat": 24,
"genericModel": 0,
"2sv_type": 0,
"need_2sv": 0,
"send_mail_status": 0,
"authSid": "ここに目的となるsid文字列がくる",
"lost_phone": 0,
"emergency_try_count": *****,
"emergency_try_limit": 5,
"security_question_no": *,
"security_question_text": "***",
"cuid": "********************************",
"authPassed": 1,
"version": "5.1.0",
"build": "20180830"
}
 
 

 
以上より、QNAP FileStation の HTTP API 利用が開始できる。
 
( QNAP Virtualization Station 内の VM からは 取得できなかった。仮想のゲストから仮想ホストの重要なデータにアクセスできないようになっている可能性あり。 )
 

 
お試しに ・・・
 
「QNAP File Station」の画像検索結果
 
以下 GETリクエスト で QNAP の Multimedia フォルダ  のリストを取得できた。
• Get Folder List メソッド •
 
GET http://IPアドレス:8080/cgi-bin/filemanager/utilRequest.cgi?func=get_tree&sid=先ほど取得したsid&node=Multimedia
 
 
[
  {
"id": "Multimedia/@Recently-Snapshot",
"cls": "7",
"text": "@Recently-Snapshot",
"no_setup": 0,
"draggable": 1,
"iconCls": "folder",
"max_item_limit": ***,
"real_total": 2
},
  {
"id": "Multimedia/@Recycle",
"cls": "7",
"text": "@Recycle",
"no_setup": 0,
"draggable": 1,
"iconCls": "folder",
"max_item_limit": ***,
"real_total": 2
}
],