# This file is part of Remote Support Desktop # https://gitlab.das-netzwerkteam.de/RemoteWebApp/rwa.support.sessionservice # Copyright 2020 Jonathan Weth # Copyright 2020 Daniel Teichmann # Copyright 2020 Mike Gabriel # SPDX-License-Identifier: GPL-2.0-or-later # # This program 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 program 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import threading from typing import Any, Callable from wsgiref.simple_server import make_server import port_for from flask import Flask, abort, request class TriggerServerThread(threading.Thread): """Simple Flask server (wrapped as thread) for triggering actions on sessions.""" def __init__(self, trigger_method: Callable[[str], Any]): super().__init__() self.port = port_for.select_random() app = Flask(__name__) @app.route("/", methods=["POST"]) def trigger(): json = request.json token = json.get("token", "") r = trigger_method(token) if r: return "Successful triggered" else: return abort(403) self.srv = make_server("0.0.0.0", self.port, app) self.ctx = app.app_context() self.ctx.push() def run(self): self.srv.serve_forever() def shutdown(self): self.srv.shutdown()