From c561b8edf1fab806c9e6d0e6abb6fad959b941ed Mon Sep 17 00:00:00 2001 From: danfai Date: Wed, 15 Sep 2021 20:49:25 +0200 Subject: [PATCH] syncplay server changes --- syncplay/ep_server.py | 12 ++++++++++-- syncplay/server.py | 8 ++++++-- syncplay/webapi.py | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 syncplay/webapi.py diff --git a/syncplay/ep_server.py b/syncplay/ep_server.py index 22aec44..132ccc6 100644 --- a/syncplay/ep_server.py +++ b/syncplay/ep_server.py @@ -1,10 +1,13 @@ import sys -from twisted.internet import reactor +from twisted.internet import reactor, endpoints from twisted.internet.endpoints import TCP4ServerEndpoint, TCP6ServerEndpoint from twisted.internet.error import CannotListenError +from twisted.web import server, resource + from syncplay.server import SyncFactory, ConfigurationGetter +from syncplay.webapi import WebAPI class ServerStatus: pass @@ -27,6 +30,7 @@ def failed4(f): print(f.value) print("IPv4 listening failed.") + def main(): argsGetter = ConfigurationGetter() args = argsGetter.getConfiguration() @@ -43,6 +47,9 @@ def main(): args.stats_db_file, args.tls ) + site = server.Site(WebAPI(factory)) + endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080) + endpoint.listen(site) endpoint6 = TCP6ServerEndpoint(reactor, int(args.port)) endpoint6.listen(factory).addCallbacks(isListening6, failed6) endpoint4 = TCP4ServerEndpoint(reactor, int(args.port)) @@ -54,4 +61,5 @@ def main(): sys.exit() if __name__ == "__main__": - main() \ No newline at end of file + main() + diff --git a/syncplay/server.py b/syncplay/server.py index 21de91b..b3f9408 100755 --- a/syncplay/server.py +++ b/syncplay/server.py @@ -260,6 +260,9 @@ class SyncFactory(Factory): if self._TLSattempts < constants.TLS_CERT_ROTATION_MAX_RETRIES: self.serverAcceptsTLS = True + def _getRoomManager(self): + return self._roomManager + class StatsRecorder(object): def __init__(self, dbHandle, roomManager): @@ -356,8 +359,9 @@ class RoomManager(object): return room def _deleteRoomIfEmpty(self, room): - if room.isEmpty() and room.getName() in self._rooms: - del self._rooms[room.getName()] + #if room.isEmpty() and room.getName() in self._rooms: + # del self._rooms[room.getName()] + print("Would delete room: " + room.getName()) def findFreeUsername(self, username): username = truncateText(username, constants.MAX_USERNAME_LENGTH) diff --git a/syncplay/webapi.py b/syncplay/webapi.py new file mode 100644 index 0000000..84e8883 --- /dev/null +++ b/syncplay/webapi.py @@ -0,0 +1,38 @@ +from syncplay.utils import RoomPasswordProvider, NotControlledRoom, RandomStringGenerator, meetsMinVersion, playlistIsValid, truncateText +from twisted.web import server, resource +import syncplay +from syncplay import constants +import json + +class WebAPI(resource.Resource): + isLeaf = True + def __init__(self, factory): + self._factory = factory + + def render_GET(self, request): + return (b"" + b"" + b"
") + + def render_POST(self, request): + url = "" + r = "" + if b"url" in request.args and b"room" in request.args: + url = request.args[b"url"][0].decode("utf-8") + r = request.args[b"room"][0].decode("utf-8") + else: + obj = json.load(request.content) + #print(obj) + url = obj["text"] + r = obj["channel_name"] + + room = self._factory._getRoomManager()._getRoom(r) + pl = room.getPlaylist() + pl += [url] + room.setPlaylist(pl) + #print("Room: " + r + " - adding: " + url) + for receiver in room.getWatchers(): + receiver.setPlaylist(room.getName(), room.getPlaylist()) + + return b"Inserted" +