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.
Files changed (279) hide show
  1. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/PKG-INFO +2 -2
  2. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/SOURCES.txt +56 -14
  3. {inpanel-1.2.5 → inpanel-1.2.7}/PKG-INFO +2 -2
  4. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/app.py +16 -14
  5. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/base.py +13 -8
  6. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/config.py +1 -1
  7. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/filelock.py +1 -1
  8. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/pxssh.py +2 -2
  9. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/acme.py +17 -20
  10. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/aliyuncs.py +3 -4
  11. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/apt.py +41 -42
  12. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/brew.py +51 -52
  13. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/certificate.py +9 -10
  14. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/config.py +3 -3
  15. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/cron.py +7 -7
  16. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/disk.py +103 -22
  17. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/dnf.py +32 -33
  18. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/docker_source.py +40 -41
  19. inpanel-1.2.7/inpanel/mod/file.py +1337 -0
  20. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/ftp.py +43 -19
  21. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/httpd.py +11 -11
  22. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/login.py +7 -8
  23. inpanel-1.2.7/inpanel/mod/logs.py +840 -0
  24. inpanel-1.2.7/inpanel/mod/mysql.py +965 -0
  25. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/nginx.py +2326 -2327
  26. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package.py +2 -1
  27. inpanel-1.2.7/inpanel/mod/package_brew.py +60 -0
  28. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/php.py +7 -8
  29. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/pip.py +18 -19
  30. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/plugins.py +1 -2
  31. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/process.py +3 -3
  32. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/query.py +19 -8
  33. inpanel-1.2.7/inpanel/mod/redis.py +518 -0
  34. inpanel-1.2.7/inpanel/mod/remote.py +186 -0
  35. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/server.py +148 -103
  36. inpanel-1.2.7/inpanel/mod/service.py +597 -0
  37. inpanel-1.2.7/inpanel/mod/service_manager.py +910 -0
  38. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/setting.py +6 -6
  39. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/ssh.py +324 -280
  40. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/system.py +86 -2
  41. inpanel-1.2.7/inpanel/mod/task.py +366 -0
  42. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/user.py +5 -5
  43. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/yum.py +57 -58
  44. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/css/global.css +5 -14
  45. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/index.html +7 -3
  46. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/controllers.js +6 -15
  47. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/database.js +286 -40
  48. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/ecs.js +6 -6
  49. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/file.js +1085 -988
  50. inpanel-1.2.7/inpanel/public/js/controllers/logs.js +291 -0
  51. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/service.js +249 -155
  52. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/site.js +36 -37
  53. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/utils.js +2948 -2789
  54. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/core.js +247 -245
  55. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/directives.js +116 -300
  56. inpanel-1.2.7/inpanel/public/lib/angular/1.0.8/angular.min.js +163 -0
  57. inpanel-1.2.7/inpanel/public/lib/codemirror/addon/edit/matchbrackets.min.js +1 -0
  58. inpanel-1.2.7/inpanel/public/lib/codemirror/addon/search/match-highlighter.min.js +1 -0
  59. inpanel-1.2.7/inpanel/public/lib/codemirror/addon/selection/active-line.min.js +1 -0
  60. inpanel-1.2.7/inpanel/public/lib/codemirror/codemirror.min.css +1 -0
  61. inpanel-1.2.7/inpanel/public/lib/codemirror/codemirror.min.js +1 -0
  62. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/css/css.min.js +1 -0
  63. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/diff/diff.min.js +1 -0
  64. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/dockerfile/dockerfile.min.js +1 -0
  65. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/go/go.min.js +1 -0
  66. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/htmlmixed/htmlmixed.min.js +1 -0
  67. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/javascript/javascript.min.js +1 -0
  68. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/lua/lua.min.js +1 -0
  69. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/markdown/markdown.min.js +1 -0
  70. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/nginx/nginx.min.js +1 -0
  71. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/perl/perl.min.js +1 -0
  72. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/php/php.min.js +1 -0
  73. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/properties/properties.min.js +1 -0
  74. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/python/python.min.js +1 -0
  75. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/ruby/ruby.min.js +1 -0
  76. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/rust/rust.min.js +1 -0
  77. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/shell/shell.min.js +1 -0
  78. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/sql/sql.min.js +1 -0
  79. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/toml/toml.min.js +1 -0
  80. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/xml/xml.min.js +1 -0
  81. inpanel-1.2.7/inpanel/public/lib/codemirror/mode/yaml/yaml.min.js +1 -0
  82. inpanel-1.2.7/inpanel/public/partials/database/index.html +401 -0
  83. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/file/trash.html +4 -2
  84. inpanel-1.2.7/inpanel/public/partials/logs.html +442 -0
  85. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/main.html +0 -5
  86. inpanel-1.2.7/inpanel/public/partials/service/index.html +77 -0
  87. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/setting.html +1 -1
  88. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/index.html +20 -20
  89. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/sources.html +181 -126
  90. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/task.html +9 -9
  91. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/templates/index.html +7 -3
  92. inpanel-1.2.7/inpanel/templates/services/__init__.py +124 -0
  93. inpanel-1.2.7/inpanel/templates/services/_common.json +8 -0
  94. inpanel-1.2.7/inpanel/templates/services/categories.json +68 -0
  95. inpanel-1.2.7/inpanel/templates/services/database.json +170 -0
  96. inpanel-1.2.7/inpanel/templates/services/ftp.json +69 -0
  97. inpanel-1.2.7/inpanel/templates/services/http.json +153 -0
  98. inpanel-1.2.7/inpanel/templates/services/java.json +86 -0
  99. inpanel-1.2.7/inpanel/templates/services/mail.json +47 -0
  100. inpanel-1.2.7/inpanel/templates/services/nodejs.json +82 -0
  101. inpanel-1.2.7/inpanel/templates/services/php.json +194 -0
  102. inpanel-1.2.7/inpanel/templates/services/security.json +93 -0
  103. inpanel-1.2.7/inpanel/templates/services/storage.json +28 -0
  104. inpanel-1.2.7/inpanel/templates/services/system.json +122 -0
  105. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/__init__.py +3 -2
  106. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/utils.py +9 -10
  107. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/web.py +226 -427
  108. {inpanel-1.2.5 → inpanel-1.2.7}/pyproject.toml +2 -2
  109. inpanel-1.2.5/inpanel/mod/file.py +0 -816
  110. inpanel-1.2.5/inpanel/mod/mysql.py +0 -577
  111. inpanel-1.2.5/inpanel/mod/remote.py +0 -109
  112. inpanel-1.2.5/inpanel/mod/service.py +0 -280
  113. inpanel-1.2.5/inpanel/mod/task.py +0 -1442
  114. inpanel-1.2.5/inpanel/public/lib/codemirror/codemirror-compressed.js +0 -1
  115. inpanel-1.2.5/inpanel/public/lib/codemirror/codemirror.css +0 -173
  116. inpanel-1.2.5/inpanel/public/partials/database/index.html +0 -172
  117. inpanel-1.2.5/inpanel/public/partials/log.html +0 -83
  118. inpanel-1.2.5/inpanel/public/partials/service/index.html +0 -468
  119. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/dependency_links.txt +0 -0
  120. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/entry_points.txt +0 -0
  121. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/requires.txt +0 -0
  122. {inpanel-1.2.5 → inpanel-1.2.7}/InPanel.egg-info/top_level.txt +0 -0
  123. {inpanel-1.2.5 → inpanel-1.2.7}/LICENSE +0 -0
  124. {inpanel-1.2.5 → inpanel-1.2.7}/MANIFEST.in +0 -0
  125. {inpanel-1.2.5 → inpanel-1.2.7}/README.md +0 -0
  126. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/__init__.py +0 -0
  127. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/__init__.py +0 -0
  128. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/async_process.py +0 -0
  129. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/magic.py +0 -0
  130. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/lib/pyDes.py +0 -0
  131. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/__init__.py +0 -0
  132. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/docker.py +0 -0
  133. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall.py +0 -0
  134. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_base.py +0 -0
  135. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_firewalld.py +0 -0
  136. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_iptables.py +0 -0
  137. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_macos.py +0 -0
  138. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/firewall_ufw.py +0 -0
  139. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/lighttpd.py +0 -0
  140. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/named.py +0 -0
  141. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_apt.py +0 -0
  142. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_base.py +0 -0
  143. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_dnf.py +0 -0
  144. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_map.py +0 -0
  145. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/package_yum.py +0 -0
  146. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/proftpd.py +0 -0
  147. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/pureftpd.py +0 -0
  148. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/shell.py +0 -0
  149. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/mod/vsftpd.py +0 -0
  150. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/plugin.py +0 -0
  151. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/favicon.ico +0 -0
  152. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/alipay.jpg +0 -0
  153. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/loading.gif +0 -0
  154. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/images/weixin.jpg +0 -0
  155. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/container.js +0 -0
  156. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/controllers/plugins.js +0 -0
  157. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/filters.js +0 -0
  158. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/js/services.js +0 -0
  159. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/angular/1.0.2/angular-resource.min.js +0 -0
  160. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/angular/1.0.2/angular.min.js +0 -0
  161. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css +0 -0
  162. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +0 -0
  163. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +0 -0
  164. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +0 -0
  165. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.css +0 -0
  166. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.css.map +0 -0
  167. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.min.css +0 -0
  168. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +0 -0
  169. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  170. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
  171. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  172. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  173. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  174. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  175. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  176. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/bootstrap.js +0 -0
  177. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/bootstrap.min.js +0 -0
  178. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/bootstrap/js/npm.js +0 -0
  179. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/jquery/jquery-1.12.4.min.js +0 -0
  180. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/md5/md5.js +0 -0
  181. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/lib/md5/md5.min.js +0 -0
  182. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/message.html +0 -0
  183. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/navbar.html +0 -0
  184. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/selector.html +0 -0
  185. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvbase.html +0 -0
  186. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvext.html +0 -0
  187. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvfile.html +0 -0
  188. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvinstall.html +0 -0
  189. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvlog.html +0 -0
  190. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvminiop.html +0 -0
  191. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvuninstall.html +0 -0
  192. {inpanel-1.2.5/inpanel/public/partials → inpanel-1.2.7/inpanel/public/partials/container}/directives/srvupdate.html +0 -0
  193. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/container/index.html +0 -0
  194. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/dbedit.html +0 -0
  195. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/dbnew.html +0 -0
  196. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/useredit.html +0 -0
  197. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/database/mysql/usernew.html +0 -0
  198. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/account.html +0 -0
  199. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/ecs.html +0 -0
  200. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/index.html +0 -0
  201. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ecs/setings.html +0 -0
  202. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/file/file.html +0 -0
  203. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/ftp.html +0 -0
  204. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/login.html +0 -0
  205. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/logout.html +0 -0
  206. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/config.html +0 -0
  207. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/detail.html +0 -0
  208. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/index.html +0 -0
  209. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/plugins/info.html +0 -0
  210. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/secure.html +0 -0
  211. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/apache.html +0 -0
  212. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/cron.html +0 -0
  213. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/fail2ban.html +0 -0
  214. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/firewalld.html +0 -0
  215. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/iptables.html +0 -0
  216. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java11.html +0 -0
  217. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java17.html +0 -0
  218. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java21.html +0 -0
  219. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/java8.html +0 -0
  220. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/lighttpd.html +0 -0
  221. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mariadb.html +0 -0
  222. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/memcache.html +0 -0
  223. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/minio.html +0 -0
  224. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mongodb.html +0 -0
  225. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/mysql.html +0 -0
  226. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/named.html +0 -0
  227. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nginx.html +0 -0
  228. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs18.html +0 -0
  229. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs20.html +0 -0
  230. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs22.html +0 -0
  231. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/nodejs24.html +0 -0
  232. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ntp.html +0 -0
  233. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php.html +0 -0
  234. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php56.html +0 -0
  235. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php74.html +0 -0
  236. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php80.html +0 -0
  237. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php81.html +0 -0
  238. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php82.html +0 -0
  239. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php83.html +0 -0
  240. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/php84.html +0 -0
  241. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/proftpd.html +0 -0
  242. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/pureftpd.html +0 -0
  243. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/redis.html +0 -0
  244. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/samba.html +0 -0
  245. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/sendmail.html +0 -0
  246. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ssh.html +0 -0
  247. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/tomcat.html +0 -0
  248. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/ufw.html +0 -0
  249. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/service/vsftpd.html +0 -0
  250. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/apache/site.html +0 -0
  251. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/index.html +0 -0
  252. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/site/nginx/site.html +0 -0
  253. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/sorry.html +0 -0
  254. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/autofm.html +0 -0
  255. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/backup.html +0 -0
  256. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/index.html +0 -0
  257. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/migrate.html +0 -0
  258. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/movedata.html +0 -0
  259. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/storage/remote.html +0 -0
  260. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/cron.html +0 -0
  261. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/firewall.html +0 -0
  262. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/network.html +0 -0
  263. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/process.html +0 -0
  264. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/shell.html +0 -0
  265. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/ssl.html +0 -0
  266. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/time.html +0 -0
  267. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/partials/utils/user.html +0 -0
  268. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/robots.txt +0 -0
  269. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/public/templates/file/preview.html +0 -0
  270. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/__init__.py +0 -0
  271. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/apt.json +0 -0
  272. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/brew.json +0 -0
  273. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/dnf.json +0 -0
  274. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/docker.json +0 -0
  275. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/package_map.json +0 -0
  276. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/pip.json +0 -0
  277. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/third_party.json +0 -0
  278. {inpanel-1.2.5 → inpanel-1.2.7}/inpanel/templates/sources/yum.json +0 -0
  279. {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.5
4
- Summary: InPanel - A Web-based Linux Server Management Tool
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-compressed.js
115
- inpanel/public/lib/codemirror/codemirror.css
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.5
4
- Summary: InPanel - A Web-based Linux Server Management Tool
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: %s' % logfile)
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 os.path.exists(systemd_service):
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
- os.remove(systemd_service)
256
+ Path(systemd_service).unlink()
257
257
  print(f' removed: {systemd_service}')
258
- if os.path.exists(systemd_service_etc):
259
- os.remove(systemd_service_etc)
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 os.path.exists(initd_script):
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
- os.remove(initd_script)
276
+ Path(initd_script).unlink()
277
277
  print(f' removed: {initd_script}')
278
278
 
279
279
  # 移除二进制文件 / 控制台脚本
280
- if os.path.exists(bin_path):
281
- os.remove(bin_path)
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 os.path.exists(config_path):
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 os.path.exists(logging_path):
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 = os.path.dirname(pidfile)
311
- if os.path.exists(pidfile):
312
- os.remove(pidfile)
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-18'
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
- history_path = '/etc/inpanel/history.txt'
73
- logging_path = '/var/log/inpanel/'
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
- history_path = str(Path(root_path) / 'data' / 'history.txt')
110
- logging_path = str(Path(root_path) / 'data')
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
- 'history_path', 'logfile', 'logerror', 'pidfile', 'processor'
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 = '%s:%s' % (pwd, key)
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() / ("%s.lock" % file_name))
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 %s'%(str(port))
190
- cmd = "ssh %s -l %s %s" % (ssh_options, username, server)
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("{0}\n{1}".format(err_msg, err))
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("{0}:\nUrl: {1}\nData: {2}\nResponse Code: {3}\nResponse: {4}".format(
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 = "{0}.{1}".format(protected64, payload64).encode('utf8')
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 = "{0:x}".format(int(pub_exp))
151
- pub_exp = "0{0}".format(pub_exp) if len(pub_exp) % 2 else pub_exp
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 {0}".format(self.csr))
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: {0}".format(", ".join(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 {0} Verifying...".format(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 = "{0}.{1}".format(token, self.thumbprint)
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://{0}/.well-known/acme-challenge/{1}".format(domain, token)
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
- os.remove(wellknown_path)
233
- raise ValueError("Wrote file to {0}, but couldn't download {1}: {2}".format(
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: {0}".format(domain))
239
- authorization = self._poll_until_not(auth_url, ["pending"], "Error checking challenge status for {0}".format(domain))
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 {0}: {1}".format(domain, authorization))
242
- print("Domain {0} verified!".format(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: {0}".format(order))
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('%s=%s' %
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('## Zones in %s\n' % region['RegionCode'])
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('## Instances in %s\n' % zone['ZoneCode'])
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)