パスワードが必要になったときEpisoPassページが開くようにする.

パスワードが必要になったときEpisoPassページが開くようにする.

(expanded from EpisoPassをプログラムから呼び出して使う このページは編集しないでください)

(2021/1/14)

パスワードが必要になったときプログラムからEpisoPassを呼ぶ方法を大久保康平氏に教えてもらった
当該プログラムをサーバとして動かし、ブラウザからそこにアクセスすれば良いようである
ユーザをサブルーチンみたいに呼ぶ方法はもっと簡単になって欲しいが...

なんでこういうのが必要になったのだったか完璧に忘れてしまったorz (2021/9/16)
パスワードが必要になったとき自動的にEpisoPassが開くようにしたかったのだっけ?

EpisoPassCall.rb
Copied!
require 'webrick'

pwfile = "password.txt"
OPEN = "xdg-open"

unless File.exist?(pwfile) # パスワードが必要になったとき
# ブラウザで /EpisoPassCall にアクセス
system "#{OPEN} http://localhost:8000/EpisoPassCall"

server = WEBrick::HTTPServer.new( # サーバを立てる
:Port => 8000,
:HTTPVersion => WEBrick::HTTPVersion.new('1.1'),
:AccessLog => [[open(IO::NULL, 'w'), '']], # アクセスログを出力しない
:Logger => WEBrick::Log.new("/dev/null")
)
# EpisoPass計算画面を開く
# 計算後に/EpisoPassResultに移動
server.mount_proc('/EpisoPassCall') do |req, res|
body = File.read('RunEpisoPass.html') # パスワード計算するHTML
res.status = 200
res['Content-Type'] = 'text/html'
res.body = body
end

# /EpisoPassResult?qwerty のような形式でパスワードを返す
server.mount_proc('/EpisoPassResult') do |req, res|
password = URI.decode(req.query_string)
File.open(pwfile,"w"){ |f|
f.puts password
}
server.shutdown
end

Signal.trap('INT'){server.shutdown}
server.start
end

puts File.read(pwfile)

Powered by Helpfeel