# # Copyright (C) 2020-2024 Soleta Networks # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the # Free Software Foundation; either version 3 of the License, or # (at your option) any later version. import os import psutil import subprocess from src.log import OgError class OgWindowsOperations: def __init__(self): self.session = False def _restartBrowser(self, url): raise OgError('Function not implemented') def poweroff(self): os.system('shutdown -s -t 0') def reboot(self): os.system('shutdown -r -t 0') def shellrun(self, request, ogRest): cmd = request.getrun() is_inline = request.get_inline() if not is_inline: raise OgError("Only inline mode is supported on Windows") env = os.environ.copy() env['OutputEncoding'] = 'utf8' try: ogRest.proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, shell=True, env=env, ) output, error = ogRest.proc.communicate() except (OSError, subprocess.SubprocessError) as e: raise OgError(f'Error when running "shell run" subprocess: {e}') from e output = output.decode('utf-8-sig', errors='replace') return (ogRest.proc.returncode, cmd, output) def session(self, request, ogRest): raise OgError('Function not implemented') def software(self, request, ogRest): raise OgError('Function not implemented') def hardware(self, ogRest): raise OgError('Function not implemented') def setup(self, request, ogRest): raise OgError('Function not implemented') def image_restore(self, request, ogRest): raise OgError('Function not implemented') def image_create(self, request, ogRest): raise OgError('Function not implemented') def cache_delete(self, request, ogRest): raise OgError('Function not implemented') def cache_fetch(self, request, ogRest): raise OgError('Function not implemented') def refresh(self, ogRest): if self.session: session_value = 'WINS' else: session_value = 'WIN' return {"status": session_value} def check_interactive_session_change(self): old_status = self.session has_logged_user = False for user in psutil.users(): has_logged_user = True break self.session = has_logged_user if self.session != old_status: return self.session return None