InPanel 1.2.5__tar.gz → 1.2.7__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.5 → inpanel-1.2.7}/InPanel.egg-info/PKG-INFO +2 -2
- {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/SOURCES.txt +56 -14
- {inpanel-1.2.5 → inpanel-1.2.7}/PKG-INFO +2 -2
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/app.py +16 -14
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/base.py +13 -8
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/config.py +1 -1
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/filelock.py +1 -1
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/pxssh.py +2 -2
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/acme.py +17 -20
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/aliyuncs.py +3 -4
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/apt.py +41 -42
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/brew.py +51 -52
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/certificate.py +9 -10
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/config.py +3 -3
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/cron.py +7 -7
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/disk.py +103 -22
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/dnf.py +32 -33
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/docker_source.py +40 -41
- inpanel-1.2.7/inpanel/mod/file.py +1337 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/ftp.py +43 -19
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/httpd.py +11 -11
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/login.py +7 -8
- inpanel-1.2.7/inpanel/mod/logs.py +840 -0
- inpanel-1.2.7/inpanel/mod/mysql.py +965 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/nginx.py +2326 -2327
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package.py +2 -1
- inpanel-1.2.7/inpanel/mod/package_brew.py +60 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/php.py +7 -8
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/pip.py +18 -19
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/plugins.py +1 -2
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/process.py +3 -3
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/query.py +19 -8
- inpanel-1.2.7/inpanel/mod/redis.py +518 -0
- inpanel-1.2.7/inpanel/mod/remote.py +186 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/server.py +148 -103
- inpanel-1.2.7/inpanel/mod/service.py +597 -0
- inpanel-1.2.7/inpanel/mod/service_manager.py +910 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/setting.py +6 -6
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/ssh.py +324 -280
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/system.py +86 -2
- inpanel-1.2.7/inpanel/mod/task.py +366 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/user.py +5 -5
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/yum.py +57 -58
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/css/global.css +5 -14
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/index.html +7 -3
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/controllers.js +6 -15
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/database.js +286 -40
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/ecs.js +6 -6
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/file.js +1085 -988
- inpanel-1.2.7/inpanel/public/js/controllers/logs.js +291 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/service.js +249 -155
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/site.js +36 -37
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/utils.js +2948 -2789
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/core.js +247 -245
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/directives.js +116 -300
- inpanel-1.2.7/inpanel/public/lib/angular/1.0.8/angular.min.js +163 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/addon/edit/matchbrackets.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/addon/search/match-highlighter.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/addon/selection/active-line.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/codemirror.min.css +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/codemirror.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/css/css.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/diff/diff.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/dockerfile/dockerfile.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/go/go.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/htmlmixed/htmlmixed.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/javascript/javascript.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/lua/lua.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/markdown/markdown.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/nginx/nginx.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/perl/perl.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/php/php.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/properties/properties.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/python/python.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/ruby/ruby.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/rust/rust.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/shell/shell.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/sql/sql.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/toml/toml.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/xml/xml.min.js +1 -0
- inpanel-1.2.7/inpanel/public/lib/codemirror/mode/yaml/yaml.min.js +1 -0
- inpanel-1.2.7/inpanel/public/partials/database/index.html +401 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/file/trash.html +4 -2
- inpanel-1.2.7/inpanel/public/partials/logs.html +442 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/main.html +0 -5
- inpanel-1.2.7/inpanel/public/partials/service/index.html +77 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/setting.html +1 -1
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/index.html +20 -20
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/sources.html +181 -126
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/task.html +9 -9
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/templates/index.html +7 -3
- inpanel-1.2.7/inpanel/templates/services/__init__.py +124 -0
- inpanel-1.2.7/inpanel/templates/services/_common.json +8 -0
- inpanel-1.2.7/inpanel/templates/services/categories.json +68 -0
- inpanel-1.2.7/inpanel/templates/services/database.json +170 -0
- inpanel-1.2.7/inpanel/templates/services/ftp.json +69 -0
- inpanel-1.2.7/inpanel/templates/services/http.json +153 -0
- inpanel-1.2.7/inpanel/templates/services/java.json +86 -0
- inpanel-1.2.7/inpanel/templates/services/mail.json +47 -0
- inpanel-1.2.7/inpanel/templates/services/nodejs.json +82 -0
- inpanel-1.2.7/inpanel/templates/services/php.json +194 -0
- inpanel-1.2.7/inpanel/templates/services/security.json +93 -0
- inpanel-1.2.7/inpanel/templates/services/storage.json +28 -0
- inpanel-1.2.7/inpanel/templates/services/system.json +122 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/__init__.py +3 -2
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/utils.py +9 -10
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/web.py +226 -427
- {inpanel-1.2.5 → inpanel-1.2.7}/pyproject.toml +2 -2
- inpanel-1.2.5/inpanel/mod/file.py +0 -816
- inpanel-1.2.5/inpanel/mod/mysql.py +0 -577
- inpanel-1.2.5/inpanel/mod/remote.py +0 -109
- inpanel-1.2.5/inpanel/mod/service.py +0 -280
- inpanel-1.2.5/inpanel/mod/task.py +0 -1442
- inpanel-1.2.5/inpanel/public/lib/codemirror/codemirror-compressed.js +0 -1
- inpanel-1.2.5/inpanel/public/lib/codemirror/codemirror.css +0 -173
- inpanel-1.2.5/inpanel/public/partials/database/index.html +0 -172
- inpanel-1.2.5/inpanel/public/partials/log.html +0 -83
- inpanel-1.2.5/inpanel/public/partials/service/index.html +0 -468
- {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/dependency_links.txt +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/entry_points.txt +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/requires.txt +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/top_level.txt +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/LICENSE +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/MANIFEST.in +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/README.md +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/__init__.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/__init__.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/async_process.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/magic.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/pyDes.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/__init__.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/docker.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_base.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_firewalld.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_iptables.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_macos.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_ufw.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/lighttpd.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/named.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_apt.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_base.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_dnf.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_map.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_yum.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/proftpd.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/pureftpd.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/shell.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/vsftpd.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/plugin.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/favicon.ico +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/alipay.jpg +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/loading.gif +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/weixin.jpg +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/container.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/plugins.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/filters.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/services.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/angular/1.0.2/angular-resource.min.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/angular/1.0.2/angular.min.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.css +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.css.map +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.min.css +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/bootstrap.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/bootstrap.min.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/npm.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/jquery/jquery-1.12.4.min.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/md5/md5.js +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/md5/md5.min.js +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/message.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/navbar.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/selector.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvbase.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvext.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvfile.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvinstall.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvlog.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvminiop.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvuninstall.html +0 -0
- {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvupdate.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/container/index.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/dbedit.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/dbnew.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/useredit.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/usernew.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/account.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/ecs.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/index.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/setings.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/file/file.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ftp.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/login.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/logout.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/config.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/detail.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/index.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/info.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/secure.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/apache.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/cron.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/fail2ban.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/firewalld.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/iptables.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java11.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java17.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java21.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java8.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/lighttpd.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mariadb.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/memcache.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/minio.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mongodb.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mysql.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/named.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nginx.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs18.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs20.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs22.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs24.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ntp.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php56.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php74.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php80.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php81.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php82.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php83.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php84.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/proftpd.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/pureftpd.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/redis.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/samba.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/sendmail.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ssh.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/tomcat.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ufw.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/vsftpd.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/apache/site.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/index.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/nginx/site.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/sorry.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/autofm.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/backup.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/index.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/migrate.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/movedata.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/remote.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/cron.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/firewall.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/network.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/process.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/shell.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/ssl.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/time.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/user.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/robots.txt +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/templates/file/preview.html +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/__init__.py +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/apt.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/brew.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/dnf.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/docker.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/package_map.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/pip.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/third_party.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/yum.json +0 -0
- {inpanel-1.2.5 → inpanel-1.2.7}/setup.cfg +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
4
|
-
Summary: InPanel - A
|
|
3
|
+
Version: 1.2.7
|
|
4
|
+
Summary: InPanel - A Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
7
7
|
License: BSD 3-Clause License
|
|
@@ -44,12 +44,14 @@ inpanel/mod/ftp.py
|
|
|
44
44
|
inpanel/mod/httpd.py
|
|
45
45
|
inpanel/mod/lighttpd.py
|
|
46
46
|
inpanel/mod/login.py
|
|
47
|
+
inpanel/mod/logs.py
|
|
47
48
|
inpanel/mod/mysql.py
|
|
48
49
|
inpanel/mod/named.py
|
|
49
50
|
inpanel/mod/nginx.py
|
|
50
51
|
inpanel/mod/package.py
|
|
51
52
|
inpanel/mod/package_apt.py
|
|
52
53
|
inpanel/mod/package_base.py
|
|
54
|
+
inpanel/mod/package_brew.py
|
|
53
55
|
inpanel/mod/package_dnf.py
|
|
54
56
|
inpanel/mod/package_map.py
|
|
55
57
|
inpanel/mod/package_yum.py
|
|
@@ -60,9 +62,11 @@ inpanel/mod/process.py
|
|
|
60
62
|
inpanel/mod/proftpd.py
|
|
61
63
|
inpanel/mod/pureftpd.py
|
|
62
64
|
inpanel/mod/query.py
|
|
65
|
+
inpanel/mod/redis.py
|
|
63
66
|
inpanel/mod/remote.py
|
|
64
67
|
inpanel/mod/server.py
|
|
65
68
|
inpanel/mod/service.py
|
|
69
|
+
inpanel/mod/service_manager.py
|
|
66
70
|
inpanel/mod/setting.py
|
|
67
71
|
inpanel/mod/shell.py
|
|
68
72
|
inpanel/mod/ssh.py
|
|
@@ -87,12 +91,14 @@ inpanel/public/js/controllers/controllers.js
|
|
|
87
91
|
inpanel/public/js/controllers/database.js
|
|
88
92
|
inpanel/public/js/controllers/ecs.js
|
|
89
93
|
inpanel/public/js/controllers/file.js
|
|
94
|
+
inpanel/public/js/controllers/logs.js
|
|
90
95
|
inpanel/public/js/controllers/plugins.js
|
|
91
96
|
inpanel/public/js/controllers/service.js
|
|
92
97
|
inpanel/public/js/controllers/site.js
|
|
93
98
|
inpanel/public/js/controllers/utils.js
|
|
94
99
|
inpanel/public/lib/angular/1.0.2/angular-resource.min.js
|
|
95
100
|
inpanel/public/lib/angular/1.0.2/angular.min.js
|
|
101
|
+
inpanel/public/lib/angular/1.0.8/angular.min.js
|
|
96
102
|
inpanel/public/lib/bootstrap/css/bootstrap-theme.css
|
|
97
103
|
inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map
|
|
98
104
|
inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css
|
|
@@ -111,36 +117,59 @@ inpanel/public/lib/bootstrap/img/glyphicons-halflings.png
|
|
|
111
117
|
inpanel/public/lib/bootstrap/js/bootstrap.js
|
|
112
118
|
inpanel/public/lib/bootstrap/js/bootstrap.min.js
|
|
113
119
|
inpanel/public/lib/bootstrap/js/npm.js
|
|
114
|
-
inpanel/public/lib/codemirror/codemirror
|
|
115
|
-
inpanel/public/lib/codemirror/codemirror.
|
|
120
|
+
inpanel/public/lib/codemirror/codemirror.min.css
|
|
121
|
+
inpanel/public/lib/codemirror/codemirror.min.js
|
|
122
|
+
inpanel/public/lib/codemirror/addon/edit/matchbrackets.min.js
|
|
123
|
+
inpanel/public/lib/codemirror/addon/search/match-highlighter.min.js
|
|
124
|
+
inpanel/public/lib/codemirror/addon/selection/active-line.min.js
|
|
125
|
+
inpanel/public/lib/codemirror/mode/css/css.min.js
|
|
126
|
+
inpanel/public/lib/codemirror/mode/diff/diff.min.js
|
|
127
|
+
inpanel/public/lib/codemirror/mode/dockerfile/dockerfile.min.js
|
|
128
|
+
inpanel/public/lib/codemirror/mode/go/go.min.js
|
|
129
|
+
inpanel/public/lib/codemirror/mode/htmlmixed/htmlmixed.min.js
|
|
130
|
+
inpanel/public/lib/codemirror/mode/javascript/javascript.min.js
|
|
131
|
+
inpanel/public/lib/codemirror/mode/lua/lua.min.js
|
|
132
|
+
inpanel/public/lib/codemirror/mode/markdown/markdown.min.js
|
|
133
|
+
inpanel/public/lib/codemirror/mode/nginx/nginx.min.js
|
|
134
|
+
inpanel/public/lib/codemirror/mode/perl/perl.min.js
|
|
135
|
+
inpanel/public/lib/codemirror/mode/php/php.min.js
|
|
136
|
+
inpanel/public/lib/codemirror/mode/properties/properties.min.js
|
|
137
|
+
inpanel/public/lib/codemirror/mode/python/python.min.js
|
|
138
|
+
inpanel/public/lib/codemirror/mode/ruby/ruby.min.js
|
|
139
|
+
inpanel/public/lib/codemirror/mode/rust/rust.min.js
|
|
140
|
+
inpanel/public/lib/codemirror/mode/shell/shell.min.js
|
|
141
|
+
inpanel/public/lib/codemirror/mode/sql/sql.min.js
|
|
142
|
+
inpanel/public/lib/codemirror/mode/toml/toml.min.js
|
|
143
|
+
inpanel/public/lib/codemirror/mode/xml/xml.min.js
|
|
144
|
+
inpanel/public/lib/codemirror/mode/yaml/yaml.min.js
|
|
116
145
|
inpanel/public/lib/jquery/jquery-1.12.4.min.js
|
|
117
146
|
inpanel/public/lib/md5/md5.js
|
|
118
147
|
inpanel/public/lib/md5/md5.min.js
|
|
119
148
|
inpanel/public/partials/ftp.html
|
|
120
|
-
inpanel/public/partials/log.html
|
|
121
149
|
inpanel/public/partials/login.html
|
|
122
150
|
inpanel/public/partials/logout.html
|
|
151
|
+
inpanel/public/partials/logs.html
|
|
123
152
|
inpanel/public/partials/main.html
|
|
124
153
|
inpanel/public/partials/secure.html
|
|
125
154
|
inpanel/public/partials/setting.html
|
|
126
155
|
inpanel/public/partials/sorry.html
|
|
127
156
|
inpanel/public/partials/container/index.html
|
|
157
|
+
inpanel/public/partials/container/directives/message.html
|
|
158
|
+
inpanel/public/partials/container/directives/navbar.html
|
|
159
|
+
inpanel/public/partials/container/directives/selector.html
|
|
160
|
+
inpanel/public/partials/container/directives/srvbase.html
|
|
161
|
+
inpanel/public/partials/container/directives/srvext.html
|
|
162
|
+
inpanel/public/partials/container/directives/srvfile.html
|
|
163
|
+
inpanel/public/partials/container/directives/srvinstall.html
|
|
164
|
+
inpanel/public/partials/container/directives/srvlog.html
|
|
165
|
+
inpanel/public/partials/container/directives/srvminiop.html
|
|
166
|
+
inpanel/public/partials/container/directives/srvuninstall.html
|
|
167
|
+
inpanel/public/partials/container/directives/srvupdate.html
|
|
128
168
|
inpanel/public/partials/database/index.html
|
|
129
169
|
inpanel/public/partials/database/mysql/dbedit.html
|
|
130
170
|
inpanel/public/partials/database/mysql/dbnew.html
|
|
131
171
|
inpanel/public/partials/database/mysql/useredit.html
|
|
132
172
|
inpanel/public/partials/database/mysql/usernew.html
|
|
133
|
-
inpanel/public/partials/directives/message.html
|
|
134
|
-
inpanel/public/partials/directives/navbar.html
|
|
135
|
-
inpanel/public/partials/directives/selector.html
|
|
136
|
-
inpanel/public/partials/directives/srvbase.html
|
|
137
|
-
inpanel/public/partials/directives/srvext.html
|
|
138
|
-
inpanel/public/partials/directives/srvfile.html
|
|
139
|
-
inpanel/public/partials/directives/srvinstall.html
|
|
140
|
-
inpanel/public/partials/directives/srvlog.html
|
|
141
|
-
inpanel/public/partials/directives/srvminiop.html
|
|
142
|
-
inpanel/public/partials/directives/srvuninstall.html
|
|
143
|
-
inpanel/public/partials/directives/srvupdate.html
|
|
144
173
|
inpanel/public/partials/ecs/account.html
|
|
145
174
|
inpanel/public/partials/ecs/ecs.html
|
|
146
175
|
inpanel/public/partials/ecs/index.html
|
|
@@ -214,6 +243,19 @@ inpanel/public/partials/utils/user.html
|
|
|
214
243
|
inpanel/public/templates/index.html
|
|
215
244
|
inpanel/public/templates/file/preview.html
|
|
216
245
|
inpanel/templates/__init__.py
|
|
246
|
+
inpanel/templates/services/__init__.py
|
|
247
|
+
inpanel/templates/services/_common.json
|
|
248
|
+
inpanel/templates/services/categories.json
|
|
249
|
+
inpanel/templates/services/database.json
|
|
250
|
+
inpanel/templates/services/ftp.json
|
|
251
|
+
inpanel/templates/services/http.json
|
|
252
|
+
inpanel/templates/services/java.json
|
|
253
|
+
inpanel/templates/services/mail.json
|
|
254
|
+
inpanel/templates/services/nodejs.json
|
|
255
|
+
inpanel/templates/services/php.json
|
|
256
|
+
inpanel/templates/services/security.json
|
|
257
|
+
inpanel/templates/services/storage.json
|
|
258
|
+
inpanel/templates/services/system.json
|
|
217
259
|
inpanel/templates/sources/__init__.py
|
|
218
260
|
inpanel/templates/sources/apt.json
|
|
219
261
|
inpanel/templates/sources/brew.json
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
4
|
-
Summary: InPanel - A
|
|
3
|
+
Version: 1.2.7
|
|
4
|
+
Summary: InPanel - A Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
7
7
|
License: BSD 3-Clause License
|
|
@@ -125,7 +125,7 @@ def cmd_start():
|
|
|
125
125
|
force_https = config.getboolean('server', 'forcehttps')
|
|
126
126
|
print(f'InPanel: running on: http{"s" if force_https else ""}://*:{server_port}')
|
|
127
127
|
else:
|
|
128
|
-
print('InPanel: failed to start, check log file:
|
|
128
|
+
print(f'InPanel: failed to start, check log file: {logfile}')
|
|
129
129
|
sys.exit(1)
|
|
130
130
|
return
|
|
131
131
|
except OSError as e:
|
|
@@ -247,16 +247,16 @@ def cmd_uninstall(args=None):
|
|
|
247
247
|
print('Uninstalling InPanel...')
|
|
248
248
|
|
|
249
249
|
# 移除 systemd 服务
|
|
250
|
-
if
|
|
250
|
+
if Path(systemd_service).exists():
|
|
251
251
|
try:
|
|
252
252
|
subprocess.run(['systemctl', 'stop', 'inpanel'], stderr=subprocess.DEVNULL)
|
|
253
253
|
subprocess.run(['systemctl', 'disable', 'inpanel'], stderr=subprocess.DEVNULL)
|
|
254
254
|
except Exception:
|
|
255
255
|
pass
|
|
256
|
-
|
|
256
|
+
Path(systemd_service).unlink()
|
|
257
257
|
print(f' removed: {systemd_service}')
|
|
258
|
-
if
|
|
259
|
-
|
|
258
|
+
if Path(systemd_service_etc).exists():
|
|
259
|
+
Path(systemd_service_etc).unlink()
|
|
260
260
|
print(f' removed: {systemd_service_etc}')
|
|
261
261
|
try:
|
|
262
262
|
subprocess.run(['systemctl', 'daemon-reload'], stderr=subprocess.DEVNULL)
|
|
@@ -264,7 +264,7 @@ def cmd_uninstall(args=None):
|
|
|
264
264
|
pass
|
|
265
265
|
|
|
266
266
|
# 移除 init.d 脚本
|
|
267
|
-
if
|
|
267
|
+
if Path(initd_script).exists():
|
|
268
268
|
try:
|
|
269
269
|
subprocess.run(['chkconfig', '--del', 'inpanel'], stderr=subprocess.DEVNULL)
|
|
270
270
|
except Exception:
|
|
@@ -273,12 +273,12 @@ def cmd_uninstall(args=None):
|
|
|
273
273
|
subprocess.run(['update-rc.d', '-f', 'inpanel', 'remove'], stderr=subprocess.DEVNULL)
|
|
274
274
|
except Exception:
|
|
275
275
|
pass
|
|
276
|
-
|
|
276
|
+
Path(initd_script).unlink()
|
|
277
277
|
print(f' removed: {initd_script}')
|
|
278
278
|
|
|
279
279
|
# 移除二进制文件 / 控制台脚本
|
|
280
|
-
if
|
|
281
|
-
|
|
280
|
+
if Path(bin_path).exists():
|
|
281
|
+
Path(bin_path).unlink()
|
|
282
282
|
print(f' removed: {bin_path}')
|
|
283
283
|
|
|
284
284
|
# 通过 pip 移除 Python 包
|
|
@@ -298,18 +298,18 @@ def cmd_uninstall(args=None):
|
|
|
298
298
|
print(f' removed: {pkg_path}')
|
|
299
299
|
|
|
300
300
|
# 移除配置文件(可选)
|
|
301
|
-
if purge_config and config_path and
|
|
301
|
+
if purge_config and config_path and Path(config_path).exists():
|
|
302
302
|
shutil.rmtree(config_path, ignore_errors=True)
|
|
303
303
|
print(f' removed: {config_path} (config files)')
|
|
304
304
|
|
|
305
305
|
# 移除日志文件(可选)
|
|
306
|
-
if purge_logs and logging_path and
|
|
306
|
+
if purge_logs and logging_path and Path(logging_path).exists():
|
|
307
307
|
shutil.rmtree(logging_path, ignore_errors=True)
|
|
308
308
|
print(f' removed: {logging_path} (log files)')
|
|
309
309
|
|
|
310
|
-
pidfile_dir =
|
|
311
|
-
if
|
|
312
|
-
|
|
310
|
+
pidfile_dir = str(Path(pidfile).parent)
|
|
311
|
+
if Path(pidfile).exists():
|
|
312
|
+
Path(pidfile).unlink()
|
|
313
313
|
|
|
314
314
|
print()
|
|
315
315
|
print('InPanel uninstalled successfully.')
|
|
@@ -381,8 +381,10 @@ def run_server():
|
|
|
381
381
|
(r'/api/sources/pip/(.+?)(?:/(.+))?', web.RepoPipHandler),
|
|
382
382
|
(r'/api/sources/docker/(.+?)(?:/(.+))?', web.RepoDockerHandler),
|
|
383
383
|
(r'/api/sources/supported/?', web.RepoSupportedHandler),
|
|
384
|
+
(r'/api/service/(.+?)(?:/(.+))?', web.ServiceHandler),
|
|
384
385
|
(r'/api/firewall/(.+)', web.FirewallHandler),
|
|
385
386
|
(r'/api/setting/(.+)', web.SettingHandler),
|
|
387
|
+
(r'/api/logs/(.+)', web.LogsHandler),
|
|
386
388
|
(r'/api/operation/(.+)', web.OperationHandler),
|
|
387
389
|
(r'/api/task/(.+)', web.TaskHandler),
|
|
388
390
|
(r'/api/sitepackage/(.+)', web.SitePackageHandler),
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
'''InPanel 基础信息模块'''
|
|
9
9
|
|
|
10
10
|
import sys
|
|
11
|
-
import os
|
|
12
11
|
from pathlib import Path
|
|
13
12
|
from platform import mac_ver, platform, uname, win32_ver
|
|
14
13
|
|
|
@@ -41,7 +40,7 @@ __author__ = 'Jackson Dou'
|
|
|
41
40
|
__license__ = 'BSD'
|
|
42
41
|
|
|
43
42
|
app_name = 'InPanel'
|
|
44
|
-
releasetime = '2026-07-
|
|
43
|
+
releasetime = '2026-07-26'
|
|
45
44
|
DEBUG = False
|
|
46
45
|
COMMENTFLAG = '#INPANEL#'
|
|
47
46
|
GENBY = 'AUTOMATICALLY GENERATED BY INPANEL'
|
|
@@ -63,14 +62,15 @@ app_api = {
|
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
execfile = '/usr/bin/inpanel'
|
|
66
|
-
data_path = '/var/lib/inpanel/'
|
|
67
65
|
config_path = '/etc/inpanel/'
|
|
66
|
+
data_path = '/var/lib/inpanel/'
|
|
67
|
+
logging_path = '/var/log/inpanel/'
|
|
68
68
|
config_file = '/etc/inpanel/config.ini'
|
|
69
69
|
lastfile_path = '/etc/inpanel/lastfile.ini'
|
|
70
70
|
bookmarks_path = '/etc/inpanel/bookmarks.ini'
|
|
71
71
|
upgrade_path = '/etc/inpanel/upgrade.ini'
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
files_log = '/var/log/inpanel/files.log'
|
|
73
|
+
filespath_log = '/var/log/inpanel/filespath.log'
|
|
74
74
|
logfile = '/var/log/inpanel/main.log'
|
|
75
75
|
logerror = '/var/log/inpanel/error.log'
|
|
76
76
|
pidfile = '/var/run/inpanel.pid'
|
|
@@ -84,7 +84,11 @@ if hasattr(sys, 'frozen') and hasattr(sys, '_MEIPASS'):
|
|
|
84
84
|
root_path = sys._MEIPASS
|
|
85
85
|
else:
|
|
86
86
|
package_dir = Path(__file__).parent.resolve()
|
|
87
|
+
is_develop_mode = False
|
|
87
88
|
if package_dir.parts[-2] == 'site-packages' or 'dist-packages' in str(package_dir):
|
|
89
|
+
if Path(__file__).is_symlink():
|
|
90
|
+
is_develop_mode = True
|
|
91
|
+
if not is_develop_mode and (package_dir.parts[-2] == 'site-packages' or 'dist-packages' in str(package_dir)):
|
|
88
92
|
run_type = 'system'
|
|
89
93
|
root_path = str(package_dir)
|
|
90
94
|
pkg_str = str(package_dir)
|
|
@@ -102,12 +106,13 @@ else:
|
|
|
102
106
|
execfile = str(Path(root_path) / 'app.py')
|
|
103
107
|
data_path = str(Path(root_path) / 'data')
|
|
104
108
|
config_path = str(Path(root_path) / 'data')
|
|
109
|
+
logging_path = str(Path(root_path) / 'data')
|
|
105
110
|
config_file = str(Path(root_path) / 'data' / 'config.ini')
|
|
106
111
|
lastfile_path = str(Path(root_path) / 'data' / 'lastfile.ini')
|
|
107
112
|
bookmarks_path = str(Path(root_path) / 'data' / 'bookmarks.ini')
|
|
108
113
|
upgrade_path = str(Path(root_path) / 'data' / 'upgrade.ini')
|
|
109
|
-
|
|
110
|
-
|
|
114
|
+
files_log = str(Path(root_path) / 'data' / 'files.log')
|
|
115
|
+
filespath_log = str(Path(root_path) / 'data' / 'filespath.log')
|
|
111
116
|
logfile = str(Path(root_path) / 'data' / 'main.log')
|
|
112
117
|
logerror = str(Path(root_path) / 'data' / 'error.log')
|
|
113
118
|
pidfile = str(Path(root_path) / 'data' / 'inpanel.pid')
|
|
@@ -200,7 +205,7 @@ __all__ = [
|
|
|
200
205
|
'releasetime', 'version_info', 'server_info', 'os_name', 'os_title',
|
|
201
206
|
'os_version', 'os_versint', 'os_platform', 'kernel_name', 'kernel_release',
|
|
202
207
|
'kernel_version', 'hostname', 'machine', 'lastfile_path', 'bookmarks_path', 'upgrade_path',
|
|
203
|
-
'
|
|
208
|
+
'files_log', 'filespath_log', 'logfile', 'logerror', 'pidfile', 'processor'
|
|
204
209
|
]
|
|
205
210
|
|
|
206
211
|
if __name__ == '__main__':
|
|
@@ -119,7 +119,7 @@ Examples:
|
|
|
119
119
|
key = md5(randstr().encode('utf-8')).hexdigest()
|
|
120
120
|
md5_password = md5(value.encode('utf-8')).hexdigest()
|
|
121
121
|
pwd = hmac_new(key.encode('utf-8'), md5_password.encode('utf-8'), md5).hexdigest()
|
|
122
|
-
value = '
|
|
122
|
+
value = f'{pwd}:{key}'
|
|
123
123
|
logger.info(f'Password hash generated, key length: {len(key)}, hash length: {len(pwd)}')
|
|
124
124
|
|
|
125
125
|
result = config.set(section, option, value)
|
|
@@ -21,7 +21,7 @@ class FileLock(object):
|
|
|
21
21
|
the maximum timeout and the delay between each attempt to lock.
|
|
22
22
|
"""
|
|
23
23
|
self.is_locked = False
|
|
24
|
-
self.lockfile = str(Path.cwd() / ("
|
|
24
|
+
self.lockfile = str(Path.cwd() / (f"{file_name}.lock"))
|
|
25
25
|
self.file_name = file_name
|
|
26
26
|
self.timeout = timeout
|
|
27
27
|
self.delay = delay
|
|
@@ -186,8 +186,8 @@ class pxssh (spawn):
|
|
|
186
186
|
if self.force_password:
|
|
187
187
|
ssh_options = ssh_options + ' ' + self.SSH_OPTS
|
|
188
188
|
if port is not None:
|
|
189
|
-
ssh_options = ssh_options + ' -p
|
|
190
|
-
cmd = "ssh
|
|
189
|
+
ssh_options = ssh_options + f' -p {port!s}'
|
|
190
|
+
cmd = f"ssh {ssh_options} -l {username} {server}"
|
|
191
191
|
|
|
192
192
|
# This does not distinguish between a remote server 'password' prompt
|
|
193
193
|
# and a local ssh 'passphrase' prompt (for unlocking a private key).
|
|
@@ -14,7 +14,6 @@ from binascii import unhexlify
|
|
|
14
14
|
from hashlib import sha256
|
|
15
15
|
from json import dumps, loads
|
|
16
16
|
from pathlib import Path
|
|
17
|
-
import os
|
|
18
17
|
from subprocess import PIPE, STDOUT, Popen
|
|
19
18
|
from time import sleep
|
|
20
19
|
|
|
@@ -58,7 +57,7 @@ class ACME():
|
|
|
58
57
|
proc = Popen(cmd_list, stdin=stdin, stdout=PIPE, stderr=PIPE)
|
|
59
58
|
out, err = proc.communicate(cmd_input)
|
|
60
59
|
if proc.returncode != 0:
|
|
61
|
-
raise IOError("{
|
|
60
|
+
raise IOError(f"{err_msg}\n{err}")
|
|
62
61
|
return out
|
|
63
62
|
|
|
64
63
|
def _b64(self, b):
|
|
@@ -86,8 +85,7 @@ class ACME():
|
|
|
86
85
|
if depth < 100 and code == 400 and res_data['type'] == 'urn:ietf:params:acme:error:badNonce':
|
|
87
86
|
raise IndexError(res_data) # 允许对无效 nonce 重试 100 次
|
|
88
87
|
if code not in [200, 201, 204]:
|
|
89
|
-
raise ValueError("{
|
|
90
|
-
err_msg, url, data, code, res_data))
|
|
88
|
+
raise ValueError(f"{err_msg}:\nUrl: {url}\nData: {data}\nResponse Code: {code}\nResponse: {res_data}")
|
|
91
89
|
return res_data, code, headers
|
|
92
90
|
|
|
93
91
|
def _s_request(self, url, payload, err_msg, depth=0):
|
|
@@ -97,7 +95,7 @@ class ACME():
|
|
|
97
95
|
protected = {'url': url, 'alg': self.alg, "nonce": new_nonce}
|
|
98
96
|
protected.update({"jwk": self.jwk} if self.acct_headers is None else {"kid": self.acct_headers['Location']})
|
|
99
97
|
protected64 = self._b64(dumps(protected).encode('utf8'))
|
|
100
|
-
protected_input = "{
|
|
98
|
+
protected_input = f"{protected64}.{payload64}".encode('utf8')
|
|
101
99
|
cmd = ['openssl', 'dgst', '-sha256', '-sign', self.account_key]
|
|
102
100
|
out = self._cmd(cmd, stdin=PIPE, cmd_input=protected_input, err_msg='OpenSSL Error')
|
|
103
101
|
data = dumps({
|
|
@@ -147,8 +145,8 @@ class ACME():
|
|
|
147
145
|
out = self._cmd(cmd, err_msg='openssl error')
|
|
148
146
|
pub_pattern = r"modulus:\n\s+00:([a-f0-9\:\s]+?)\npublicExponent: ([0-9]+)"
|
|
149
147
|
pub_hex, pub_exp = re.search(pub_pattern, out.decode('utf8'), re.MULTILINE | re.DOTALL).groups()
|
|
150
|
-
pub_exp = "{
|
|
151
|
-
pub_exp = "0{
|
|
148
|
+
pub_exp = f"{int(pub_exp):x}"
|
|
149
|
+
pub_exp = f"0{pub_exp}" if len(pub_exp) % 2 else pub_exp
|
|
152
150
|
self.jwk = {
|
|
153
151
|
'e': self._b64(unhexlify(pub_exp.encode('utf-8'))),
|
|
154
152
|
'kty': 'RSA',
|
|
@@ -183,7 +181,7 @@ class ACME():
|
|
|
183
181
|
# 查找域名
|
|
184
182
|
print('Domains CSR parsing...')
|
|
185
183
|
cmd = ['openssl', 'req', '-in', self.csr, '-noout', '-text']
|
|
186
|
-
out = self._cmd(cmd, err_msg="Error loading {
|
|
184
|
+
out = self._cmd(cmd, err_msg=f"Error loading {self.csr}")
|
|
187
185
|
domains = set([])
|
|
188
186
|
common_name = re.search(r"Subject:.*? CN\s?=\s?([^\s,;/]+)", out.decode('utf8'))
|
|
189
187
|
if common_name is not None:
|
|
@@ -194,7 +192,7 @@ class ACME():
|
|
|
194
192
|
for san in subject_alt_names.group(1).split(", "):
|
|
195
193
|
if san.startswith("DNS:"):
|
|
196
194
|
domains.add(san[4:])
|
|
197
|
-
print("Found domains: {
|
|
195
|
+
print(f"Found domains: {', '.join(domains)}")
|
|
198
196
|
# print('domains', domains)
|
|
199
197
|
if order == True:
|
|
200
198
|
self.create_new_order(domains)
|
|
@@ -214,32 +212,31 @@ class ACME():
|
|
|
214
212
|
for auth_url in order['authorizations']:
|
|
215
213
|
authorization, _, _ = self._request(auth_url, err_msg='Error getting challenges')
|
|
216
214
|
domain = authorization['identifier']['value']
|
|
217
|
-
print("Domain {
|
|
215
|
+
print(f"Domain {domain} Verifying...")
|
|
218
216
|
|
|
219
217
|
# 找到 http-01 挑战并写入挑战文件
|
|
220
218
|
challenge = [c for c in authorization['challenges'] if c['type'] == "http-01"][0]
|
|
221
219
|
token = re.sub(r"[^A-Za-z0-9_\-]", "_", challenge['token'])
|
|
222
|
-
key_auth = "{
|
|
220
|
+
key_auth = f"{token}.{self.thumbprint}"
|
|
223
221
|
wellknown_path = str(Path(self.acme_check_dir) / token)
|
|
224
222
|
with open(wellknown_path, 'w', encoding='utf-8') as f:
|
|
225
223
|
f.write(key_auth)
|
|
226
224
|
|
|
227
225
|
# 检查 wellknown 文件是否在指定位置
|
|
228
226
|
try:
|
|
229
|
-
wellknown_url = "http://{
|
|
227
|
+
wellknown_url = f"http://{domain}/.well-known/acme-challenge/{token}"
|
|
230
228
|
assert(disable_check or self._request(wellknown_url)[0] == key_auth)
|
|
231
229
|
except (AssertionError, ValueError) as e:
|
|
232
|
-
|
|
233
|
-
raise ValueError("Wrote file to {
|
|
234
|
-
wellknown_path, wellknown_url, e))
|
|
230
|
+
Path(wellknown_path).unlink()
|
|
231
|
+
raise ValueError(f"Wrote file to {wellknown_path}, but couldn't download {wellknown_url}: {e}")
|
|
235
232
|
|
|
236
233
|
# 告知挑战已完成
|
|
237
234
|
self._s_request(
|
|
238
|
-
challenge['url'], {}, "Error submitting challenges: {
|
|
239
|
-
authorization = self._poll_until_not(auth_url, ["pending"], "Error checking challenge status for {
|
|
235
|
+
challenge['url'], {}, f"Error submitting challenges: {domain}")
|
|
236
|
+
authorization = self._poll_until_not(auth_url, ["pending"], f"Error checking challenge status for {domain}")
|
|
240
237
|
if authorization['status'] != "valid":
|
|
241
|
-
raise ValueError("Challenge did not pass for {
|
|
242
|
-
print("Domain {
|
|
238
|
+
raise ValueError(f"Challenge did not pass for {domain}: {authorization}")
|
|
239
|
+
print(f"Domain {domain} verified!")
|
|
243
240
|
|
|
244
241
|
# 使用 CSR 完成订单
|
|
245
242
|
print('Certificate signing...')
|
|
@@ -248,7 +245,7 @@ class ACME():
|
|
|
248
245
|
# 轮询订单以监控其完成状态
|
|
249
246
|
order = self._poll_until_not(order_headers['Location'], ['pending', 'processing'], 'Error checking order status')
|
|
250
247
|
if order['status'] != 'valid':
|
|
251
|
-
raise ValueError("Order failed: {
|
|
248
|
+
raise ValueError(f"Order failed: {order}")
|
|
252
249
|
self.certificate = order['certificate']
|
|
253
250
|
|
|
254
251
|
def get_certificate(self, certificate=None):
|
|
@@ -32,8 +32,7 @@ class ECS(object):
|
|
|
32
32
|
def _sign(self, params):
|
|
33
33
|
paramstrings = []
|
|
34
34
|
for k, v in sorted(params.items()):
|
|
35
|
-
paramstrings.append('
|
|
36
|
-
(ECS._urlencode(k), ECS._urlencode(v)))
|
|
35
|
+
paramstrings.append(f'{ECS._urlencode(k)}={ECS._urlencode(v)}')
|
|
37
36
|
datastrings = [
|
|
38
37
|
ECS._urlencode('GET'),
|
|
39
38
|
ECS._urlencode('/'),
|
|
@@ -240,7 +239,7 @@ if __name__ == '__main__':
|
|
|
240
239
|
print()
|
|
241
240
|
|
|
242
241
|
for region in regions['Regions']:
|
|
243
|
-
print(
|
|
242
|
+
print(f"## Zones in {region['RegionCode']}\n")
|
|
244
243
|
zones = ecs.DescribeZones(region['RegionCode'])
|
|
245
244
|
if not zones[0]:
|
|
246
245
|
pp.pprint(zones)
|
|
@@ -250,7 +249,7 @@ if __name__ == '__main__':
|
|
|
250
249
|
print()
|
|
251
250
|
|
|
252
251
|
for zone in zones['Zones']:
|
|
253
|
-
print(
|
|
252
|
+
print(f"## Instances in {zone['ZoneCode']}\n")
|
|
254
253
|
instances = ecs.DescribeInstanceStatus(
|
|
255
254
|
region['RegionCode'], zone['ZoneCode'])[1]
|
|
256
255
|
pp.pprint(instances)
|