Skip to content
Snippets Groups Projects
Commit 5c1e5122 authored by Ferenc Schulcz's avatar Ferenc Schulcz
Browse files

Add dyndns-list

parent 2489e046
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ import os
import requests
import datetime
import config
from werkzeug.security import check_password_hash
plugin_dir = os.path.dirname(__file__) # parent folder name of the absolute path of this file
......@@ -13,6 +14,7 @@ def register(add_endpoint):
add_endpoint(endpoint_id='dyndns', handler=dyndns, permission_name='dyndns', menutext='DynDNS')
add_endpoint(endpoint_id='dyndns-register', handler=dyndnsRegister, permission_name='dyndns', method='POST')
add_endpoint(endpoint_id='dyndns-update', handler=dyndnsUpdate, permission_name=None) # Auth is handled by DynDNS server using a token
add_endpoint(endpoint_id='dyndns-list', handler=dyndnsList, permission_name=None) # Auth is handled internally, not by framework
def dyndns(**kwargs):
session = kwargs['session']
......@@ -63,7 +65,7 @@ def dyndnsUpdate(**kwargs):
rqtools = kwargs['rqtools']
ip = request.remote_addr
if not 'token' in request.args.keys():
return rqtools.get_400("You need to provide your token.")
return rqtools.get_400(None, errormsg="You need to provide your token.")
x = db.db['dyndns-records'].find_one({'token': request.args['token']})
if x['ip'] == ip:
return {'message': 'Already set.'}, 200
......@@ -73,3 +75,32 @@ def dyndnsUpdate(**kwargs):
print("Updated " + x['domain'] + " from " + x['ip'] + " to " + ip)
db.db['dyndns-records'].update_one(filter={'token': request.args['token']}, update={'$set': {'ip': ip, 'lastupdate': datetime.datetime.now()}})
return reply, r.status_code
def dyndnsList(**kwargs):
# Authorization
request = kwargs['request']
rqtools = kwargs['rqtools']
if not 'id' in request.args.keys():
return rqtools.get_403(None, errormsg="Provide an id.")
if not 'key' in request.args.keys():
return rqtools.get_403(None, errormsg="Provide a key for this.")
id = request.args['id']
key = request.args['key']
x = db.db['dyndns-servers'].find_one({'id': id})
if x is None:
return rqtools.get_403(None)
if not check_password_hash(x['keyhash'], key):
return rqtools.get_403(None, errormsg="Wrong key.")
# Dump all dyndns records
records = []
for record in db.db['dyndns-records'].find():
records.append({
'domain': record['domain'],
'token': record['token'],
'ip': record['ip']
})
return records # this automatically returns JSON
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment