def __init__(self, SETTINGS_FILE): """ Creates an instance of BlackHole Arguments: SETTINGS_FILE: Path of the settings File """ self.settings = None self.data = None self.information = None try: self._loadData(SETTINGS_FILE) Loger.write(self) if self.data.user.enable: if self.data.user.timeEnabled: now = datetime.now().time().replace(second=0) if not (self.data.user.timeFrom < now < self.data.user.timeTo): raise UserDisabledTime(self.data.user) self.data.user.lastLogin = datetime.now() self.data.user.save() else: raise UserDisabled(self.data.user) self.blackHoleBrowser = cursesGui.BlackHoleBrowser(self) except OperationalError as e: raise MysqlException(e) except Exception as e: raise e
def closeLog(self, signum=None, frame=None): if not self.closed: self.sessionStopDate = datetime.now() sessionDuration = round((self.sessionStopDate - self.sessionStartDate).total_seconds() / 60, 3) usage = "%s/%s" % (self.enterCount, sessionDuration) Loger.write("[logout] user=%s to=%s as=%s sessionID=%s usage=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID, usage)) self.blackHole.writeSessionLog(self.hostConnection.host, self.hostConnection.userAuthentication, self.sessionStartDate, self.sessionStopDate, sessionDuration, round(self.enterCount/sessionDuration,3), self.keyCount, self.logFile) self.closed = True
def closeLog(self, signum=None, frame=None): if not self.closed: self.sessionStopDate = datetime.now() sessionDuration = round( (self.sessionStopDate - self.sessionStartDate).total_seconds() / 60, 3) Loger.write("[logout] user=%s to=%s as=%s sessionID=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID)) self.blackHole.writeSessionLog( self.hostConnection.host, self.hostConnection.userAuthentication, self.sessionStartDate, self.sessionStopDate, sessionDuration, self.logFile) self.closed = True
def __init__(self, blackHole, widget, size): """ * blackHole: blackHole object * widget: HostTree object * size: size of the terminal """ self.blackHole = blackHole self.hostConnection = widget.hostConnectionObject self.widget = widget self.size = size self.userConnection = self.hostConnection.getConnectionUser(self.blackHole.data.user) self.enterCount = 0 self.keyCount = 0 self.sessionStartDate = datetime.now() self.sessionStopDate = None self.closed = False self.logFile = None try: paramiko_log_file = "/tmp/blackhole_%s.debug.log" % self.blackHole.data.user.userName if not os.path.exists(paramiko_log_file): open(paramiko_log_file, 'w').close() paramiko.util.log_to_file(paramiko_log_file) try: #Create the Socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(3) sock.connect((self.hostConnection.host.ip, self.hostConnection.host.port)) except Exception as e: exceptionMsg = "*** Connect failed: [%s] to %s" % (str(e), self.hostConnection.host.name) Loger.writeError(exceptionMsg) raise Exception(exceptionMsg) try: # Create the Transport t = paramiko.Transport(sock) try: #Connect to the ssh server t.start_client() try: t.auth_publickey(self.userConnection, self.widget.pk) Loger.write("[login] user=%s to=%s as=%s sessionID=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID)) except paramiko.SSHException as e: t.close() sock.close() Loger.writeError("%s [%s] %s " % (self.blackHole.data.user.userName, self.hostConnection.host.name, e.message)) raise Exception(e) chan = t.open_session() cols, rows = size chan.get_pty('xterm', cols, rows) chan.invoke_shell() self.interactiveShell(chan) chan.close() t.close() sock.close() self.closeLog() except paramiko.SSHException as e: exceptionMsg = '*** SSH negotiation failed to %s.' % self.hostConnection.host.name Loger.writeError(exceptionMsg) t.close() sock.close() raise Exception(exceptionMsg) except Exception as e: raise(e) except Exception as e: raise Exception(e) except Exception as e: raise Exception(e)
def __init__(self, widget, size): """ * blackHole: blackHole object * widget: HostTree object * size: size of the terminal """ self.blackHole = blackHole.BlackHole.instance self.hostConnection = widget.hostConnectionObject self.widget = widget self.size = size self.userConnection = self.hostConnection.getConnectionUser( self.blackHole.data.user) self.sessionStartDate = datetime.now() self.sessionStopDate = None self.closed = False self.logFile = None try: paramiko.util.logging.getLogger().setLevel(30) try: #Create the Socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(3) sock.connect((self.hostConnection.host.ip, self.hostConnection.host.port)) except Exception as e: exceptionMsg = "*** Connect failed: [%s] to %s" % ( str(e), self.hostConnection.host.name) Loger.writeError(exceptionMsg) raise Exception(exceptionMsg) try: # Create the Transport t = paramiko.Transport(sock) try: #Connect to the ssh server t.start_client() try: t.auth_publickey(self.userConnection, self.widget.pk) Loger.write( "[login] user=%s to=%s as=%s sessionID=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID)) except paramiko.SSHException as e: t.close() sock.close() Loger.writeError( "%s [%s] %s " % (self.blackHole.data.user.userName, self.hostConnection.host.name, e.message)) raise Exception(e) chan = t.open_session() cols, rows = size chan.get_pty('xterm', cols, rows) chan.invoke_shell() self.interactiveShell(chan) chan.close() t.close() sock.close() self.closeLog() except paramiko.SSHException as e: exceptionMsg = '*** SSH negotiation failed to %s.' % self.hostConnection.host.name Loger.writeError(exceptionMsg) t.close() sock.close() raise Exception(exceptionMsg) except Exception as e: raise e except Exception as e: raise Exception(e) except Exception as e: raise Exception(e)
def run(self): """Handle user input and display updating.""" try: self.ui.tty_signal_keys('undefined', 'undefined', 'undefined', 'undefined', 'undefined') self.ui.set_mouse_tracking() self.size = self.ui.get_cols_rows() while 1: focus, _ign = self.listbox.body.get_focus() self.header_text = [ ('footer_msg', "BlackHole (v%s)" % black_hole.get_version()), " ", ('footer_msg', _("User:"******" ", ('key', "%s" % self.user.getFullName()), " ", ('footer_msg', _("- Selected:")), " ", ('key', "%s" % focus.description), ] self.header.set_text(self.header_text) canvas = self.view.render(self.size, focus=1) self.ui.draw_screen(self.size, canvas) keys = None while not keys: keys = self.ui.get_input() for k in keys: if urwid.is_mouse_event(k): event, button, col, row = k self.view.mouse_event(self.size, event, button, col, row, focus=True) _widget, _tupla = self.listbox.get_focus() if isinstance(_widget, HostTree): if _widget.lastWasDoubleClick( ) and event == 'mouse press': self.validate(_widget) else: if k == 'window resize': self.size = self.ui.get_cols_rows() elif k in ('q', 'Q'): self.quit = True self.stopUI() return elif k in ('c', 'C'): if self.blackHole.settings.chat_enabled: self.stopUI() self.startChat() self.startUI() Loger.write(_("Chat not Enabled")) elif k == 'right': # right can behave like + k = "+" k = self.view.keypress(self.size, k) if k == "enter": _widget, _tupla = self.listbox.get_focus() if isinstance(_widget, HostTree): self.validate(_widget) else: continue elif k == 'left': self.move_focus_to_parent(self.size) elif k == '-': self.collapse_focus_parent(self.size) elif k == 'home': self.focus_home(self.size) elif k == 'end': self.focus_end(self.size) except Exception as e: raise Exception(e.message)
def run(self): """Handle user input and display updating.""" try: self.ui.tty_signal_keys('undefined', 'undefined', 'undefined', 'undefined', 'undefined') self.ui.set_mouse_tracking() self.size = self.ui.get_cols_rows() while 1: focus, _ign = self.listbox.body.get_focus() self.header_text = [ ('footer_msg', "BlackHole (v%s)" % black_hole.get_version()) , " ", ('footer_msg', _("User:"******" ", ('key', "%s" % self.user.getFullName()), " ", ('footer_msg', _("- Selected:")) , " ", ('key', "%s" % focus.description), ] self.header.set_text(self.header_text) canvas = self.view.render(self.size, focus=1) self.ui.draw_screen(self.size, canvas) keys = None while not keys: keys = self.ui.get_input() for k in keys: if urwid.is_mouse_event(k): event, button, col, row = k self.view.mouse_event(self.size, event, button, col, row, focus=True) _widget, _tupla = self.listbox.get_focus() if isinstance(_widget, HostTree): if _widget.lastWasDoubleClick() and event == 'mouse press': self.validate(_widget) else: if k == 'window resize': self.size = self.ui.get_cols_rows() elif k in ('q', 'Q'): self.quit = True self.stopUI() return elif k in ('c', 'C'): if self.blackHole.settings.chat_enabled: self.stopUI() self.startChat() self.startUI() Loger.write(_("Chat not Enabled")) elif k == 'right': # right can behave like + k = "+" k = self.view.keypress(self.size, k) if k == "enter": _widget, _tupla = self.listbox.get_focus() if isinstance(_widget, HostTree): self.validate(_widget) else: continue elif k == 'left': self.move_focus_to_parent(self.size) elif k == '-': self.collapse_focus_parent(self.size) elif k == 'home': self.focus_home(self.size) elif k == 'end': self.focus_end(self.size) except Exception as e: raise Exception(e.message)