#!/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 ip_from_name(db, machine): cur = db.execute('SELECT ip FROM machines where name=?', (machine,)) row = cur.fetchone() if row is None: return None return row[0] def next_port(db, ip): BASE_PORT=8000 cur = db.execute('SELECT port FROM domains where ip=? order by port desc limit 1', (ip,)) row = cur.fetchone() if row is None: return BASE_PORT return row[0]+1 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('/machines/', method='GET') def get_machines(db): c = db.execute('SELECT mgroup,name,ip FROM machines') out = turn_me_to_json(c,c.fetchall()) response.content_type = "application/json" return json.dumps(out) @route('/machines///', method='PUT') def put_machines(db, group, name, ip): c = db.execute('UPDATE machines set mgroup=? and name=? where ip=?', (group,name,ip)) if c.rowcount == 0: c = db.execute('INSERT INTO machines (mgroup,name,ip) values(?,?,?)', (group,name,ip)) @route('/domains/', method='GET') def get_domains(db): c = db.execute('SELECT ip,port,domain,subdomain,user FROM domains') out = turn_me_to_json(c,c.fetchall()) response.content_type = "application/json" return json.dumps(out) @route('/domains/', method='PUT') def put_domain(db, machine ): if request.json is None or \ "domain" not in request.json or \ "user" not in request.json or \ "subdomain" not in request.json: response.status=400 return ip = ip_from_name(db,machine) if ip is None: response.status=400 return port = next_port(db,ip) domain = request.json["domain"] user = request.json["user"] sub = request.json["subdomain"] print(domain) c = db.execute('UPDATE domains set domain = ?, user = ? where ip=? and subdomain=?', (domain,user,ip,sub)) if c.rowcount == 0: print("inserting!") c = db.execute('INSERT INTO domains(domain,subdomain,user,port,ip) VALUES (?,?,?,?,?)', (domain,sub,user,port,ip)) else: print("updating! %d" % c.rowcount) print(domain,port,user,ip,sub) run(host='localhost', port=8080)