diff --git a/stashr/api.py b/stashr/api.py index 51650a8..d584c0a 100644 --- a/stashr/api.py +++ b/stashr/api.py @@ -56,7 +56,7 @@ from operator import itemgetter, attrgetter from validate import Validator """ --- STASHR CORE IMPORTS --- """ -from stashr import log, database, utils, paths, folders, naming, forms, tasks +from stashr import log, database, utils, paths, folders, naming, forms, tasks, server from stashr.config import stashrconfig from stashr.comicvine import cv @@ -2261,6 +2261,93 @@ def api_put_directories_edit(scrape_id): return jsonify(create_json_return('200')) +""" --- PLUGIN UPLOAD/INSTALL --- """ + + +@api.route('/plugins/upload', methods=['POST']) +def api_post_upload_plugin(): + """To Update Later + This is using docstrings for specifications. + --- + tags: + - plugins + """ + + user = current_user + + if not user.is_authenticated: + if not request.json: + return jsonify(create_json_return('400')) + if "api_key" not in request.json: + return jsonify(create_json_return('400')) + if request.json['api_key'] == "": + return jsonify(create_json_return('100')) + + user = database.session \ + .query(database.Users) \ + .filter(database.Users.api_key == request.json['api_key']) \ + .first() + + if user is None: + return jsonify(create_json_return('100')) + + if user.role != 'admin': + return jsonify(create_json_return('401')) + + if 'file' not in request.files: + return jsonify(create_json_return('400')) + + # DO THINGS HERE + file = request.files['file'] + + file_path =os.path.join( + folders.StashrFolders().temp_folder(), + file.filename + ) + + file.save(file_path) + + utils.install_plugin(file_path) + + return jsonify(create_json_return('200')) + +""" --- RESTART SERVER --- """ + +@api.route('/restart', methods=['POST']) +def restart_server(): + """To Update Later + This is using docstrings for specifications. + --- + tags: + - plugins + """ + + user = current_user + + if not user.is_authenticated: + if not request.json: + return jsonify(create_json_return('400')) + if "api_key" not in request.json: + return jsonify(create_json_return('400')) + if request.json['api_key'] == "": + return jsonify(create_json_return('100')) + + user = database.session \ + .query(database.Users) \ + .filter(database.Users.api_key == request.json['api_key']) \ + .first() + + if user is None: + return jsonify(create_json_return('100')) + + if user.role != 'admin': + return jsonify(create_json_return('401')) + + server.server.restart_server() + + return create_json_return('200') + + """ --- API WRAPPER --- """ """--------------------- diff --git a/stashr/server.py b/stashr/server.py index 2f1916a..98f0c44 100644 --- a/stashr/server.py +++ b/stashr/server.py @@ -86,26 +86,23 @@ class Server: app.logger.debug('Unknown Error while starting gevent') def start_server(self): - app.logger.debug('STARTING SERVER') + app.logger.info('STARTING SERVER') self.define_wsgi() self.wsgiserver.serve_forever() if self.restart: - app.logger.info('Restarting Server') + app.logger.info('RESTARTING SERVER) try: - subprocess.check_call([sys.executable, 'start.py']) + subprocess.call([sys.executable, 'start.py'], close_fds=True) except subprocess.CalledProcessError as e: print(e) - def stop_server(self): - app.logger.debug('STOPPING SERVER') + app.logger.info('STOPPING SERVER') self.wsgiserver.stop() - def restart_server(self, ignored_signum, ignored_frame): + def restart_server(self, ignored_signum=None, ignored_frame=None): self.restart = True - app.logger.debug('Restarting Server') if self.wsgiserver is not None : - self.wsgiserver.stop() - + self.wsgiserver.close() server = Server() diff --git a/stashr/templates/settings_page_plugins.html b/stashr/templates/settings_page_plugins.html index 5a290b8..ec0459c 100644 --- a/stashr/templates/settings_page_plugins.html +++ b/stashr/templates/settings_page_plugins.html @@ -8,12 +8,64 @@