mirror of
https://github.com/damp11113/PyserSSH.git
synced 2025-04-28 15:08:15 +00:00
Compare commits
No commits in common. "main" and "5.1" have entirely different histories.
@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
os.environ["damp11113_load_all_module"] = "NO"
|
os.environ["damp11113_load_all_module"] = "NO"
|
||||||
|
|
||||||
|
from damp11113.utils import TextFormatter
|
||||||
|
from damp11113.file import sort_files, allfiles
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
import cv2
|
import cv2
|
||||||
@ -26,63 +28,6 @@ from PyserSSH.system.clientype import Client
|
|||||||
from PyserSSH.system.RemoteStatus import remotestatus
|
from PyserSSH.system.RemoteStatus import remotestatus
|
||||||
from PyserSSH.utils.ServerManager import ServerManager
|
from PyserSSH.utils.ServerManager import ServerManager
|
||||||
|
|
||||||
class TextFormatter:
|
|
||||||
RESET = "\033[0m"
|
|
||||||
TEXT_COLORS = {
|
|
||||||
"black": "\033[30m",
|
|
||||||
"red": "\033[31m",
|
|
||||||
"green": "\033[32m",
|
|
||||||
"yellow": "\033[33m",
|
|
||||||
"blue": "\033[34m",
|
|
||||||
"magenta": "\033[35m",
|
|
||||||
"cyan": "\033[36m",
|
|
||||||
"white": "\033[37m"
|
|
||||||
}
|
|
||||||
TEXT_COLOR_LEVELS = {
|
|
||||||
"light": "\033[1;{}m", # Light color prefix
|
|
||||||
"dark": "\033[2;{}m" # Dark color prefix
|
|
||||||
}
|
|
||||||
BACKGROUND_COLORS = {
|
|
||||||
"black": "\033[40m",
|
|
||||||
"red": "\033[41m",
|
|
||||||
"green": "\033[42m",
|
|
||||||
"yellow": "\033[43m",
|
|
||||||
"blue": "\033[44m",
|
|
||||||
"magenta": "\033[45m",
|
|
||||||
"cyan": "\033[46m",
|
|
||||||
"white": "\033[47m"
|
|
||||||
}
|
|
||||||
TEXT_ATTRIBUTES = {
|
|
||||||
"bold": "\033[1m",
|
|
||||||
"italic": "\033[3m",
|
|
||||||
"underline": "\033[4m",
|
|
||||||
"blink": "\033[5m",
|
|
||||||
"reverse": "\033[7m",
|
|
||||||
"strikethrough": "\033[9m"
|
|
||||||
}
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def format_text_truecolor(text, color=None, background=None, attributes=None, target_text=''):
|
|
||||||
formatted_text = ""
|
|
||||||
start_index = text.find(target_text)
|
|
||||||
end_index = start_index + len(target_text) if start_index != -1 else len(text)
|
|
||||||
|
|
||||||
if color:
|
|
||||||
formatted_text += f"\033[38;2;{color}m"
|
|
||||||
|
|
||||||
if background:
|
|
||||||
formatted_text += f"\033[48;2;{background}m"
|
|
||||||
|
|
||||||
if attributes in TextFormatter.TEXT_ATTRIBUTES:
|
|
||||||
formatted_text += TextFormatter.TEXT_ATTRIBUTES[attributes]
|
|
||||||
|
|
||||||
if target_text == "":
|
|
||||||
formatted_text += text + TextFormatter.RESET
|
|
||||||
else:
|
|
||||||
formatted_text += text[:start_index] + text[start_index:end_index] + TextFormatter.RESET + text[end_index:]
|
|
||||||
|
|
||||||
return formatted_text
|
|
||||||
|
|
||||||
useraccount = AccountManager(allow_guest=True, autoload=True, autosave=True)
|
useraccount = AccountManager(allow_guest=True, autoload=True, autosave=True)
|
||||||
|
|
||||||
if not os.path.isfile("autosave_session.ses"):
|
if not os.path.isfile("autosave_session.ses"):
|
||||||
|
5
setup.py
5
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='PyserSSH',
|
name='PyserSSH',
|
||||||
version='5.1.4',
|
version='5.1',
|
||||||
license='MIT',
|
license='MIT',
|
||||||
author='DPSoftware Foundation',
|
author='DPSoftware Foundation',
|
||||||
author_email='contact@damp11113.xyz',
|
author_email='contact@damp11113.xyz',
|
||||||
@ -37,8 +37,7 @@ setup(
|
|||||||
"keyboard",
|
"keyboard",
|
||||||
"Brotli",
|
"Brotli",
|
||||||
"pillow",
|
"pillow",
|
||||||
"numpy",
|
"numpy"
|
||||||
"opencv-python"
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
)
|
)
|
@ -240,14 +240,8 @@ class Server:
|
|||||||
if echo:
|
if echo:
|
||||||
channel.send(replace_enter_with_crlf(self.client_handlers[channel.getpeername()]["prompt"] + " "))
|
channel.send(replace_enter_with_crlf(self.client_handlers[channel.getpeername()]["prompt"] + " "))
|
||||||
|
|
||||||
isConnect = True
|
while True:
|
||||||
|
expect(self, self.client_handlers[channel.getpeername()], echo)
|
||||||
while isConnect:
|
|
||||||
isConnect = expect(self, self.client_handlers[channel.getpeername()], echo)
|
|
||||||
|
|
||||||
self._handle_event("disconnected", self.client_handlers[peername])
|
|
||||||
channel.close()
|
|
||||||
bh_session.close()
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
self._handle_event("disconnected", self.client_handlers[peername])
|
self._handle_event("disconnected", self.client_handlers[peername])
|
||||||
channel.close()
|
channel.close()
|
||||||
@ -258,7 +252,6 @@ class Server:
|
|||||||
finally:
|
finally:
|
||||||
self._handle_event("disconnected", self.client_handlers[peername])
|
self._handle_event("disconnected", self.client_handlers[peername])
|
||||||
channel.close()
|
channel.close()
|
||||||
bh_session.close()
|
|
||||||
else:
|
else:
|
||||||
if self.sftpena:
|
if self.sftpena:
|
||||||
logger.info("user is sftp")
|
logger.info("user is sftp")
|
||||||
|
@ -25,7 +25,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#import serial
|
import serial
|
||||||
import socket
|
import socket
|
||||||
import paramiko
|
import paramiko
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
@ -25,7 +25,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
version = "5.1.4"
|
version = "5.1"
|
||||||
|
|
||||||
system_banner = (
|
system_banner = (
|
||||||
f"\033[36mPyserSSH V{version} \033[0m"
|
f"\033[36mPyserSSH V{version} \033[0m"
|
||||||
|
@ -212,7 +212,8 @@ def expect(self, client, echo=True):
|
|||||||
finally:
|
finally:
|
||||||
try:
|
try:
|
||||||
if not byte:
|
if not byte:
|
||||||
return False
|
logger.info(f"{peername} is disconnected")
|
||||||
return True
|
self._handle_event("disconnected", self.client_handlers[peername])
|
||||||
except:
|
except:
|
||||||
return False
|
logger.info(f"{peername} is disconnected")
|
||||||
|
self._handle_event("disconnected", self.client_handlers[peername])
|
@ -42,7 +42,6 @@ if platform.system() == "Windows":
|
|||||||
|
|
||||||
logger = logging.getLogger("PyserSSH.RemoteStatus")
|
logger = logging.getLogger("PyserSSH.RemoteStatus")
|
||||||
|
|
||||||
if platform.system() == "Windows":
|
|
||||||
class LASTINPUTINFO(ctypes.Structure):
|
class LASTINPUTINFO(ctypes.Structure):
|
||||||
_fields_ = [
|
_fields_ = [
|
||||||
('cbSize', ctypes.c_uint),
|
('cbSize', ctypes.c_uint),
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
"""
|
|
||||||
PyserSSH - A Scriptable SSH server. For more info visit https://github.com/DPSoftware-Foundation/PyserSSH
|
|
||||||
Copyright (C) 2023-present DPSoftware Foundation (MIT)
|
|
||||||
|
|
||||||
Visit https://github.com/DPSoftware-Foundation/PyserSSH
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
note
|
|
||||||
|
|
||||||
ansi cursor arrow
|
|
||||||
up - \x1b[A
|
|
||||||
down - \x1b[B
|
|
||||||
left - \x1b[D
|
|
||||||
right - \x1b[C
|
|
||||||
|
|
||||||
https://en.wikipedia.org/wiki/ANSI_escape_code
|
|
||||||
"""
|
|
@ -9,5 +9,4 @@ python setup.py sdist
|
|||||||
title uploading to pypi
|
title uploading to pypi
|
||||||
twine upload -r pypi dist/*
|
twine upload -r pypi dist/*
|
||||||
|
|
||||||
title done!
|
|
||||||
pause
|
pause
|
Loading…
x
Reference in New Issue
Block a user