LEO-NET認証スクリプト

住まいがレオパレスということで、インターネット接続はLEO-NETを利用している。このLEO-NETを利用するには、接続の初っ端にHTTPの基本認証を通らないといけない仕様になっている。これをブラウザを使ってやってもいいのだが、毎回のことになると面倒なので基本認証を行うRubyのスクリプトを動かすようにしている。

# -*- coding: Windows-31J -*- 
require 'net/http'
require 'uri'

DEFAULT_URI = 'http://www.google.co.jp/'
@encpass = ""

def fetch(uri_string)
    uri = URI.parse(uri_string)

    begin
        Net::HTTP.start(uri.host, 80) do |http|
            response =
                http.get(uri.path, { 'Authorization' => 'Basic ' + @encpass })
            if response.code == '302' or response.code == '307' then
                fetch(response['location'])
            elsif response.code != '200' then
                raise(response.code + ' ' + response.message)
            end
        end
    rescue Exception
        system(
            'wscript LeonetAuth.vbs "' +
            "認証に失敗しました。\n" + $!.message + "\n" + '再試行しますか?"')
        retry if $? == 0
    end
end

if ARGV.length < 1 then
    system('wscript LeonetAuth.vbs ' +
           '"usage: ruby LeonetAuth.rb id:password [URI]"')
    exit(1)
end

@encpass = [ ARGV[0] ].pack("m")

fetch(ARGV.length < 2 ? DEFAULT_URI : ARGV[1])

これをたとえばLeonetAuth.rbという名前で保存しておくわけだ。このスクリプトではダイアログボックスの表示にVBScriptを使っているので、同一ディレクトリにLeonetAuth.vbsという名前で、

Set args  = WScript.Arguments
Set shell = WScript.CreateObject("WScript.Shell")

If args.Count = 0 Then
    message = ""
Else
    message = args(0)
End If

If shell.Popup(message, 0, "LeonetAuth", vbOKCancel + vbQuestion) _
        = vbOK Then
    WScript.Quit(0)
Else
    WScript.Quit(1)
End If

というファイルを作っておく必要がある。Rubyスクリプトをコマンドラインから実行してもいいが、

@echo off
<drive-letter>:
cd <script-directory>
ruby LeonetAuth.rb <user-id>:<password>

のようなバッチファイルを作成して、スタートアップフォルダに入れるなり、グループポリシーのスタートアップスクリプトに登録するなりしておけば、認証に煩わされることもなくなる。蛇足ながら、<drive-letter>はスクリプトを保存したドライブ名、<script-directory>はスクリプトを保存したディレクトリパス、<user-id>はLEO-NETのユーザID、<password>はLEO-NETのパスワードに置き換える。さらに蛇足だが、このスクリプトはRubyがインストールされているWindows上でしか動かない。さてさて、このエントリが役に立つ人が世の中にどのくらいいるだろうか(^^ゞ。