Random fixes, kektops support
parent
9b19bb8a81
commit
ec6cf1afd2
34
at.py
34
at.py
|
@ -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'],
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
Loading…
Reference in New Issue