From c54425ba9bb4f9345e021e1a8daecdec8838b1dc Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Wed, 06 Jul 2016 20:15:26 +0000 Subject: [PATCH] Missing files for remote connection --- python/trisurf/Remote.py | 73 ++++++++++++++++++++++++ python/trisurf/WebTrisurf.py | 56 ++++++++++++++++++ 2 files changed, 129 insertions(+), 0 deletions(-) diff --git a/python/trisurf/Remote.py b/python/trisurf/Remote.py new file mode 100644 index 0000000..8da08be --- /dev/null +++ b/python/trisurf/Remote.py @@ -0,0 +1,73 @@ +import paramiko + + + +class Connection: + def __init__(self, hostname, port=22, username=None, password=None): + self.hostname=hostname + self.port=port + if(username!=None): + self.username=username + else: + self.username='' + if(password!=None): + self.password=password + else: + self.password='' + self.ssh=paramiko.SSHClient() + self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + self.connected=False + return + + def connect(self, Timeout=5): + if(not self.connected): + try: + print("Trying to connect to: "+self.username+"@"+self.hostname+":"+str(self.port)+".") + self.ssh.connect(self.hostname, username=self.username, password=self.password, port=self.port, timeout=Timeout) + self.connected=True + except: + print("Error establishing connection with "+self.username+"@"+self.hostname+":"+str(self.port)+".") + exit(1) + else: + print("Already connected!") + return + + def disconnect(self): + if(self.connected): + try: + self.ssh.close() + except: + print("Cannot disconect. Unknown error.") + else: + print("Cannot disconect. Already disconnected.") + self.connected=False + + def execute(self,command): + if(self.connected): + try: + stdin,stdout,stderr=self.ssh.exec_command(command) + output=stdout.readlines() + errors=stderr.readlines() + # print(errors) + return(output) + except: + print("Cannot execute remote commands") + else: + print("Cannot execute remote commands. Connect first.") + + def send_file(self, local, remote): + sftp=self.ssh.open_sftp() + sftp.put(local,remote) + sftp.close() + + def receive_file(self,remote,local): + sftp=self.ssh.open_sftp() + sftp.get(remote,local) + sftp.close() + + def mkdir_remote(self,directory): + sftp=self.ssh.open_sftp() + sftp.mkdir(directory) + sftp.close() + + diff --git a/python/trisurf/WebTrisurf.py b/python/trisurf/WebTrisurf.py new file mode 100644 index 0000000..0ececbc --- /dev/null +++ b/python/trisurf/WebTrisurf.py @@ -0,0 +1,56 @@ +import subprocess +from urllib.parse import urlparse +import http.server +import socketserver +import sys, os + +#Web server +class TsWEB(http.server.BaseHTTPRequestHandler): + def do_GET(self): + parsed_path=urlparse(self.path) + """ message_parts = [ + 'CLIENT VALUES:', + 'client_address=%s (%s)' % (self.client_address, self.address_string()), + 'command=%s' % self.command, + 'path=%s' % self.path, + 'real path=%s' % parsed_path.path, + 'query=%s' % parsed_path.query, + 'request_version=%s' % self.request_version, + '', + 'SERVER VALUES:', + 'server_version=%s' % self.server_version, + 'sys_version=%s' % self.sys_version, + 'protocol_version=%s' % self.protocol_version, + '', + 'HEADERS RECEIVED:', + ] + for name, value in sorted(self.headers.items()): + message_parts.append('%s=%s' % (name, value.rstrip())) + message_parts.append('') + message = '<br>'.join(message_parts) """ + self.send_response(200) + self.end_headers() + self.wfile.write(b"<h1>Trisurf-ng manager web interface</h1><hr>") + oldstdout=sys.stdout + process=subprocess.Popen (['/usr/bin/python3', sys.argv[0], '-s', '--html'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr= process.communicate() + output=stdout.decode('ascii') + output=output.replace('\n','<BR>') + output=bytearray(output,'ascii') + self.wfile.write(output) + + + + +class WebServer(): + def __init__(self, port=8000): + http_server = socketserver.TCPServer(('', port), TsWEB) + try: + http_server.serve_forever() + except KeyboardInterrupt: + print('^C received, shutting down the web server') + http_server.socket.close() + + + + -- Gitblit v1.9.3