better restart management
This commit is contained in:
parent
28cfae03a8
commit
3cacc9fb00
@ -9,7 +9,7 @@ jQuery(document).ready(function ($) {
|
|||||||
if (confirm(l.js_sysinfo_restart_confirmation)) {
|
if (confirm(l.js_sysinfo_restart_confirmation)) {
|
||||||
$('body').html(l.js_sysinfo_restart_loading).css({margin:200});
|
$('body').html(l.js_sysinfo_restart_loading).css({margin:200});
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/sysinfo/restart',
|
url: '/sysinfo/restart?secret_key='+secret_key,
|
||||||
headers: {'Content-Type': 'application/json'},
|
headers: {'Content-Type': 'application/json'},
|
||||||
data: '',
|
data: '',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|||||||
@ -24,6 +24,9 @@ class AuthController(ObController):
|
|||||||
if current_user.is_authenticated:
|
if current_user.is_authenticated:
|
||||||
return redirect(url_for('slideshow_slide_list'))
|
return redirect(url_for('slideshow_slide_list'))
|
||||||
|
|
||||||
|
if not self._model_store.variable().map().get('auth_enabled').as_bool():
|
||||||
|
return redirect(url_for('slideshow_slide_list'))
|
||||||
|
|
||||||
if len(request.form):
|
if len(request.form):
|
||||||
user = self._model_store.user().get_one_by_username(request.form['username'], enabled=True)
|
user = self._model_store.user().get_one_by_username(request.form['username'], enabled=True)
|
||||||
if user:
|
if user:
|
||||||
@ -42,6 +45,13 @@ class AuthController(ObController):
|
|||||||
|
|
||||||
def logout(self):
|
def logout(self):
|
||||||
logout_user()
|
logout_user()
|
||||||
|
|
||||||
|
if request.args.get('restart'):
|
||||||
|
return redirect(url_for(
|
||||||
|
'sysinfo_restart',
|
||||||
|
secret_key=self._model_store.config().map().get('secret_key')
|
||||||
|
))
|
||||||
|
|
||||||
return redirect(url_for('login'))
|
return redirect(url_for('login'))
|
||||||
|
|
||||||
def auth_user_list(self):
|
def auth_user_list(self):
|
||||||
|
|||||||
@ -39,7 +39,10 @@ class SettingsController(ObController):
|
|||||||
if variable.name == 'auth_enabled':
|
if variable.name == 'auth_enabled':
|
||||||
self.reload_web_server()
|
self.reload_web_server()
|
||||||
if variable.as_bool():
|
if variable.as_bool():
|
||||||
return redirect(url_for('logout'))
|
return redirect(url_for(
|
||||||
|
'logout',
|
||||||
|
restart=1
|
||||||
|
))
|
||||||
|
|
||||||
if variable.name == 'lang':
|
if variable.name == 'lang':
|
||||||
self._model_store.lang().set_lang(variable.value)
|
self._model_store.lang().set_lang(variable.value)
|
||||||
|
|||||||
@ -2,21 +2,23 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import platform
|
import platform
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
from flask import Flask, render_template, jsonify
|
from flask import Flask, render_template, jsonify, request, url_for, redirect
|
||||||
from src.manager.VariableManager import VariableManager
|
from src.manager.VariableManager import VariableManager
|
||||||
from src.manager.ConfigManager import ConfigManager
|
from src.manager.ConfigManager import ConfigManager
|
||||||
from src.service.ModelStore import ModelStore
|
from src.service.ModelStore import ModelStore
|
||||||
|
|
||||||
from src.interface.ObController import ObController
|
from src.interface.ObController import ObController
|
||||||
from src.utils import get_ip_address
|
from src.utils import get_ip_address, am_i_in_docker
|
||||||
|
|
||||||
|
|
||||||
class SysinfoController(ObController):
|
class SysinfoController(ObController):
|
||||||
|
|
||||||
def register(self):
|
def register(self):
|
||||||
self._app.add_url_rule('/sysinfo', 'sysinfo_attribute_list', self._auth(self.sysinfo), methods=['GET'])
|
self._app.add_url_rule('/sysinfo', 'sysinfo_attribute_list', self._auth(self.sysinfo), methods=['GET'])
|
||||||
self._app.add_url_rule('/sysinfo/restart', 'sysinfo_restart', self._auth(self.sysinfo_restart), methods=['POST'])
|
self._app.add_url_rule('/sysinfo/restart', 'sysinfo_restart', self.sysinfo_restart, methods=['GET', 'POST'])
|
||||||
self._app.add_url_rule('/sysinfo/restart/needed', 'sysinfo_restart_needed', self._auth(self.sysinfo_restart_needed), methods=['GET'])
|
self._app.add_url_rule('/sysinfo/restart/needed', 'sysinfo_restart_needed', self._auth(self.sysinfo_restart_needed), methods=['GET'])
|
||||||
|
|
||||||
def sysinfo(self):
|
def sysinfo(self):
|
||||||
@ -29,20 +31,13 @@ class SysinfoController(ObController):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def sysinfo_restart(self):
|
def sysinfo_restart(self):
|
||||||
if platform.system().lower() == 'darwin':
|
secret = self._model_store.config().map().get('secret_key')
|
||||||
if self._model_store.config().map().get('debug'):
|
challenge = request.args.get('secret_key')
|
||||||
python = sys.executable
|
thread = threading.Thread(target=self.restart, args=(secret, challenge))
|
||||||
os.execl(python, python, *sys.argv)
|
thread.daemon = True
|
||||||
else:
|
thread.start()
|
||||||
try:
|
|
||||||
subprocess.run(["sudo", "systemctl", "restart", 'obscreen'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
pass
|
|
||||||
except subprocess.TimeoutExpired:
|
|
||||||
pass
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return jsonify({'status': 'ok'})
|
return redirect(url_for('manage'))
|
||||||
|
|
||||||
def sysinfo_restart_needed(self):
|
def sysinfo_restart_needed(self):
|
||||||
var_last_slide_update = self._model_store.variable().get_one_by_name('last_slide_update')
|
var_last_slide_update = self._model_store.variable().get_one_by_name('last_slide_update')
|
||||||
@ -53,3 +48,24 @@ class SysinfoController(ObController):
|
|||||||
|
|
||||||
return jsonify({'status': True})
|
return jsonify({'status': True})
|
||||||
|
|
||||||
|
def restart(self, secret: str, challenge: str) -> None:
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
if secret != challenge:
|
||||||
|
return jsonify({'status': 'error'})
|
||||||
|
|
||||||
|
if platform.system().lower() == 'darwin':
|
||||||
|
if self._model_store.config().map().get('debug'):
|
||||||
|
python = sys.executable
|
||||||
|
os.execl(python, python, *sys.argv)
|
||||||
|
elif am_i_in_docker:
|
||||||
|
python = sys.executable
|
||||||
|
os.execl(python, python, *sys.argv)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
subprocess.run(["sudo", "systemctl", "restart", 'obscreen-manager'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
pass
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
pass
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
pass
|
||||||
|
|||||||
@ -25,6 +25,7 @@ class TemplateRenderer:
|
|||||||
def get_view_globals(self) -> dict:
|
def get_view_globals(self) -> dict:
|
||||||
globals = dict(
|
globals = dict(
|
||||||
STATIC_PREFIX="/{}/{}/".format(WebDirConstant.FOLDER_STATIC, WebDirConstant.FOLDER_STATIC_WEB_ASSETS),
|
STATIC_PREFIX="/{}/{}/".format(WebDirConstant.FOLDER_STATIC, WebDirConstant.FOLDER_STATIC_WEB_ASSETS),
|
||||||
|
SECRET_KEY=self._model_store.config().map().get('secret_key'),
|
||||||
FLEET_ENABLED=self._model_store.variable().map().get('fleet_enabled').as_bool(),
|
FLEET_ENABLED=self._model_store.variable().map().get('fleet_enabled').as_bool(),
|
||||||
AUTH_ENABLED=self._model_store.variable().map().get('auth_enabled').as_bool(),
|
AUTH_ENABLED=self._model_store.variable().map().get('auth_enabled').as_bool(),
|
||||||
track_created=self._model_store.user().track_user_created,
|
track_created=self._model_store.user().track_user_created,
|
||||||
|
|||||||
@ -113,6 +113,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
var secret_key = '{{ SECRET_KEY }}';
|
||||||
var l = {
|
var l = {
|
||||||
'js_slideshow_slide_delete_confirmation': '{{ l.slideshow_slide_delete_confirmation }}',
|
'js_slideshow_slide_delete_confirmation': '{{ l.slideshow_slide_delete_confirmation }}',
|
||||||
'js_fleet_screen_delete_confirmation': '{{ l.js_fleet_screen_delete_confirmation }}',
|
'js_fleet_screen_delete_confirmation': '{{ l.js_fleet_screen_delete_confirmation }}',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user