Random fixes, kektops support

master
informatic 2016-11-26 12:17:49 +01:00
parent 9b19bb8a81
commit ec6cf1afd2
2 changed files with 32 additions and 7 deletions

34
at.py
View File

@ -27,7 +27,10 @@ from functools import wraps
def v4addr(): def v4addr():
r_addr = request.remote_addr if request.headers.getlist("X-Forwarded-For"):
r_addr = request.headers.getlist("X-Forwarded-For")[-1]
else:
r_addr = request.remote_addr
if r_addr.startswith('::ffff:'): if r_addr.startswith('::ffff:'):
r_addr = r_addr[7:] r_addr = r_addr[7:]
return r_addr return r_addr
@ -39,6 +42,8 @@ def restrict_ip(prefix='', exclude=[]):
def func(*a, **kw): def func(*a, **kw):
r_addr = v4addr() r_addr = v4addr()
if not r_addr.startswith(prefix) or r_addr in exclude: if not r_addr.startswith(prefix) or r_addr in exclude:
app.logger.info('got IP %s, rejecting',r_addr)
abort(403) abort(403)
return f(*a, **kw) return f(*a, **kw)
return func return func
@ -162,14 +167,17 @@ class MtimeUpdater(Updater):
def file_changed(self, f): def file_changed(self, f):
pass pass
def _trigger_update(self):
app.logger.info('Lease file changed, updating')
with open(self.lease_file, 'r') as f:
self.file_changed(f)
def run(self): def run(self):
while True: while True:
try: try:
mtime = os.stat(self.lease_file).st_mtime mtime = os.stat(self.lease_file).st_mtime
if mtime > self.last_modified: if mtime > self.last_modified:
app.logger.info('Lease file changed, updating') self._trigger_update()
with open(self.lease_file, 'r') as f:
self.file_changed(f)
self.last_modified = mtime self.last_modified = mtime
sleep(3.0) sleep(3.0)
except Exception as e: except Exception as e:
@ -190,6 +198,8 @@ class DhcpdUpdater(MtimeUpdater):
lease = False lease = False
# for use by next-line logic # for use by next-line logic
ip = None ip = None
hwaddr = None
atime = None
for line in f: for line in f:
line = line.split('#')[0] line = line.split('#')[0]
cmd = line.strip().split() cmd = line.strip().split()
@ -207,8 +217,9 @@ class DhcpdUpdater(MtimeUpdater):
hwaddr = cmd[2][:-1] hwaddr = cmd[2][:-1]
if(field.startswith('}')): if(field.startswith('}')):
lease = False lease = False
if hwaddr: if hwaddr is not None and atime is not None:
self.update(hwaddr, atime, ip, name) self.update(hwaddr, atime, ip, name)
hwaddr, atime = None, None
elif cmd[0] == 'lease': elif cmd[0] == 'lease':
ip = cmd[1] ip = cmd[1]
name, hwaddr, atime = [None] * 3 name, hwaddr, atime = [None] * 3
@ -232,6 +243,7 @@ def list_all():
} }
result['users'] = map(prettify_user, result['users']) result['users'] = map(prettify_user, result['users'])
result['unknown'] = len(result['unknown']) result['unknown'] = len(result['unknown'])
result['kektops'] = len(result['kektops'])
res = make_response(json.dumps(result), 200) res = make_response(json.dumps(result), 200)
res.headers['Access-Control-Allow-Origin'] = '*' res.headers['Access-Control-Allow-Origin'] = '*'
return res return res
@ -241,7 +253,15 @@ def now_at():
devices = app.updater.get_active_devices() devices = app.updater.get_active_devices()
device_infos = list(get_device_infos(g.db, devices.keys())) device_infos = list(get_device_infos(g.db, devices.keys()))
device_infos.sort(key=lambda di: devices.__getitem__) device_infos.sort(key=lambda di: devices.__getitem__)
unknown = set(devices.keys()) - set(d.hwaddr for d in device_infos) all_unknown = set(devices.keys()) - set(d.hwaddr for d in device_infos)
# das kektop sorting maschine
kektops = set()
unknown = set()
for u in all_unknown:
if u.startswith('90:e6:ba:84'):
kektops.add(u)
else:
unknown.add(u)
users = {} users = {}
for info in device_infos: for info in device_infos:
@ -249,7 +269,7 @@ def now_at():
users[info.owner] = devices[info.hwaddr][0] users[info.owner] = devices[info.hwaddr][0]
users_sorted = sorted(users.items(), key=lambda (u, a): a, reverse=True) users_sorted = sorted(users.items(), key=lambda (u, a): a, reverse=True)
return dict(users=users_sorted, unknown=unknown) return dict(users=users_sorted, unknown=unknown, kektops=kektops)
restrict_to_hs = restrict_ip(prefix=app.config['CLAIMABLE_PREFIX'], restrict_to_hs = restrict_ip(prefix=app.config['CLAIMABLE_PREFIX'],

View File

@ -19,6 +19,11 @@ Now at hackerspace
{% pluralize %} {% pluralize %}
There are {{ n_unk }} unknown devices operating. There are {{ n_unk }} unknown devices operating.
{% endtrans %} {% endtrans %}
{% trans n_kek=kektops|length %}
There is {{ n_kek }} unknown kektop operating.
{% pluralize %}
There are {{ n_kek }} unknown kektops operating.
{% endtrans %}
<hr> <hr>
<a href="claim">Claim this device!</a> <a href="claim">Claim this device!</a>
{% endblock %} {% endblock %}