| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/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/<group>/<name>/<ip>', 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/<machine>', 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)
|