いよいよ集計アプリをdjango WEBアプリに実装。その前に、WordpressのLoginHistoryプラグインのログも拝借するコードを追加
from datetime import datetime, timezone, timedelta, tzinfo
import MySQLdb
tz_jst = timezone(timedelta(hours=9), name='JST')
def get_wp_loginfails(st, ed, address=None):
"""
wordpressのデータベースから認証履歴のレポートを返す(要:プラグイン User Login History)
[引数] st : レポート対象の開始日時
ed : レポート対象の終了日時
address : レポート対象のIPアドレスオブジェクト(Noneの場合は全て)サブネット検索対応
"""
user = '<USER>'
passwd = '<passwork>'
host = 'localhost'
db='<dbname>'
rows = None
with MySQLdb.connect(user = user, passwd = passwd, host = host, db = db) as conn:
with conn.cursor() as cur:
(stat1, ed1) = (x.astimezone(timezone.utc).replace(tzinfo=None) for x in (st, ed))
sql = 'select username, time_login, ip_address, login_status from wp_fa_user_logins'\
' where time_login > %s and time_login < %s' #and login_status = %s'
cur.execute(sql,(stat1, ed1)) # <> 'login'
rows = cur.fetchall()
# rows 集計
rows = rows if address is None else [row for row in rows if ipv4adrset(row[2]) == address]
retlist = [
{
'name':row[0],
'datetime':row[1].replace(tzinfo=timezone.utc).astimezone(tz_jst),
'address':ipv4adrset(row[2]),
'status':False if row[3]=='fail' else True,
'source':'wordpress',
} for row in rows]
return retlist
なんやらいろいろゴチャゴチャやってるけど、とりあえずmysqlに貯め込んでいるログイン情報を指定期間分取り出してくる。