mirror of
https://github.com/marcus-alicia/iRedAdmin-Pro-SQL.git
synced 2026-05-31 17:39:43 +00:00
84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
import web
|
|
|
|
from libs import iredutils
|
|
|
|
# `4102444799` seconds since 1970-01-01 is '2099-12-31 23:59:59'.
|
|
# It's a trick to use this time as whitelist and not cleaned by
|
|
# script `tools/cleanup_db.py`.
|
|
# It's ok to use any long epoch seconds to avoid cleanup, but we use this
|
|
# hard-coded value for easier management.
|
|
expire_epoch_seconds = 4102444799
|
|
|
|
|
|
def get_whitelists():
|
|
total = 0
|
|
ips = []
|
|
|
|
try:
|
|
qr = web.conn_iredapd.select(
|
|
"senderscore_cache",
|
|
vars={'seconds': expire_epoch_seconds},
|
|
what='COUNT(client_address) AS total',
|
|
where="time=$seconds",
|
|
)
|
|
total = qr[0].total
|
|
|
|
if total:
|
|
qr = web.conn_iredapd.select(
|
|
"senderscore_cache",
|
|
vars={'seconds': expire_epoch_seconds},
|
|
what='client_address',
|
|
where="time=$seconds",
|
|
)
|
|
|
|
ips = [i.client_address for i in qr]
|
|
|
|
return True, {'total': total, 'ips': ips}
|
|
except Exception as e:
|
|
return False, repr(e)
|
|
|
|
|
|
def filter_whitelisted_ips(ips):
|
|
# Return a list of whitelisted IP addresses of given ones.
|
|
ips = [i for i in ips if iredutils.is_strict_ip(i)]
|
|
|
|
try:
|
|
qr = web.conn_iredapd.select(
|
|
"senderscore_cache",
|
|
vars={'ips': ips, 'seconds': expire_epoch_seconds},
|
|
what='client_address',
|
|
where="client_address IN $ips AND time=$seconds",
|
|
)
|
|
|
|
ips = [i.client_address for i in qr]
|
|
return True, ips
|
|
except Exception as e:
|
|
return False, repr(e)
|
|
|
|
|
|
def whitelist_ips(ips):
|
|
# Whitelist given IP addresses.
|
|
ips = [i for i in ips if iredutils.is_strict_ip(i)]
|
|
|
|
if not ips:
|
|
return True,
|
|
|
|
# Remove existing records first.
|
|
try:
|
|
web.conn_iredapd.delete("senderscore_cache",
|
|
vars={'ips': ips},
|
|
where="client_address IN $ips")
|
|
|
|
rows = []
|
|
for ip in ips:
|
|
rows += [{'client_address': ip,
|
|
'score': 100,
|
|
'time': expire_epoch_seconds}]
|
|
|
|
# Insert whitelists.
|
|
web.conn_iredapd.multiple_insert("senderscore_cache", rows)
|
|
|
|
return True,
|
|
except Exception as e:
|
|
return False, repr(e)
|