InPanel 1.2.2__tar.gz → 1.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/PKG-INFO +3 -3
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/SOURCES.txt +28 -15
- {inpanel-1.2.2 → inpanel-1.2.3}/PKG-INFO +3 -3
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/app.py +11 -6
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/base.py +49 -42
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/apt.py +136 -7
- inpanel-1.2.3/inpanel/mod/brew.py +242 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/dnf.py +138 -7
- inpanel-1.2.3/inpanel/mod/docker.py +440 -0
- inpanel-1.2.3/inpanel/mod/pip.py +207 -0
- inpanel-1.2.3/inpanel/mod/plugins.py +525 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/server.py +41 -25
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/service.py +18 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/yum.py +135 -6
- inpanel-1.2.3/inpanel/plugin.py +204 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/index.html +1 -1
- inpanel-1.2.3/inpanel/public/js/controllers/container.js +195 -0
- inpanel-1.2.3/inpanel/public/js/controllers/plugins.js +222 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/service.js +582 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/utils.js +106 -201
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/core.js +22 -1
- inpanel-1.2.3/inpanel/public/partials/container/index.html +348 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/navbar.html +2 -1
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/main.html +22 -5
- inpanel-1.2.3/inpanel/public/partials/plugins/config.html +25 -0
- inpanel-1.2.3/inpanel/public/partials/plugins/detail.html +61 -0
- inpanel-1.2.3/inpanel/public/partials/plugins/index.html +51 -0
- inpanel-1.2.3/inpanel/public/partials/plugins/info.html +23 -0
- inpanel-1.2.3/inpanel/public/partials/service/fail2ban.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/firewalld.html +40 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/index.html +191 -16
- inpanel-1.2.3/inpanel/public/partials/service/java11.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/java17.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/java21.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/java8.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/nodejs18.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/nodejs20.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/nodejs22.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/nodejs24.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/service/php56.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php74.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php80.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php81.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php82.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php83.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/php84.html +233 -0
- inpanel-1.2.3/inpanel/public/partials/service/ufw.html +40 -0
- inpanel-1.2.3/inpanel/public/partials/utils/repository.html +644 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/templates/index.html +1 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/web.py +299 -96
- {inpanel-1.2.2 → inpanel-1.2.3}/pyproject.toml +3 -3
- inpanel-1.2.2/inpanel/data/bookmarks.ini +0 -20
- inpanel-1.2.2/inpanel/data/config.ini +0 -29
- inpanel-1.2.2/inpanel/data/error.log +0 -294
- inpanel-1.2.2/inpanel/data/history.txt +0 -30
- inpanel-1.2.2/inpanel/data/inpanel.pid +0 -1
- inpanel-1.2.2/inpanel/data/lastfile.ini +0 -4
- inpanel-1.2.2/inpanel/data/main.log +0 -3300
- inpanel-1.2.2/inpanel/data/upgrade.ini +0 -6
- inpanel-1.2.2/inpanel/plugins/__init__.py +0 -10
- inpanel-1.2.2/inpanel/plugins/acme/static/index.html +0 -10
- inpanel-1.2.2/inpanel/plugins/acme/static/index.js +0 -13
- inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/info.py +0 -73
- inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/static/index.html +0 -70
- inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/static/index.js +0 -18
- inpanel-1.2.2/inpanel/public/js/controllers/plugins.js +0 -105
- inpanel-1.2.2/inpanel/public/partials/plugins/index.html +0 -55
- inpanel-1.2.2/inpanel/public/partials/plugins/plugins.html +0 -13
- inpanel-1.2.2/inpanel/public/partials/utils/repository.html +0 -373
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/dependency_links.txt +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/entry_points.txt +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/requires.txt +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/InPanel.egg-info/top_level.txt +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/LICENSE +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/MANIFEST.in +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/README.md +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/__init__.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/acme.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/aliyuncs.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/apt.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/config.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/dnf.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/__init__.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/async_process.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/filelock.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/magic.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/pxssh.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/lib/pyDes.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/__init__.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/certificate.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/config.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/cron.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/disk.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/file.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall_base.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall_firewalld.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall_iptables.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall_macos.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/firewall_ufw.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/ftp.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/httpd.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/lighttpd.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/login.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/mysql.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/named.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/nginx.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package_apt.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package_base.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package_dnf.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package_map.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/package_yum.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/php.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/process.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/proftpd.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/pureftpd.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/query.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/setting.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/shell.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/ssh.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/system.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/task.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/ufw.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/user.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/mod/vsftpd.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/css/global.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/favicon.ico +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/images/alipay.jpg +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/images/loading.gif +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/images/weixin.jpg +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/controllers.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/database.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/ecs.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/file.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/controllers/site.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/directives.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/filters.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/js/services.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/angular/1.0.2/angular-resource.min.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/angular/1.0.2/angular.min.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap.css.map +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap.min.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/js/bootstrap.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/js/bootstrap.min.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/bootstrap/js/npm.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/codemirror/codemirror-compressed.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/codemirror/codemirror.css +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/jquery/jquery-1.12.4.min.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/md5/md5.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/lib/md5/md5.min.js +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/database/index.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/database/mysql/dbedit.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/database/mysql/dbnew.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/database/mysql/useredit.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/database/mysql/usernew.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/message.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/selector.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvbase.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvext.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvfile.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvinstall.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvlog.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvminiop.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvuninstall.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/directives/srvupdate.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/ecs/account.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/ecs/ecs.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/ecs/index.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/ecs/setings.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/file/file.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/file/trash.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/ftp.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/log.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/login.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/logout.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/secure.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/apache.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/cron.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/iptables.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/lighttpd.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/mariadb.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/memcache.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/minio.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/mongodb.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/mysql.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/named.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/nginx.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/ntp.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/php.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/proftpd.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/pureftpd.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/redis.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/samba.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/sendmail.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/ssh.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/tomcat.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/service/vsftpd.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/setting.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/site/apache/site.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/site/index.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/site/nginx/site.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/sorry.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/autofm.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/backup.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/index.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/migrate.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/movedata.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/storage/remote.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/cron.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/firewall.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/index.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/network.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/process.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/shell.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/ssl.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/time.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/partials/utils/user.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/public/robots.txt +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/remote.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/templates/file/preview.html +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/utils.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/inpanel/yum.py +0 -0
- {inpanel-1.2.2 → inpanel-1.2.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: InPanel - A Web-based Linux Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
@@ -35,9 +35,9 @@ License: BSD 3-Clause License
|
|
|
35
35
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
36
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
37
|
|
|
38
|
-
Project-URL: Homepage, https://inpanel.org
|
|
38
|
+
Project-URL: Homepage, https://inpanel.org
|
|
39
39
|
Project-URL: Repository, https://github.com/inpanel/inpanel
|
|
40
|
-
Project-URL: Documentation, https://inpanel.org
|
|
40
|
+
Project-URL: Documentation, https://inpanel.org
|
|
41
41
|
Project-URL: Issues, https://github.com/inpanel/inpanel/issues
|
|
42
42
|
Keywords: server,management,admin,panel,linux
|
|
43
43
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -16,18 +16,11 @@ inpanel/apt.py
|
|
|
16
16
|
inpanel/base.py
|
|
17
17
|
inpanel/config.py
|
|
18
18
|
inpanel/dnf.py
|
|
19
|
+
inpanel/plugin.py
|
|
19
20
|
inpanel/remote.py
|
|
20
21
|
inpanel/utils.py
|
|
21
22
|
inpanel/web.py
|
|
22
23
|
inpanel/yum.py
|
|
23
|
-
inpanel/data/bookmarks.ini
|
|
24
|
-
inpanel/data/config.ini
|
|
25
|
-
inpanel/data/error.log
|
|
26
|
-
inpanel/data/history.txt
|
|
27
|
-
inpanel/data/inpanel.pid
|
|
28
|
-
inpanel/data/lastfile.ini
|
|
29
|
-
inpanel/data/main.log
|
|
30
|
-
inpanel/data/upgrade.ini
|
|
31
24
|
inpanel/lib/__init__.py
|
|
32
25
|
inpanel/lib/async_process.py
|
|
33
26
|
inpanel/lib/filelock.py
|
|
@@ -36,11 +29,13 @@ inpanel/lib/pxssh.py
|
|
|
36
29
|
inpanel/lib/pyDes.py
|
|
37
30
|
inpanel/mod/__init__.py
|
|
38
31
|
inpanel/mod/apt.py
|
|
32
|
+
inpanel/mod/brew.py
|
|
39
33
|
inpanel/mod/certificate.py
|
|
40
34
|
inpanel/mod/config.py
|
|
41
35
|
inpanel/mod/cron.py
|
|
42
36
|
inpanel/mod/disk.py
|
|
43
37
|
inpanel/mod/dnf.py
|
|
38
|
+
inpanel/mod/docker.py
|
|
44
39
|
inpanel/mod/file.py
|
|
45
40
|
inpanel/mod/firewall.py
|
|
46
41
|
inpanel/mod/firewall_base.py
|
|
@@ -62,6 +57,8 @@ inpanel/mod/package_dnf.py
|
|
|
62
57
|
inpanel/mod/package_map.py
|
|
63
58
|
inpanel/mod/package_yum.py
|
|
64
59
|
inpanel/mod/php.py
|
|
60
|
+
inpanel/mod/pip.py
|
|
61
|
+
inpanel/mod/plugins.py
|
|
65
62
|
inpanel/mod/process.py
|
|
66
63
|
inpanel/mod/proftpd.py
|
|
67
64
|
inpanel/mod/pureftpd.py
|
|
@@ -77,12 +74,6 @@ inpanel/mod/ufw.py
|
|
|
77
74
|
inpanel/mod/user.py
|
|
78
75
|
inpanel/mod/vsftpd.py
|
|
79
76
|
inpanel/mod/yum.py
|
|
80
|
-
inpanel/plugins/__init__.py
|
|
81
|
-
inpanel/plugins/acme/static/index.html
|
|
82
|
-
inpanel/plugins/acme/static/index.js
|
|
83
|
-
inpanel/plugins/shadowsocks-libev/info.py
|
|
84
|
-
inpanel/plugins/shadowsocks-libev/static/index.html
|
|
85
|
-
inpanel/plugins/shadowsocks-libev/static/index.js
|
|
86
77
|
inpanel/public/favicon.ico
|
|
87
78
|
inpanel/public/index.html
|
|
88
79
|
inpanel/public/robots.txt
|
|
@@ -94,6 +85,7 @@ inpanel/public/js/core.js
|
|
|
94
85
|
inpanel/public/js/directives.js
|
|
95
86
|
inpanel/public/js/filters.js
|
|
96
87
|
inpanel/public/js/services.js
|
|
88
|
+
inpanel/public/js/controllers/container.js
|
|
97
89
|
inpanel/public/js/controllers/controllers.js
|
|
98
90
|
inpanel/public/js/controllers/database.js
|
|
99
91
|
inpanel/public/js/controllers/ecs.js
|
|
@@ -135,6 +127,7 @@ inpanel/public/partials/main.html
|
|
|
135
127
|
inpanel/public/partials/secure.html
|
|
136
128
|
inpanel/public/partials/setting.html
|
|
137
129
|
inpanel/public/partials/sorry.html
|
|
130
|
+
inpanel/public/partials/container/index.html
|
|
138
131
|
inpanel/public/partials/database/index.html
|
|
139
132
|
inpanel/public/partials/database/mysql/dbedit.html
|
|
140
133
|
inpanel/public/partials/database/mysql/dbnew.html
|
|
@@ -157,12 +150,20 @@ inpanel/public/partials/ecs/index.html
|
|
|
157
150
|
inpanel/public/partials/ecs/setings.html
|
|
158
151
|
inpanel/public/partials/file/file.html
|
|
159
152
|
inpanel/public/partials/file/trash.html
|
|
153
|
+
inpanel/public/partials/plugins/config.html
|
|
154
|
+
inpanel/public/partials/plugins/detail.html
|
|
160
155
|
inpanel/public/partials/plugins/index.html
|
|
161
|
-
inpanel/public/partials/plugins/
|
|
156
|
+
inpanel/public/partials/plugins/info.html
|
|
162
157
|
inpanel/public/partials/service/apache.html
|
|
163
158
|
inpanel/public/partials/service/cron.html
|
|
159
|
+
inpanel/public/partials/service/fail2ban.html
|
|
160
|
+
inpanel/public/partials/service/firewalld.html
|
|
164
161
|
inpanel/public/partials/service/index.html
|
|
165
162
|
inpanel/public/partials/service/iptables.html
|
|
163
|
+
inpanel/public/partials/service/java11.html
|
|
164
|
+
inpanel/public/partials/service/java17.html
|
|
165
|
+
inpanel/public/partials/service/java21.html
|
|
166
|
+
inpanel/public/partials/service/java8.html
|
|
166
167
|
inpanel/public/partials/service/lighttpd.html
|
|
167
168
|
inpanel/public/partials/service/mariadb.html
|
|
168
169
|
inpanel/public/partials/service/memcache.html
|
|
@@ -171,8 +172,19 @@ inpanel/public/partials/service/mongodb.html
|
|
|
171
172
|
inpanel/public/partials/service/mysql.html
|
|
172
173
|
inpanel/public/partials/service/named.html
|
|
173
174
|
inpanel/public/partials/service/nginx.html
|
|
175
|
+
inpanel/public/partials/service/nodejs18.html
|
|
176
|
+
inpanel/public/partials/service/nodejs20.html
|
|
177
|
+
inpanel/public/partials/service/nodejs22.html
|
|
178
|
+
inpanel/public/partials/service/nodejs24.html
|
|
174
179
|
inpanel/public/partials/service/ntp.html
|
|
175
180
|
inpanel/public/partials/service/php.html
|
|
181
|
+
inpanel/public/partials/service/php56.html
|
|
182
|
+
inpanel/public/partials/service/php74.html
|
|
183
|
+
inpanel/public/partials/service/php80.html
|
|
184
|
+
inpanel/public/partials/service/php81.html
|
|
185
|
+
inpanel/public/partials/service/php82.html
|
|
186
|
+
inpanel/public/partials/service/php83.html
|
|
187
|
+
inpanel/public/partials/service/php84.html
|
|
176
188
|
inpanel/public/partials/service/proftpd.html
|
|
177
189
|
inpanel/public/partials/service/pureftpd.html
|
|
178
190
|
inpanel/public/partials/service/redis.html
|
|
@@ -180,6 +192,7 @@ inpanel/public/partials/service/samba.html
|
|
|
180
192
|
inpanel/public/partials/service/sendmail.html
|
|
181
193
|
inpanel/public/partials/service/ssh.html
|
|
182
194
|
inpanel/public/partials/service/tomcat.html
|
|
195
|
+
inpanel/public/partials/service/ufw.html
|
|
183
196
|
inpanel/public/partials/service/vsftpd.html
|
|
184
197
|
inpanel/public/partials/site/index.html
|
|
185
198
|
inpanel/public/partials/site/apache/site.html
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: InPanel - A Web-based Linux Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
@@ -35,9 +35,9 @@ License: BSD 3-Clause License
|
|
|
35
35
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
36
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
37
|
|
|
38
|
-
Project-URL: Homepage, https://inpanel.org
|
|
38
|
+
Project-URL: Homepage, https://inpanel.org
|
|
39
39
|
Project-URL: Repository, https://github.com/inpanel/inpanel
|
|
40
|
-
Project-URL: Documentation, https://inpanel.org
|
|
40
|
+
Project-URL: Documentation, https://inpanel.org
|
|
41
41
|
Project-URL: Issues, https://github.com/inpanel/inpanel/issues
|
|
42
42
|
Keywords: server,management,admin,panel,linux
|
|
43
43
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -20,7 +20,7 @@ import logging
|
|
|
20
20
|
from tornado import httpserver, ioloop
|
|
21
21
|
|
|
22
22
|
from . import web
|
|
23
|
-
from .base import pidfile, logfile, logerror, config_file, config_path, logging_path, run_type, DEBUG, root_path
|
|
23
|
+
from .base import pidfile, logfile, logerror, config_file, config_path, logging_path, run_type, DEBUG, root_path, data_path
|
|
24
24
|
from .mod.process import remove_pid_file, save_pid_file, WebRequestProcess
|
|
25
25
|
from .mod.config import load_config
|
|
26
26
|
from .utils import make_cookie_secret
|
|
@@ -355,11 +355,11 @@ def run_server():
|
|
|
355
355
|
'autoreload' : DEBUG,
|
|
356
356
|
'cookie_secret' : 'debug' if DEBUG else make_cookie_secret(),
|
|
357
357
|
'root_path' : root_path,
|
|
358
|
-
'data_path' :
|
|
358
|
+
'data_path' : data_path,
|
|
359
359
|
'index_path' : str(Path(root_path) / 'templates' / 'index.html'),
|
|
360
360
|
'template_path' : str(Path(root_path) / 'templates'),
|
|
361
361
|
'static_path' : str(Path(root_path) / 'public'),
|
|
362
|
-
'plugins_path' : str(Path(
|
|
362
|
+
'plugins_path' : str(Path(data_path) / 'plugins'),
|
|
363
363
|
'xsrf_cookies' : True,
|
|
364
364
|
'gzip' : True
|
|
365
365
|
}
|
|
@@ -377,18 +377,23 @@ def run_server():
|
|
|
377
377
|
(r'/api/repos/yum/(.+?)(?:/(.+))?', web.RepoYumHandler),
|
|
378
378
|
(r'/api/repos/dnf/(.+?)(?:/(.+))?', web.RepoDnfHandler),
|
|
379
379
|
(r'/api/repos/apt/(.+?)(?:/(.+))?', web.RepoAptHandler),
|
|
380
|
+
(r'/api/repos/brew/(.+?)(?:/(.+))?', web.RepoBrewHandler),
|
|
381
|
+
(r'/api/repos/pip/(.+?)(?:/(.+))?', web.RepoPipHandler),
|
|
382
|
+
(r'/api/repos/supported/?', web.RepoSupportedHandler),
|
|
380
383
|
(r'/api/firewall/(.+)', web.FirewallHandler),
|
|
381
384
|
(r'/api/setting/(.+)', web.SettingHandler),
|
|
382
385
|
(r'/api/operation/(.+)', web.OperationHandler),
|
|
383
|
-
(r'/page/file/preview/(.+)', web.FilePreviewHandler),
|
|
384
|
-
(r'/page/(.+)/(.+)', web.PageHandler),
|
|
385
386
|
(r'/api/backend/(.+)', web.BackendHandler),
|
|
386
387
|
(r'/api/sitepackage/(.+)', web.SitePackageHandler),
|
|
387
388
|
(r'/api/client/(.+)', web.ClientHandler),
|
|
388
|
-
(r'/api/plugins
|
|
389
|
+
(r'/api/plugins', web.PluginHandler),
|
|
390
|
+
(r'/api/plugins/(list|info|config|install|uninstall|toggle)', web.PluginHandler),
|
|
389
391
|
(r'/api/file/download/(.+)', web.FileDownloadHandler, { 'path': '/' }),
|
|
390
392
|
(r'/api/file/upload', web.FileUploadHandler),
|
|
391
393
|
(r'/api/version', web.VersionHandler),
|
|
394
|
+
(r'/page/plugins/(.*)', web.PluginStaticFileHandler, { 'path': settings['plugins_path']}),
|
|
395
|
+
(r'/page/file/preview/(.+)', web.FilePreviewHandler),
|
|
396
|
+
(r'/page/(.+)/(.+)', web.PageHandler),
|
|
392
397
|
(r'/((?:css|js|js.min|lib|partials|images|favicon\.ico|robots\.txt)(?:\/.*)?)', web.StaticFileHandler, { 'path': settings['static_path'] }),
|
|
393
398
|
(r'/', web.IndexHandler),
|
|
394
399
|
(r'/($)', web.StaticFileHandler, { 'path': settings['index_path'] }),
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
2
|
+
#
|
|
3
3
|
# Copyright (c) 2017-2026 Jackson Dou
|
|
4
4
|
# All rights reserved.
|
|
5
5
|
#
|
|
6
6
|
# InPanel is distributed under the terms of the (new) BSD License.
|
|
7
7
|
# The full license can be found in 'LICENSE'.
|
|
8
|
+
'''The InPanel Base Information'''
|
|
8
9
|
|
|
9
10
|
import sys
|
|
10
11
|
import os
|
|
@@ -40,7 +41,7 @@ __author__ = 'Jackson Dou'
|
|
|
40
41
|
__license__ = 'BSD'
|
|
41
42
|
|
|
42
43
|
app_name = 'InPanel'
|
|
43
|
-
releasetime = '2026-07-
|
|
44
|
+
releasetime = '2026-07-12'
|
|
44
45
|
DEBUG = True
|
|
45
46
|
COMMENTFLAG = '#INPANEL#'
|
|
46
47
|
GENBY = 'AUTOMATICALLY GENERATED BY INPANEL'
|
|
@@ -48,6 +49,7 @@ GENBY = 'AUTOMATICALLY GENERATED BY INPANEL'
|
|
|
48
49
|
# 版本信息
|
|
49
50
|
version_info = {
|
|
50
51
|
'name' : app_name,
|
|
52
|
+
'url' : 'https://inpanel.org',
|
|
51
53
|
'changelog' : 'https://inpanel.org/changelog.html',
|
|
52
54
|
'releasetime' : releasetime,
|
|
53
55
|
'version' : __version__
|
|
@@ -60,50 +62,55 @@ app_api = {
|
|
|
60
62
|
'download_package' : 'https://api.inpanel.org/?s=site_packages&a=download'
|
|
61
63
|
}
|
|
62
64
|
|
|
65
|
+
execfile = '/usr/bin/inpanel'
|
|
66
|
+
data_path = '/var/lib/inpanel/'
|
|
67
|
+
config_path = '/etc/inpanel/'
|
|
68
|
+
config_file = '/etc/inpanel/config.ini'
|
|
69
|
+
lastfile_path = '/etc/inpanel/lastfile.ini'
|
|
70
|
+
bookmarks_path = '/etc/inpanel/bookmarks.ini'
|
|
71
|
+
upgrade_path = '/etc/inpanel/upgrade.ini'
|
|
72
|
+
history_path = '/etc/inpanel/history.txt'
|
|
73
|
+
logging_path = '/var/log/inpanel/'
|
|
74
|
+
logfile = '/var/log/inpanel/main.log'
|
|
75
|
+
logerror = '/var/log/inpanel/error.log'
|
|
76
|
+
pidfile = '/var/run/inpanel.pid'
|
|
77
|
+
install_type = 'unknown'
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
import shutil
|
|
81
|
+
|
|
63
82
|
if hasattr(sys, 'frozen') and hasattr(sys, '_MEIPASS'):
|
|
64
|
-
run_type
|
|
65
|
-
root_path
|
|
66
|
-
execfile = '/usr/bin/inpanel'
|
|
67
|
-
config_path = '/etc/inpanel/'
|
|
68
|
-
config_file = '/etc/inpanel/config.ini'
|
|
69
|
-
lastfile_path = '/etc/inpanel/lastfile.ini'
|
|
70
|
-
bookmarks_path = '/etc/inpanel/bookmarks.ini'
|
|
71
|
-
upgrade_path = '/etc/inpanel/upgrade.ini'
|
|
72
|
-
history_path = '/etc/inpanel/history.txt'
|
|
73
|
-
logging_path = '/var/log/inpanel/'
|
|
74
|
-
logfile = '/var/log/inpanel/main.log'
|
|
75
|
-
logerror = '/var/log/inpanel/error.log'
|
|
76
|
-
pidfile = '/var/run/inpanel.pid'
|
|
83
|
+
run_type = 'binary'
|
|
84
|
+
root_path = sys._MEIPASS
|
|
77
85
|
else:
|
|
78
86
|
package_dir = Path(__file__).parent.resolve()
|
|
79
87
|
if package_dir.parts[-2] == 'site-packages' or 'dist-packages' in str(package_dir):
|
|
80
|
-
run_type
|
|
81
|
-
root_path
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
logerror = '/var/log/inpanel/error.log'
|
|
92
|
-
pidfile = '/var/run/inpanel.pid'
|
|
88
|
+
run_type = 'system'
|
|
89
|
+
root_path = str(package_dir)
|
|
90
|
+
pkg_str = str(package_dir)
|
|
91
|
+
if '/dist-packages/' in pkg_str:
|
|
92
|
+
install_type = 'apt'
|
|
93
|
+
elif '/site-packages/' in pkg_str:
|
|
94
|
+
from .mod.system import get_os_family
|
|
95
|
+
if '/usr/lib/python3/site-packages/' in pkg_str and get_os_family() == 'rhel':
|
|
96
|
+
install_type = 'dnf' if shutil.which('dnf') else 'yum'
|
|
97
|
+
else:
|
|
98
|
+
install_type = 'pip'
|
|
93
99
|
else:
|
|
94
100
|
run_type = 'source'
|
|
95
|
-
root_path
|
|
96
|
-
execfile
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
root_path = str(Path(__file__).parent.resolve())
|
|
102
|
+
execfile = str(Path(root_path) / 'app.py')
|
|
103
|
+
data_path = str(Path(root_path) / 'data')
|
|
104
|
+
config_path = str(Path(root_path) / 'data')
|
|
105
|
+
config_file = str(Path(root_path) / 'data' / 'config.ini')
|
|
106
|
+
lastfile_path = str(Path(root_path) / 'data' / 'lastfile.ini')
|
|
100
107
|
bookmarks_path = str(Path(root_path) / 'data' / 'bookmarks.ini')
|
|
101
|
-
upgrade_path
|
|
102
|
-
history_path
|
|
103
|
-
logging_path
|
|
104
|
-
logfile
|
|
105
|
-
logerror
|
|
106
|
-
pidfile
|
|
108
|
+
upgrade_path = str(Path(root_path) / 'data' / 'upgrade.ini')
|
|
109
|
+
history_path = str(Path(root_path) / 'data' / 'history.txt')
|
|
110
|
+
logging_path = str(Path(root_path) / 'data')
|
|
111
|
+
logfile = str(Path(root_path) / 'data' / 'main.log')
|
|
112
|
+
logerror = str(Path(root_path) / 'data' / 'error.log')
|
|
113
|
+
pidfile = str(Path(root_path) / 'data' / 'inpanel.pid')
|
|
107
114
|
|
|
108
115
|
|
|
109
116
|
kernel_name, hostname, kernel_release, kernel_version, machine, processor = uname()
|
|
@@ -188,8 +195,8 @@ server_info = {
|
|
|
188
195
|
}
|
|
189
196
|
|
|
190
197
|
__all__ = [
|
|
191
|
-
'__version__', 'DEBUG', 'app_api', 'app_name', 'config_path',
|
|
192
|
-
'run_type', 'config_file', 'root_path', 'COMMENTFLAG', 'GENBY', 'execfile',
|
|
198
|
+
'__version__', 'DEBUG', 'app_api', 'app_name', 'config_path', 'data_path',
|
|
199
|
+
'run_type', 'install_type', 'config_file', 'root_path', 'COMMENTFLAG', 'GENBY', 'execfile',
|
|
193
200
|
'releasetime', 'version_info', 'server_info', 'os_name', 'os_title',
|
|
194
201
|
'os_version', 'os_versint', 'os_platform', 'kernel_name', 'kernel_release',
|
|
195
202
|
'kernel_version', 'hostname', 'machine', 'lastfile_path', 'bookmarks_path', 'upgrade_path',
|
|
@@ -200,4 +207,4 @@ if __name__ == '__main__':
|
|
|
200
207
|
print(uname())
|
|
201
208
|
print(mac_ver())
|
|
202
209
|
print(platform())
|
|
203
|
-
print(server_info)
|
|
210
|
+
print(server_info)
|
|
@@ -225,27 +225,156 @@ def get_repo_elastic(stack_version):
|
|
|
225
225
|
return cmds
|
|
226
226
|
|
|
227
227
|
|
|
228
|
+
import shutil
|
|
229
|
+
import time
|
|
230
|
+
from subprocess import getstatusoutput
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def is_installed():
|
|
234
|
+
'''check if apt is installed'''
|
|
235
|
+
return shutil.which('apt') is not None
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def get_version():
|
|
239
|
+
'''get apt version'''
|
|
240
|
+
if not is_installed():
|
|
241
|
+
return ''
|
|
242
|
+
status, output = getstatusoutput('apt --version')
|
|
243
|
+
if status != 0:
|
|
244
|
+
return ''
|
|
245
|
+
return output.strip().split('\n')[0]
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def get_status():
|
|
249
|
+
'''get apt status'''
|
|
250
|
+
status = {
|
|
251
|
+
'installed': is_installed(),
|
|
252
|
+
'version': '',
|
|
253
|
+
'running': False,
|
|
254
|
+
'config_path': sources_list_d_path,
|
|
255
|
+
}
|
|
256
|
+
if status['installed']:
|
|
257
|
+
status['version'] = get_version()
|
|
258
|
+
status['running'] = True
|
|
259
|
+
return status
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def refresh_cache():
|
|
263
|
+
'''apt update'''
|
|
264
|
+
if not is_installed():
|
|
265
|
+
return {'code': -1, 'msg': 'apt 未安装!'}
|
|
266
|
+
status, output = getstatusoutput('apt update 2>&1')
|
|
267
|
+
if status == 0:
|
|
268
|
+
return {'code': 0, 'msg': 'apt 索引已更新!'}
|
|
269
|
+
return {'code': -1, 'msg': 'apt 索引更新失败:%s' % output}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def _source_full_path(source):
|
|
273
|
+
'''get full path of a source'''
|
|
274
|
+
if source == 'sources.list':
|
|
275
|
+
return sources_list_path
|
|
276
|
+
elif source.startswith('sources.list.d/'):
|
|
277
|
+
filename = source[len('sources.list.d/'):]
|
|
278
|
+
return str(Path(sources_list_d_path) / filename)
|
|
279
|
+
else:
|
|
280
|
+
return str(Path(sources_list_d_path) / source)
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def get_repo_list():
|
|
284
|
+
'''get structured source list with name/path/created'''
|
|
285
|
+
if base.kernel_name != 'Linux':
|
|
286
|
+
return None
|
|
287
|
+
items = get_list() or []
|
|
288
|
+
repos = []
|
|
289
|
+
for item in items:
|
|
290
|
+
full = _source_full_path(item)
|
|
291
|
+
created = ''
|
|
292
|
+
try:
|
|
293
|
+
created = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Path(full).stat().st_ctime))
|
|
294
|
+
except Exception:
|
|
295
|
+
pass
|
|
296
|
+
repos.append({'name': item, 'path': full, 'created': created})
|
|
297
|
+
return repos
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def get_repo_detail(source):
|
|
301
|
+
'''get source detail with package list'''
|
|
302
|
+
if not source:
|
|
303
|
+
return None
|
|
304
|
+
data = get_item(source)
|
|
305
|
+
if data is None:
|
|
306
|
+
return None
|
|
307
|
+
full = _source_full_path(source)
|
|
308
|
+
created = ''
|
|
309
|
+
try:
|
|
310
|
+
created = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Path(full).stat().st_ctime))
|
|
311
|
+
except Exception:
|
|
312
|
+
pass
|
|
313
|
+
# apt 无法精确按源列出包,这里列出系统已安装包作为参考
|
|
314
|
+
packages = []
|
|
315
|
+
st, out = getstatusoutput('dpkg -l 2>/dev/null')
|
|
316
|
+
if st == 0 and out:
|
|
317
|
+
for line in out.split('\n'):
|
|
318
|
+
if line.startswith('ii '):
|
|
319
|
+
parts = line.split()
|
|
320
|
+
if len(parts) >= 3:
|
|
321
|
+
packages.append({'name': parts[1], 'version': parts[2]})
|
|
322
|
+
return {'name': source, 'path': full, 'created': created, 'content': data.get('content', ''), 'packages': packages}
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def search_repos(keyword):
|
|
326
|
+
'''search source files by name'''
|
|
327
|
+
if not keyword:
|
|
328
|
+
return []
|
|
329
|
+
items = get_repo_list() or []
|
|
330
|
+
kw = keyword.lower()
|
|
331
|
+
return [r for r in items if kw in r['name'].lower()]
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def install_package(name):
|
|
335
|
+
'''install package via apt'''
|
|
336
|
+
if not name:
|
|
337
|
+
return {'code': -1, 'msg': '软件名称不能为空!'}
|
|
338
|
+
if not is_installed():
|
|
339
|
+
return {'code': -1, 'msg': 'apt 未安装!'}
|
|
340
|
+
status, output = getstatusoutput('apt install -y %s 2>&1' % name)
|
|
341
|
+
if status == 0:
|
|
342
|
+
return {'code': 0, 'msg': '软件 %s 安装成功!' % name, 'data': output}
|
|
343
|
+
return {'code': -1, 'msg': '软件 %s 安装失败:%s' % (name, output)}
|
|
344
|
+
|
|
345
|
+
|
|
228
346
|
def web_handler(context):
|
|
229
347
|
'''Handle web requests for APT repository management'''
|
|
230
348
|
action = context.get('action', '')
|
|
231
|
-
source = context.get('source', '')
|
|
232
|
-
|
|
233
|
-
if action == '
|
|
234
|
-
|
|
349
|
+
source = context.get('source', '') or context.get('name', '')
|
|
350
|
+
|
|
351
|
+
if action == 'overview':
|
|
352
|
+
return {'code': 0, 'msg': '', 'data': get_status()}
|
|
353
|
+
elif action == 'refresh':
|
|
354
|
+
return refresh_cache()
|
|
355
|
+
elif action == 'list':
|
|
356
|
+
items = get_repo_list()
|
|
235
357
|
if items is None:
|
|
236
358
|
return {'code': -1, 'msg': '获取配置失败!'}
|
|
237
359
|
else:
|
|
238
360
|
return {'code': 0, 'msg': '', 'data': items}
|
|
239
|
-
|
|
361
|
+
|
|
240
362
|
elif action == 'item':
|
|
241
363
|
if not source:
|
|
242
364
|
return {'code': -1, 'msg': '配置文件不能为空!'}
|
|
243
|
-
data =
|
|
365
|
+
data = get_repo_detail(source)
|
|
244
366
|
if data is None:
|
|
245
367
|
return {'code': -1, 'msg': '配置文件不存在!'}
|
|
246
368
|
else:
|
|
247
369
|
return {'code': 0, 'msg': '', 'data': data}
|
|
248
|
-
|
|
370
|
+
|
|
371
|
+
elif action == 'search':
|
|
372
|
+
keyword = context.get('keyword', '')
|
|
373
|
+
return {'code': 0, 'msg': '', 'data': search_repos(keyword)}
|
|
374
|
+
|
|
375
|
+
elif action == 'install':
|
|
376
|
+
return install_package(source)
|
|
377
|
+
|
|
249
378
|
elif action == 'add':
|
|
250
379
|
if not source:
|
|
251
380
|
return {'code': -1, 'msg': '配置文件不能为空!'}
|