ワンクリックで大学内ネットワーク経由で論文にアクセスできるchrome拡張機能を作る

技術ネタ

学外から論文にアクセスするとき、オープンアクセスではないものは学内ネットワークを経由してアクセスする必要があり、東大の場合、SSL-VPNというサービスを使用します。

コロナ禍で学外から論文を検索する機会が増え、このサービスをよく使うようになって助かっているのですが、使い方が分かりにくい上に、目当ての論文をVPNで見つけるまでに少々手間がかかってしまうという不便さが目立ちました。そこで今回は論文のページから直接SSL-VPNを経由したページにワンクリックでアクセスできるようにするchrome拡張機能を作りたいと思います。

【2021年9月追記】gateway.itc.u-tokyo.ac.jp廃止に伴い、gateway2.itc.u-tokyo.ac.jpに書き換えました。

chrome拡張機能のソースコードはこちら

スポンサーリンク

SSL-VPNの仕様

仕様書などがあるわけではなかったため、いろいろと試してSSL-VPNで論文にアクセスする方法を分析しました。一言でいうと、

「https://gateway2.itc.u-tokyo.ac.jp/,DanaInfo=

の”DanaInfo=”以下にアクセスしたいページのホスト(例:dl.acm.org)とホスト以下のURLを”+”でつないでできるURLにアクセスする」

これだけです。

例えば、

https://{paper-host}/{paper-path}

という論文にアクセスしたいときは

https://gateway2.itc.u-tokyo.ac.jp/,DanaInfo={paper-host}+{paper-path}

でアクセスすることが出来ます。

スポンサーリンク

Chrome拡張機能を作る

そうとわかれば超簡単に実装できそうです。

chrome拡張機能のソースコードはこちら

chrome拡張機能ではmanifest.jsonが必要になります。

{
  "name": "Open by UT SSL-VPN",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "論文のページをSSL-VPNで開きます",
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
},
  "browser_action": {
    "default_icon": {
      "19": "icon19.png"
    },
    "default_title": "SSL-VPN",
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs"
  ]
}

default_popupが拡張機能のアイコンをクリックしたときに呼び出されるHTMLです。

また、この拡張機能では、そのタブのURL情報が必要なため、permissionにtabsを追加する必要があります。

popup.htmlは以下の通りで、popup.jsを呼び出すだけの簡単なものです。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  </head>
  <body>
    <script src="popup.js"></script>
  </body>
</html>

popup.jsでは、タブのURLを読み取り、SSL-VPN経由になるようURLを書き換えてアクセスさせます。

const urlSSLVPN = 'https://gateway2.itc.u-tokyo.ac.jp/,DanaInfo='
chrome.tabs.query({ active: true, currentWindow: true }, (e) => {
    const url = e[0].url;
    const host = url.split('/')[2]
    if (host.includes('gateway2.itc.u-tokyo.ac.jp')){ // 既にSSL-VPN経由のページの時はページ移動はしない
        window.open(url, '_self')
    }else{
        const DanaInfo = `${host}+${url.split(host+'/')[1]}`
        window.open(urlSSLVPN + DanaInfo, '_blank') // 新規タブで開く
    }
});

拡張機能を設定する

Chromeの「設定」→「拡張機能」→「パッケージ化されていない拡張機能を読み込む」から、上記のファイルが入ったフォルダを指定

コメント

タイトルとURLをコピーしました