From d0ee2608aa36224fca7e381d6cf93e32ddc1512f Mon Sep 17 00:00:00 2001 From: wenfei6316 Date: Wed, 8 Jan 2025 21:21:27 +0800 Subject: [PATCH] develop django5 webssh Signed-off-by: wenfei6316 --- config/asgi.py | 11 +- config/settings.py | 11 +- config/urls.py | 8 +- manage.py | 2 - static/bootbox/5.4.0/bootbox.min.js | 1 + static/bootstrap.min.css | 6 + static/bootstrap/3.3.7/bootstrap.min.css | 6 + static/bootstrap/3.3.7/bootstrap.min.js | 7 + static/jquery.min.js | 5 + static/jquery/3.4.1/jquery.min.js | 2 + static/xterm/3.14.5/addons/attach.min.js | 1 + static/xterm/3.14.5/addons/fit.min.js | 1 + static/xterm/3.14.5/addons/fullscreen.min.css | 2 + static/xterm/3.14.5/addons/fullscreen.min.js | 1 + static/xterm/3.14.5/addons/search.min.js | 1 + static/xterm/3.14.5/addons/terminado.min.js | 1 + static/xterm/3.14.5/addons/webLinks.min.js | 1 + static/xterm/3.14.5/addons/zmodem.min.js | 1 + static/xterm/3.14.5/xterm.min.css | 2 + static/xterm/3.14.5/xterm.min.js | 1 + static/xterm/4.4.0/xterm.css | 171 + static/xterm/4.4.0/xterm.min.js | 2 + static/xterm/style.css | 32 + static/xterm/terminado.js | 69 + static/xterm/terminado.js.map | 1 + static/xterm/xterm.css | 164 + static/xterm/xterm.js | 8907 +++++++++++++++++ static/xterm/xterm.js.map | 1 + static/zmodem/zmodem.devel.js | 4293 ++++++++ static/zmodem/zmodem.min.js | 1 + templates/index.html | 120 + webssh/static/favicon.ico | Bin 0 -> 9662 bytes webssh/static/webssh.js | 280 + webssh/tools/security.py | 29 + webssh/tools/ssh.py | 142 + webssh/urls.py | 2 +- webssh/views.py | 22 +- webssh/websocket.py | 115 + 38 files changed, 14413 insertions(+), 9 deletions(-) create mode 100644 static/bootbox/5.4.0/bootbox.min.js create mode 100644 static/bootstrap.min.css create mode 100644 static/bootstrap/3.3.7/bootstrap.min.css create mode 100644 static/bootstrap/3.3.7/bootstrap.min.js create mode 100644 static/jquery.min.js create mode 100644 static/jquery/3.4.1/jquery.min.js create mode 100644 static/xterm/3.14.5/addons/attach.min.js create mode 100644 static/xterm/3.14.5/addons/fit.min.js create mode 100644 static/xterm/3.14.5/addons/fullscreen.min.css create mode 100644 static/xterm/3.14.5/addons/fullscreen.min.js create mode 100644 static/xterm/3.14.5/addons/search.min.js create mode 100644 static/xterm/3.14.5/addons/terminado.min.js create mode 100644 static/xterm/3.14.5/addons/webLinks.min.js create mode 100644 static/xterm/3.14.5/addons/zmodem.min.js create mode 100644 static/xterm/3.14.5/xterm.min.css create mode 100644 static/xterm/3.14.5/xterm.min.js create mode 100644 static/xterm/4.4.0/xterm.css create mode 100644 static/xterm/4.4.0/xterm.min.js create mode 100644 static/xterm/style.css create mode 100644 static/xterm/terminado.js create mode 100644 static/xterm/terminado.js.map create mode 100644 static/xterm/xterm.css create mode 100644 static/xterm/xterm.js create mode 100644 static/xterm/xterm.js.map create mode 100644 static/zmodem/zmodem.devel.js create mode 100644 static/zmodem/zmodem.min.js create mode 100644 templates/index.html create mode 100644 webssh/static/favicon.ico create mode 100644 webssh/static/webssh.js create mode 100644 webssh/tools/security.py create mode 100644 webssh/tools/ssh.py create mode 100644 webssh/websocket.py diff --git a/config/asgi.py b/config/asgi.py index 5fd82ad..631349c 100644 --- a/config/asgi.py +++ b/config/asgi.py @@ -8,9 +8,16 @@ https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/ """ import os - +from channels.auth import AuthMiddlewareStack +from config.urls import websocket_urlpatterns +from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') -application = get_asgi_application() +application = ProtocolTypeRouter({ + "http": get_asgi_application(), + 'websocket': AuthMiddlewareStack( + URLRouter(websocket_urlpatterns) + ), +}) diff --git a/config/settings.py b/config/settings.py index 5277123..3a3ea47 100644 --- a/config/settings.py +++ b/config/settings.py @@ -15,6 +15,10 @@ from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent +SSHKEY_PATH = os.path.join(BASE_DIR, '.ssh') + +if not os.path.isdir(SSHKEY_PATH): + os.makedirs(SSHKEY_PATH) # Quick-start development settings - unsuitable for production @@ -32,6 +36,7 @@ ALLOWED_HOSTS = [ "*" ] # Application definition INSTALLED_APPS = [ + 'daphne', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -39,6 +44,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'webssh.apps.WebsshConfig', + 'channels', ] MIDDLEWARE = [ @@ -72,6 +78,8 @@ TEMPLATES = [ }, ] +ASGI_APPLICATION = 'config.asgi.application' + WSGI_APPLICATION = 'config.wsgi.application' @@ -131,10 +139,9 @@ STATICFILES_DIRS = [ BASE_DIR / "webssh/static", ] -# 设置媒体路由 +# Media files (mp4, avi) MEDIA_URL = 'media/' -# 设置media目录的完整路径 MEDIA_ROOT = BASE_DIR / 'media' # Default primary key field type diff --git a/config/urls.py b/config/urls.py index 4567571..df1f364 100644 --- a/config/urls.py +++ b/config/urls.py @@ -14,12 +14,18 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ +import webssh.views from django.contrib import admin from django.urls import path, re_path, include from django.views.generic import RedirectView -import webssh.views +from webssh.websocket import WebSSH urlpatterns = [ path('admin/', admin.site.urls), + path('index/', webssh.views.index), path('webssh/', include(('webssh.urls', 'webssh'), namespace='webssh')), ] + +websocket_urlpatterns = [ + path('ws/', WebSSH.as_asgi()), +] diff --git a/manage.py b/manage.py index 0336a52..3fce01b 100755 --- a/manage.py +++ b/manage.py @@ -4,7 +4,6 @@ import os import sys from django.core.management.commands.runserver import Command as Runserver - def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') @@ -18,7 +17,6 @@ def main(): ) from exc execute_from_command_line(sys.argv) - if __name__ == '__main__': Runserver.default_addr = '192.168.3.50' Runserver.default_port = '8099' diff --git a/static/bootbox/5.4.0/bootbox.min.js b/static/bootbox/5.4.0/bootbox.min.js new file mode 100644 index 0000000..8b8a019 --- /dev/null +++ b/static/bootbox/5.4.0/bootbox.min.js @@ -0,0 +1 @@ +!function(t,e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):t.bootbox=e(t.jQuery)}(this,function e(p,u){"use strict";var r,n,i,l;Object.keys||(Object.keys=(r=Object.prototype.hasOwnProperty,n=!{toString:null}.propertyIsEnumerable("toString"),l=(i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"]).length,function(t){if("function"!=typeof t&&("object"!=typeof t||null===t))throw new TypeError("Object.keys called on non-object");var e,o,a=[];for(e in t)r.call(t,e)&&a.push(e);if(n)for(o=0;o