mirror of
https://github.com/nikdoof/grumble.git
synced 2025-12-13 08:42:15 +00:00
Add basic app layout and Server/Channel basic endpoints.
This commit is contained in:
11
config.py
Normal file
11
config.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import os
|
||||||
|
_basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
ADMINS = frozenset(['youremail@yourdomain.com'])
|
||||||
|
SECRET_KEY = 'SecretKeyForSessionSigning'
|
||||||
|
|
||||||
|
THREADS_PER_PAGE = 8
|
||||||
|
|
||||||
|
ICE_SECRET = 'test'
|
||||||
15
grumble/__init__.py
Normal file
15
grumble/__init__.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
from flask import Flask
|
||||||
|
from flask.ext import restful
|
||||||
|
|
||||||
|
from api_v1 import Server, ServerList, Channel, ChannelList
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config.from_object('config')
|
||||||
|
|
||||||
|
api_v1 = restful.Api(app)
|
||||||
|
|
||||||
|
# Servers
|
||||||
|
api_v1.add_resource(ServerList, '/v1/servers/')
|
||||||
|
api_v1.add_resource(Server, '/v1/servers/<int:server_id>/')
|
||||||
|
api_v1.add_resource(ChannelList, '/v1/servers/<int:server_id>/channels/')
|
||||||
|
api_v1.add_resource(Channel, '/v1/servers/<int:server_id>/channels/<int:channel_id>/')
|
||||||
81
grumble/api_v1.py
Normal file
81
grumble/api_v1.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
from flask import current_app
|
||||||
|
from flask.ext import restful
|
||||||
|
from mumble.meta import Meta
|
||||||
|
|
||||||
|
|
||||||
|
class MumbleResource(restful.Resource):
|
||||||
|
|
||||||
|
def _get_meta(self):
|
||||||
|
print current_app.config['ICE_SECRET']
|
||||||
|
return Meta(current_app.config['ICE_SECRET'])
|
||||||
|
|
||||||
|
def _get_server(self, server_id):
|
||||||
|
return self._get_meta().get_server(server_id)
|
||||||
|
|
||||||
|
|
||||||
|
class ServerList(MumbleResource):
|
||||||
|
def get(self):
|
||||||
|
servers = self._get_meta().get_all_servers()
|
||||||
|
return [{'id': srv.id, 'name': srv.get_all_conf()['registername'], 'port': srv.get_all_conf()['port'], 'running': srv.running} for srv in servers]
|
||||||
|
|
||||||
|
def post(self):
|
||||||
|
new_port = max([int(x.get_all_conf()['port']) for x in self._get_meta().get_all_servers()]) + 1
|
||||||
|
srv = self._get_meta().new_server()
|
||||||
|
srv.set_conf('port', str(new_port))
|
||||||
|
return {'id': srv.id}, 201
|
||||||
|
|
||||||
|
|
||||||
|
class Server(MumbleResource):
|
||||||
|
def get(self, server_id):
|
||||||
|
server = self._get_server(server_id)
|
||||||
|
if server is None:
|
||||||
|
return '', 404
|
||||||
|
cfg = server.get_all_conf()
|
||||||
|
for k in ['certificate', 'key']:
|
||||||
|
cfg.pop(k)
|
||||||
|
return cfg
|
||||||
|
|
||||||
|
def delete(self, server_id):
|
||||||
|
if self._get_server(server_id).delete():
|
||||||
|
return '', 204
|
||||||
|
return '', 500
|
||||||
|
|
||||||
|
def start(self, server_id):
|
||||||
|
if self._get_server(server_id).start():
|
||||||
|
return '', 204
|
||||||
|
return '', 500
|
||||||
|
|
||||||
|
def stop(self, server_id):
|
||||||
|
if self._get_server(server_id).stop():
|
||||||
|
return '', 204
|
||||||
|
return '', 500
|
||||||
|
|
||||||
|
|
||||||
|
class Channel(MumbleResource):
|
||||||
|
|
||||||
|
def get(self, server_id, channel_id):
|
||||||
|
server = self._get_server(server_id)
|
||||||
|
if server is None:
|
||||||
|
return '', 404
|
||||||
|
channel = server.get_channel(channel_id)
|
||||||
|
if channel is None:
|
||||||
|
return '', 404
|
||||||
|
return channel.serialize(), 200
|
||||||
|
|
||||||
|
|
||||||
|
class ChannelList(MumbleResource):
|
||||||
|
|
||||||
|
def get(self, server_id):
|
||||||
|
server = self._get_server(server_id)
|
||||||
|
if server is None:
|
||||||
|
return '', 404
|
||||||
|
channels = []
|
||||||
|
for channel in server.get_channels():
|
||||||
|
raw = channel.serialize()
|
||||||
|
channels.append({
|
||||||
|
'id': raw['id'],
|
||||||
|
'name': raw['name'],
|
||||||
|
'parent': raw['parent'],
|
||||||
|
'position': raw['position'],
|
||||||
|
})
|
||||||
|
return channels
|
||||||
Reference in New Issue
Block a user