#!/usr/bin/env python3 from bottle import route, run, request, install, response from bottle_sqlite import SQLitePlugin import json install(SQLitePlugin(dbfile='test.db')) def turn_me_to_json(cursor,res): out = [] for row in res: v = {} for i, val in enumerate(row): v[cursor.description[i][0]]=val out.append(v) return out @route('/domain/', method='GET') def get_domains(db): c = db.execute('SELECT ip,port,domain,subdomain FROM domains') out = turn_me_to_json(c,c.fetchall()) return json.dumps(out) @route('/domain/', method='PUT') def put_domain(db, ip="Mystery Domain" ): if request.json is None or "domain" not in request.json or "subdomain" not in request.json or "port" not in request.json: response.status=400 return c = db.execute('UPDATE domains set domain=? and subdomain=? and port=? where ip=?', (request.json["domain"],request.json["subdomain"],request.json["port"],ip)) if c.rowcount == 0: c = db.execute('INSERT INTO user_machines (ip,name) values(?,?)', (request.json["ip"],name)) return @route('/user/', method='GET') def get_users(db): c = db.execute('SELECT name, ip FROM user_machines') out = turn_me_to_json(c,c.fetchall()) return json.dumps(out) @route('/user/', method='PUT') def put_users(db, name="Mystery User" ): if request.json is None or "ip" not in request.json: response.status=400 return if len(request.json["ip"]) < 7: response.status=400 return c = db.execute('UPDATE user_machines set ip=? where name=?', (request.json["ip"],name)) if c.rowcount == 0: c = db.execute('INSERT INTO user_machines (ip,name) values(?,?)', (request.json["ip"],name)) return @route('/nginx/', method='GET') def get_nginx(db): c = db.execute('SELECT name, ip FROM nginx') out = turn_me_to_json(c,c.fetchall()) return json.dumps(out) @route('/nginx/', method='PUT') def put_nginx(db, name="Mystery Host" ): if request.json is None or "ip" not in request.json: response.status=400 return if len(request.json["ip"]) < 7: response.status=400 return c = db.execute('UPDATE nginx set ip=? where name=?', (request.json["ip"],name)) if c.rowcount == 0: c = db.execute('INSERT INTO nginx (ip,name) values(?,?)', (request.json["ip"],name)) return run(host='localhost', port=8080)