プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

6月

01

GoogleDocsの閲覧権限チェッカー

  • POSTED BY 小谷松 丈樹 IN 創作
  • 1 Comment

spreadsheetの権限が変わっちゃう問題

GoogleDocumentで管理しているファイルって、共有アドレスをコピーってボタンを押すと、
閲覧権限が[URLを知っている全員が閲覧可]に変わっちゃうんですよね。
よく見ると「変更しました、元に戻す」みたいな表示はあるんですが、分かりにくいですよねぇ。
「spreadsheetの閲覧権限がまた変わってる!困る!」
という声が挙がっていたので、毎日チェックしてアラートを出すプログラムを組みました。

目標

Google spreadsheetの、アクセス権限を絞っているファイルが別のアカウントから閲覧できないかを確認

主要技術・環境

  • Google Apps Script for PHP
  • OAuth

実装

想定フロー

いちいち走査するURLのリストを、DBやらファイルやらに登録するのも運用が面倒になります。
そこで、走査したいファイルを、デベロッパー登録時に作成されるアドレスに共有するだけで、
それをチェックリストとして、全てのファイルの権限を確認していきたいと思います。

よって、想定するフローは以下のとおり。

  • 毎時程度の頻度でバッチ起動
  • デベロッパーアドレスに共有されているファイル一覧を取得
  • 全て権限を調べる
    • [リンクを知っている全員が閲覧可]への権限が許可されていたらアラートメール

実際、できるの?ソースは?

できる!

開発

遠回りをしまくったので、不必要な情報も混じっているかもしれませんがご容赦ください。

API利用設定

まずAPIを利用するための開発プロジェクトをGoogleConsoleにて登録します。
プロジェクト_1
プロジェクトを作成を押して
プロジェクト
適当なプロジェクト名を設定して
API_ライブラリ_-_drive-permission-check
Drive APIを有効化します

OAuth設定

認証情報_-_drive-permission-check_2
認証情報から、新しいクライアントIDを作成。
認証情報_-_drive-permission-check_1
サービスアカウントでクライアントIDを作成。バッチ処理でOAuthを使える便利なやつです。
間違ってJSONキー作っちゃった・・・
認証情報_-_drive-permission-check
ので、下のボタンから新しいP12キーを作成。
プログラムで使用するため、秘密鍵(.p12ファイル)をダウンロードし、サーバに設置しておきます。

ライブラリをダウンロード

  • Google APIs Client Library for PHP (google-api-php-client)
  • php-google-spreadsheet-client

やっとプログラミング

必要なファイルのインクルード

先ほどダウンロードしたライブラリをインクルードしておきます。

OAuthを通す

上記でOAuthの認証を通し、デベロッパーアドレスでログインしている状況にできました。
このまま所有ファイルの一覧を取得してみます。

チェックファイルの一覧取得

$parameters に条件を設定し、ページングや検索ディレクトリを取得することが可能です。
今回は総数も多くなくページングも必要の無い想定のため、実装を省いていますが、
必要であれば20件ずつ取得して走査していくのが良いですね。

権限確認

ここが今回のキモですが、 リンクを知っている全員が閲覧可 となるファイルは、
anyoneWithLink というIDに対して閲覧権限が設定されます。
下記の関数呼び出しにて、
– 閲覧権限がある場合は、ステータスコード 200
– 閲覧権限が無い場合は、ステータスコード 404
が返却されます。

200の場合、閲覧権限が変更されているとして、アラートを出すとすればOKです。

アラートメール

メールで送るとすると、オーナーに送信するのが良いかな。
getOwners()で、ファイル所有者の情報が配列形式で取得できます。

本文に使えそうなパラメータは下記あたりですかね。

実行結果

【確認】ファイルの権限が変更されています_-_ns_oyamatsu0302_gmail_com_-_Gmail
こんな感じでメール配信できるようになりました。

まとめ

DriveAPIの、情報が非常に不足していたので、
ソースから推測で組む必要がありました。つらたん。
ともあれ、これで重要書類の平和は守られました!

Tags :

Comment ( 1 )

コメントを残す

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box