パスワード生成サービスってあるじゃないですか。
私はいつもこのサービスを使ってます。
http://www.luft.co.jp/cgi/randam.php
(“password"でググると一番上に出てくるから)
で、別にこれで全然不満もないんですが、これくらいならすぐ作れそうだなーと思って作ってみました。
仕様
エンドポイント
GET http://content.yosiopp.net/app/passwd/
パラメタ
| key | description |
|---|---|
| t | 文字種(0...英字, 1...英数, 2...英数+/, 未指定...英数記号) |
| n | 文字数(default=12, max=256) |
| cb | コールバックメソッド名 |
結果はjsonで出力します。
$ curl http://content.yosiopp.net/app/passwd/?t=1&n=16
{ "password" : "UaZJGlLcj63P" }
cbが指定されている場合jsonpで出力します。
$ curl http://content.yosiopp.net/app/passwd/?t=0&n=8&cb=callback
callback("rfJhZHMo")
実装
pythonを使って実装します。
さくらインターネットのレンタルサーバで動作させる想定で、
ポイントはshebangに /usr/local/bin/python を指定するのと、
拡張子を cgi にして、パーミッションを 705 に設定すること。だそう。
ちなみに2017年3月24日現在、さくらインターネットのレンタルサーバーではpython 2.7.6 がインストールされているようです。
#!/usr/local/bin/python
import random
import string
import cgi
import re
def passwd(t = None, n = 12):
if t == 0:
a = list(string.ascii_letters)
elif t == 1:
a = list(string.ascii_letters + string.digits)
elif t == 2:
a = list(string.ascii_letters + string.digits + "+/")
else:
a = [ chr(i) for i in range(0x21, 0x7f) if i != 0x5c ]
return ''.join([ random.choice(a) for i in range(n) ])
form = cgi.FieldStorage()
try:
t = int(form["t"].value) if form.has_key("t") else None
n = min(int(form["n"].value), 256) if form.has_key("n") else 12
cb = re.sub(r'[^a-zA-z0-9]|\`', '', form["cb"].value) if form.has_key("cb") else None
except:
t = None
n = 12
cb = None
pw = passwd(t, n)
pw = pw.replace('"', '\\"')
if cb != None:
ctype = "application/javascript"
body = cb + "(\"" + pw + "\")"
else:
ctype = "application/json"
body = '{ "password" : "' + pw + '" }'
print "Content-Type: " + ctype
print "Content-Length: " + str(len(body))
print ""
print body
実装はこんな感じ。
注意
上記エンドポイントはhttpsには対応してないので、真面目に利用するのはセキュリティ上やめた方が良いかもですよ。
利用にあたってはyosioppは一切の責任を負いません。