Browse Source
add a Flask CVP provider for @paniq and the lulz.
Natenom/support-murmur-13-1446181288462
add a Flask CVP provider for @paniq and the lulz.
Natenom/support-murmur-13-1446181288462
Michael Ziegler
13 years ago
2 changed files with 110 additions and 0 deletions
@ -0,0 +1,106 @@ |
|||
#!/usr/bin/env python |
|||
# -*- coding: utf-8 -*- |
|||
# kate: space-indent on; indent-width 4; replace-tabs on; |
|||
|
|||
""" |
|||
* Copyright (C) 2010, Michael "Svedrin" Ziegler <diese-addy@funzt-halt.net> |
|||
* |
|||
* Mumble-Django is free software; you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation; either version 2 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* This package is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
""" |
|||
|
|||
import getpass |
|||
from optparse import OptionParser |
|||
|
|||
from flask import Flask, jsonify |
|||
|
|||
from mumble.mctl import MumbleCtlBase |
|||
|
|||
DEFAULT_CONNSTRING = 'Meta:tcp -h 127.0.0.1 -p 6502' |
|||
DEFAULT_SLICEFILE = '/usr/share/slice/Murmur.ice' |
|||
|
|||
parser = OptionParser("""Usage: %prog [options] |
|||
|
|||
This is a minimalistic implementation of a Channel Viewer Protocol provider |
|||
using the Flask Python framework and Mumble-Django's MCTL connection library. |
|||
""") |
|||
|
|||
parser.add_option( "-c", "--connstring", |
|||
help="connection string to use. Default is '%s'." % DEFAULT_CONNSTRING, |
|||
default=None |
|||
) |
|||
|
|||
parser.add_option( "-i", "--icesecret", |
|||
help="Ice secret to use in the connection. Also see --asksecret.", |
|||
default=None |
|||
) |
|||
|
|||
parser.add_option( "-a", "--asksecret", |
|||
help="Ask for the Ice secret on the shell instead of taking it from the command line.", |
|||
action="store_true", default=False |
|||
) |
|||
|
|||
parser.add_option( "-s", "--slice", |
|||
help="path to the slice file. Default is '%s'." % DEFAULT_SLICEFILE, |
|||
default=None |
|||
) |
|||
|
|||
parser.add_option( "-d", "--debug", |
|||
help="Enable error debugging", |
|||
default=False, action="store_true" ) |
|||
|
|||
options, progargs = parser.parse_args() |
|||
|
|||
if options.connstring is None: |
|||
options.connstring = DEFAULT_CONNSTRING |
|||
|
|||
if options.slice is None: |
|||
options.slice = DEFAULT_SLICEFILE |
|||
|
|||
if options.asksecret or options.icesecret == '': |
|||
options.icesecret = getpass.getpass( "Ice secret: " ) |
|||
|
|||
|
|||
ctl = MumbleCtlBase.newInstance( options.connstring, options.slice, options.icesecret ) |
|||
|
|||
|
|||
app = Flask(__name__) |
|||
app.debug = options.debug |
|||
|
|||
|
|||
def getUser(user): |
|||
return dict(user) |
|||
|
|||
def getChannel(channel): |
|||
fields = ["id", "name", "parent", "links", "description", "temporary", "position"] |
|||
data = dict(zip(fields, [getattr(channel.c, field) for field in fields])) |
|||
data['channels'] = [ getChannel(subchan) for subchan in channel.children ] |
|||
data['users'] = [ getUser(user) for user in channel.users ] |
|||
return data |
|||
|
|||
@app.route('/<int:srv_id>') |
|||
def getTree(srv_id): |
|||
name = ctl.getConf(srv_id, "registername") |
|||
tree = ctl.getTree(srv_id) |
|||
|
|||
serv = { |
|||
'id': srv_id, |
|||
'name': name, |
|||
'root': getChannel(tree) |
|||
} |
|||
|
|||
return jsonify(serv) |
|||
|
|||
@app.route('/') |
|||
def getServers(): |
|||
return jsonify(servers=ctl.getBootedServers()) |
|||
|
|||
if __name__ == '__main__': |
|||
app.run() |
Write
Preview
Loading…
Cancel
Save
Reference in new issue