InPanel 1.2.2__tar.gz → 1.2.4__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 (253) hide show
  1. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/PKG-INFO +3 -3
  2. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/SOURCES.txt +45 -24
  3. {inpanel-1.2.2 → inpanel-1.2.4}/PKG-INFO +3 -3
  4. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/app.py +40 -34
  5. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/base.py +50 -43
  6. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/config.py +4 -1
  7. {inpanel-1.2.2/inpanel → inpanel-1.2.4/inpanel/mod}/acme.py +29 -29
  8. {inpanel-1.2.2/inpanel → inpanel-1.2.4/inpanel/mod}/aliyuncs.py +1 -1
  9. inpanel-1.2.4/inpanel/mod/apt.py +820 -0
  10. inpanel-1.2.4/inpanel/mod/brew.py +602 -0
  11. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/certificate.py +1 -1
  12. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/config.py +1 -1
  13. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/cron.py +1 -1
  14. inpanel-1.2.4/inpanel/mod/dnf.py +611 -0
  15. inpanel-1.2.4/inpanel/mod/docker.py +440 -0
  16. inpanel-1.2.4/inpanel/mod/docker_source.py +407 -0
  17. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/file.py +1 -1
  18. inpanel-1.2.4/inpanel/mod/firewall.py +204 -0
  19. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/firewall_base.py +18 -19
  20. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/firewall_firewalld.py +16 -17
  21. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/firewall_iptables.py +16 -17
  22. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/firewall_macos.py +17 -18
  23. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/firewall_ufw.py +16 -17
  24. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/ftp.py +1 -1
  25. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/httpd.py +1 -1
  26. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/lighttpd.py +1 -1
  27. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/login.py +1 -1
  28. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/mysql.py +1 -1
  29. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/named.py +1 -1
  30. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/nginx.py +1 -1
  31. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/package.py +2 -4
  32. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/package_apt.py +18 -13
  33. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/package_base.py +29 -10
  34. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/package_dnf.py +18 -13
  35. inpanel-1.2.4/inpanel/mod/package_map.py +100 -0
  36. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/package_yum.py +21 -13
  37. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/php.py +1 -1
  38. inpanel-1.2.4/inpanel/mod/pip.py +373 -0
  39. inpanel-1.2.4/inpanel/mod/plugins.py +524 -0
  40. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/process.py +1 -1
  41. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/proftpd.py +1 -1
  42. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/pureftpd.py +1 -1
  43. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/query.py +1 -1
  44. {inpanel-1.2.2/inpanel → inpanel-1.2.4/inpanel/mod}/remote.py +5 -5
  45. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/server.py +257 -52
  46. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/service.py +19 -1
  47. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/setting.py +1 -1
  48. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/shell.py +1 -1
  49. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/ssh.py +1 -1
  50. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/system.py +16 -17
  51. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/task.py +2 -2
  52. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/ufw.py +2 -2
  53. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/user.py +1 -1
  54. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/vsftpd.py +1 -1
  55. inpanel-1.2.4/inpanel/mod/yum.py +816 -0
  56. inpanel-1.2.4/inpanel/plugin.py +203 -0
  57. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/index.html +1 -1
  58. inpanel-1.2.4/inpanel/public/js/controllers/container.js +195 -0
  59. inpanel-1.2.4/inpanel/public/js/controllers/plugins.js +222 -0
  60. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/service.js +582 -0
  61. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/utils.js +537 -165
  62. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/core.js +27 -3
  63. inpanel-1.2.4/inpanel/public/partials/container/index.html +348 -0
  64. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/navbar.html +2 -1
  65. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/main.html +22 -5
  66. inpanel-1.2.4/inpanel/public/partials/plugins/config.html +25 -0
  67. inpanel-1.2.4/inpanel/public/partials/plugins/detail.html +61 -0
  68. inpanel-1.2.4/inpanel/public/partials/plugins/index.html +51 -0
  69. inpanel-1.2.4/inpanel/public/partials/plugins/info.html +23 -0
  70. inpanel-1.2.4/inpanel/public/partials/service/fail2ban.html +40 -0
  71. inpanel-1.2.4/inpanel/public/partials/service/firewalld.html +40 -0
  72. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/index.html +191 -16
  73. inpanel-1.2.4/inpanel/public/partials/service/java11.html +40 -0
  74. inpanel-1.2.4/inpanel/public/partials/service/java17.html +40 -0
  75. inpanel-1.2.4/inpanel/public/partials/service/java21.html +40 -0
  76. inpanel-1.2.4/inpanel/public/partials/service/java8.html +40 -0
  77. inpanel-1.2.4/inpanel/public/partials/service/nodejs18.html +40 -0
  78. inpanel-1.2.4/inpanel/public/partials/service/nodejs20.html +40 -0
  79. inpanel-1.2.4/inpanel/public/partials/service/nodejs22.html +40 -0
  80. inpanel-1.2.4/inpanel/public/partials/service/nodejs24.html +40 -0
  81. inpanel-1.2.4/inpanel/public/partials/service/php56.html +233 -0
  82. inpanel-1.2.4/inpanel/public/partials/service/php74.html +233 -0
  83. inpanel-1.2.4/inpanel/public/partials/service/php80.html +233 -0
  84. inpanel-1.2.4/inpanel/public/partials/service/php81.html +233 -0
  85. inpanel-1.2.4/inpanel/public/partials/service/php82.html +233 -0
  86. inpanel-1.2.4/inpanel/public/partials/service/php83.html +233 -0
  87. inpanel-1.2.4/inpanel/public/partials/service/php84.html +233 -0
  88. inpanel-1.2.4/inpanel/public/partials/service/ufw.html +40 -0
  89. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/index.html +13 -11
  90. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/index.html +3 -3
  91. inpanel-1.2.4/inpanel/public/partials/utils/sources.html +1182 -0
  92. {inpanel-1.2.2/inpanel → inpanel-1.2.4/inpanel/public}/templates/index.html +1 -0
  93. inpanel-1.2.4/inpanel/templates/__init__.py +1 -0
  94. inpanel-1.2.4/inpanel/templates/sources/__init__.py +74 -0
  95. inpanel-1.2.4/inpanel/templates/sources/apt.json +224 -0
  96. inpanel-1.2.4/inpanel/templates/sources/brew.json +50 -0
  97. inpanel-1.2.4/inpanel/templates/sources/dnf.json +204 -0
  98. inpanel-1.2.4/inpanel/templates/sources/docker.json +49 -0
  99. inpanel-1.2.4/inpanel/templates/sources/package_map.json +71 -0
  100. inpanel-1.2.4/inpanel/templates/sources/pip.json +12 -0
  101. inpanel-1.2.4/inpanel/templates/sources/third_party.json +474 -0
  102. inpanel-1.2.4/inpanel/templates/sources/yum.json +690 -0
  103. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/utils.py +26 -27
  104. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/web.py +374 -270
  105. {inpanel-1.2.2 → inpanel-1.2.4}/pyproject.toml +3 -3
  106. inpanel-1.2.2/inpanel/apt.py +0 -223
  107. inpanel-1.2.2/inpanel/data/bookmarks.ini +0 -20
  108. inpanel-1.2.2/inpanel/data/config.ini +0 -29
  109. inpanel-1.2.2/inpanel/data/error.log +0 -294
  110. inpanel-1.2.2/inpanel/data/history.txt +0 -30
  111. inpanel-1.2.2/inpanel/data/inpanel.pid +0 -1
  112. inpanel-1.2.2/inpanel/data/lastfile.ini +0 -4
  113. inpanel-1.2.2/inpanel/data/main.log +0 -3300
  114. inpanel-1.2.2/inpanel/data/upgrade.ini +0 -6
  115. inpanel-1.2.2/inpanel/dnf.py +0 -225
  116. inpanel-1.2.2/inpanel/mod/apt.py +0 -316
  117. inpanel-1.2.2/inpanel/mod/dnf.py +0 -239
  118. inpanel-1.2.2/inpanel/mod/firewall.py +0 -199
  119. inpanel-1.2.2/inpanel/mod/package_map.py +0 -366
  120. inpanel-1.2.2/inpanel/mod/yum.py +0 -243
  121. inpanel-1.2.2/inpanel/plugins/__init__.py +0 -10
  122. inpanel-1.2.2/inpanel/plugins/acme/static/index.html +0 -10
  123. inpanel-1.2.2/inpanel/plugins/acme/static/index.js +0 -13
  124. inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/info.py +0 -73
  125. inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/static/index.html +0 -70
  126. inpanel-1.2.2/inpanel/plugins/shadowsocks-libev/static/index.js +0 -18
  127. inpanel-1.2.2/inpanel/public/js/controllers/plugins.js +0 -105
  128. inpanel-1.2.2/inpanel/public/partials/plugins/index.html +0 -55
  129. inpanel-1.2.2/inpanel/public/partials/plugins/plugins.html +0 -13
  130. inpanel-1.2.2/inpanel/public/partials/utils/repository.html +0 -373
  131. inpanel-1.2.2/inpanel/yum.py +0 -756
  132. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/dependency_links.txt +0 -0
  133. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/entry_points.txt +0 -0
  134. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/requires.txt +0 -0
  135. {inpanel-1.2.2 → inpanel-1.2.4}/InPanel.egg-info/top_level.txt +0 -0
  136. {inpanel-1.2.2 → inpanel-1.2.4}/LICENSE +0 -0
  137. {inpanel-1.2.2 → inpanel-1.2.4}/MANIFEST.in +0 -0
  138. {inpanel-1.2.2 → inpanel-1.2.4}/README.md +0 -0
  139. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/__init__.py +0 -0
  140. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/__init__.py +0 -0
  141. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/async_process.py +0 -0
  142. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/filelock.py +0 -0
  143. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/magic.py +0 -0
  144. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/pxssh.py +0 -0
  145. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/lib/pyDes.py +0 -0
  146. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/__init__.py +0 -0
  147. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/mod/disk.py +0 -0
  148. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/css/global.css +0 -0
  149. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/favicon.ico +0 -0
  150. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/images/alipay.jpg +0 -0
  151. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/images/loading.gif +0 -0
  152. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/images/weixin.jpg +0 -0
  153. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/controllers.js +0 -0
  154. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/database.js +0 -0
  155. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/ecs.js +0 -0
  156. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/file.js +0 -0
  157. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/controllers/site.js +0 -0
  158. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/directives.js +0 -0
  159. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/filters.js +0 -0
  160. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/js/services.js +0 -0
  161. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/angular/1.0.2/angular-resource.min.js +0 -0
  162. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/angular/1.0.2/angular.min.js +0 -0
  163. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css +0 -0
  164. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +0 -0
  165. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +0 -0
  166. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +0 -0
  167. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap.css +0 -0
  168. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap.css.map +0 -0
  169. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap.min.css +0 -0
  170. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +0 -0
  171. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  172. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
  173. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  174. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  175. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  176. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  177. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  178. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/js/bootstrap.js +0 -0
  179. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/js/bootstrap.min.js +0 -0
  180. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/bootstrap/js/npm.js +0 -0
  181. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/codemirror/codemirror-compressed.js +0 -0
  182. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/codemirror/codemirror.css +0 -0
  183. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/jquery/jquery-1.12.4.min.js +0 -0
  184. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/md5/md5.js +0 -0
  185. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/lib/md5/md5.min.js +0 -0
  186. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/database/index.html +0 -0
  187. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/database/mysql/dbedit.html +0 -0
  188. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/database/mysql/dbnew.html +0 -0
  189. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/database/mysql/useredit.html +0 -0
  190. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/database/mysql/usernew.html +0 -0
  191. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/message.html +0 -0
  192. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/selector.html +0 -0
  193. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvbase.html +0 -0
  194. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvext.html +0 -0
  195. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvfile.html +0 -0
  196. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvinstall.html +0 -0
  197. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvlog.html +0 -0
  198. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvminiop.html +0 -0
  199. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvuninstall.html +0 -0
  200. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/directives/srvupdate.html +0 -0
  201. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/ecs/account.html +0 -0
  202. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/ecs/ecs.html +0 -0
  203. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/ecs/index.html +0 -0
  204. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/ecs/setings.html +0 -0
  205. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/file/file.html +0 -0
  206. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/file/trash.html +0 -0
  207. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/ftp.html +0 -0
  208. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/log.html +0 -0
  209. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/login.html +0 -0
  210. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/logout.html +0 -0
  211. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/secure.html +0 -0
  212. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/apache.html +0 -0
  213. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/cron.html +0 -0
  214. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/iptables.html +0 -0
  215. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/lighttpd.html +0 -0
  216. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/mariadb.html +0 -0
  217. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/memcache.html +0 -0
  218. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/minio.html +0 -0
  219. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/mongodb.html +0 -0
  220. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/mysql.html +0 -0
  221. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/named.html +0 -0
  222. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/nginx.html +0 -0
  223. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/ntp.html +0 -0
  224. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/php.html +0 -0
  225. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/proftpd.html +0 -0
  226. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/pureftpd.html +0 -0
  227. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/redis.html +0 -0
  228. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/samba.html +0 -0
  229. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/sendmail.html +0 -0
  230. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/ssh.html +0 -0
  231. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/tomcat.html +0 -0
  232. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/service/vsftpd.html +0 -0
  233. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/setting.html +0 -0
  234. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/site/apache/site.html +0 -0
  235. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/site/index.html +0 -0
  236. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/site/nginx/site.html +0 -0
  237. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/sorry.html +0 -0
  238. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/autofm.html +0 -0
  239. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/backup.html +0 -0
  240. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/migrate.html +0 -0
  241. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/movedata.html +0 -0
  242. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/storage/remote.html +0 -0
  243. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/cron.html +0 -0
  244. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/firewall.html +0 -0
  245. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/network.html +0 -0
  246. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/process.html +0 -0
  247. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/shell.html +0 -0
  248. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/ssl.html +0 -0
  249. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/time.html +0 -0
  250. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/partials/utils/user.html +0 -0
  251. {inpanel-1.2.2 → inpanel-1.2.4}/inpanel/public/robots.txt +0 -0
  252. {inpanel-1.2.2/inpanel → inpanel-1.2.4/inpanel/public}/templates/file/preview.html +0 -0
  253. {inpanel-1.2.2 → inpanel-1.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: InPanel
3
- Version: 1.2.2
3
+ Version: 1.2.4
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
@@ -9,25 +9,12 @@ InPanel.egg-info/entry_points.txt
9
9
  InPanel.egg-info/requires.txt
10
10
  InPanel.egg-info/top_level.txt
11
11
  inpanel/__init__.py
12
- inpanel/acme.py
13
- inpanel/aliyuncs.py
14
12
  inpanel/app.py
15
- inpanel/apt.py
16
13
  inpanel/base.py
17
14
  inpanel/config.py
18
- inpanel/dnf.py
19
- inpanel/remote.py
15
+ inpanel/plugin.py
20
16
  inpanel/utils.py
21
17
  inpanel/web.py
22
- 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
18
  inpanel/lib/__init__.py
32
19
  inpanel/lib/async_process.py
33
20
  inpanel/lib/filelock.py
@@ -35,12 +22,17 @@ inpanel/lib/magic.py
35
22
  inpanel/lib/pxssh.py
36
23
  inpanel/lib/pyDes.py
37
24
  inpanel/mod/__init__.py
25
+ inpanel/mod/acme.py
26
+ inpanel/mod/aliyuncs.py
38
27
  inpanel/mod/apt.py
28
+ inpanel/mod/brew.py
39
29
  inpanel/mod/certificate.py
40
30
  inpanel/mod/config.py
41
31
  inpanel/mod/cron.py
42
32
  inpanel/mod/disk.py
43
33
  inpanel/mod/dnf.py
34
+ inpanel/mod/docker.py
35
+ inpanel/mod/docker_source.py
44
36
  inpanel/mod/file.py
45
37
  inpanel/mod/firewall.py
46
38
  inpanel/mod/firewall_base.py
@@ -62,10 +54,13 @@ inpanel/mod/package_dnf.py
62
54
  inpanel/mod/package_map.py
63
55
  inpanel/mod/package_yum.py
64
56
  inpanel/mod/php.py
57
+ inpanel/mod/pip.py
58
+ inpanel/mod/plugins.py
65
59
  inpanel/mod/process.py
66
60
  inpanel/mod/proftpd.py
67
61
  inpanel/mod/pureftpd.py
68
62
  inpanel/mod/query.py
63
+ inpanel/mod/remote.py
69
64
  inpanel/mod/server.py
70
65
  inpanel/mod/service.py
71
66
  inpanel/mod/setting.py
@@ -77,12 +72,6 @@ inpanel/mod/ufw.py
77
72
  inpanel/mod/user.py
78
73
  inpanel/mod/vsftpd.py
79
74
  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
75
  inpanel/public/favicon.ico
87
76
  inpanel/public/index.html
88
77
  inpanel/public/robots.txt
@@ -94,6 +83,7 @@ inpanel/public/js/core.js
94
83
  inpanel/public/js/directives.js
95
84
  inpanel/public/js/filters.js
96
85
  inpanel/public/js/services.js
86
+ inpanel/public/js/controllers/container.js
97
87
  inpanel/public/js/controllers/controllers.js
98
88
  inpanel/public/js/controllers/database.js
99
89
  inpanel/public/js/controllers/ecs.js
@@ -135,6 +125,7 @@ inpanel/public/partials/main.html
135
125
  inpanel/public/partials/secure.html
136
126
  inpanel/public/partials/setting.html
137
127
  inpanel/public/partials/sorry.html
128
+ inpanel/public/partials/container/index.html
138
129
  inpanel/public/partials/database/index.html
139
130
  inpanel/public/partials/database/mysql/dbedit.html
140
131
  inpanel/public/partials/database/mysql/dbnew.html
@@ -157,12 +148,20 @@ inpanel/public/partials/ecs/index.html
157
148
  inpanel/public/partials/ecs/setings.html
158
149
  inpanel/public/partials/file/file.html
159
150
  inpanel/public/partials/file/trash.html
151
+ inpanel/public/partials/plugins/config.html
152
+ inpanel/public/partials/plugins/detail.html
160
153
  inpanel/public/partials/plugins/index.html
161
- inpanel/public/partials/plugins/plugins.html
154
+ inpanel/public/partials/plugins/info.html
162
155
  inpanel/public/partials/service/apache.html
163
156
  inpanel/public/partials/service/cron.html
157
+ inpanel/public/partials/service/fail2ban.html
158
+ inpanel/public/partials/service/firewalld.html
164
159
  inpanel/public/partials/service/index.html
165
160
  inpanel/public/partials/service/iptables.html
161
+ inpanel/public/partials/service/java11.html
162
+ inpanel/public/partials/service/java17.html
163
+ inpanel/public/partials/service/java21.html
164
+ inpanel/public/partials/service/java8.html
166
165
  inpanel/public/partials/service/lighttpd.html
167
166
  inpanel/public/partials/service/mariadb.html
168
167
  inpanel/public/partials/service/memcache.html
@@ -171,8 +170,19 @@ inpanel/public/partials/service/mongodb.html
171
170
  inpanel/public/partials/service/mysql.html
172
171
  inpanel/public/partials/service/named.html
173
172
  inpanel/public/partials/service/nginx.html
173
+ inpanel/public/partials/service/nodejs18.html
174
+ inpanel/public/partials/service/nodejs20.html
175
+ inpanel/public/partials/service/nodejs22.html
176
+ inpanel/public/partials/service/nodejs24.html
174
177
  inpanel/public/partials/service/ntp.html
175
178
  inpanel/public/partials/service/php.html
179
+ inpanel/public/partials/service/php56.html
180
+ inpanel/public/partials/service/php74.html
181
+ inpanel/public/partials/service/php80.html
182
+ inpanel/public/partials/service/php81.html
183
+ inpanel/public/partials/service/php82.html
184
+ inpanel/public/partials/service/php83.html
185
+ inpanel/public/partials/service/php84.html
176
186
  inpanel/public/partials/service/proftpd.html
177
187
  inpanel/public/partials/service/pureftpd.html
178
188
  inpanel/public/partials/service/redis.html
@@ -180,6 +190,7 @@ inpanel/public/partials/service/samba.html
180
190
  inpanel/public/partials/service/sendmail.html
181
191
  inpanel/public/partials/service/ssh.html
182
192
  inpanel/public/partials/service/tomcat.html
193
+ inpanel/public/partials/service/ufw.html
183
194
  inpanel/public/partials/service/vsftpd.html
184
195
  inpanel/public/partials/site/index.html
185
196
  inpanel/public/partials/site/apache/site.html
@@ -195,10 +206,20 @@ inpanel/public/partials/utils/firewall.html
195
206
  inpanel/public/partials/utils/index.html
196
207
  inpanel/public/partials/utils/network.html
197
208
  inpanel/public/partials/utils/process.html
198
- inpanel/public/partials/utils/repository.html
199
209
  inpanel/public/partials/utils/shell.html
210
+ inpanel/public/partials/utils/sources.html
200
211
  inpanel/public/partials/utils/ssl.html
201
212
  inpanel/public/partials/utils/time.html
202
213
  inpanel/public/partials/utils/user.html
203
- inpanel/templates/index.html
204
- inpanel/templates/file/preview.html
214
+ inpanel/public/templates/index.html
215
+ inpanel/public/templates/file/preview.html
216
+ inpanel/templates/__init__.py
217
+ inpanel/templates/sources/__init__.py
218
+ inpanel/templates/sources/apt.json
219
+ inpanel/templates/sources/brew.json
220
+ inpanel/templates/sources/dnf.json
221
+ inpanel/templates/sources/docker.json
222
+ inpanel/templates/sources/package_map.json
223
+ inpanel/templates/sources/pip.json
224
+ inpanel/templates/sources/third_party.json
225
+ inpanel/templates/sources/yum.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: InPanel
3
- Version: 1.2.2
3
+ Version: 1.2.4
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
@@ -4,7 +4,7 @@
4
4
  # Copyright (c) 2017-2026 Jackson Dou
5
5
  # All rights reserved.
6
6
  #
7
- # InPanel is distributed under the terms of The New BSD License.
7
+ # InPanel is distributed under the terms of the (new) BSD License.
8
8
  # The full license can be found in 'LICENSE'.
9
9
 
10
10
  import os
@@ -20,14 +20,14 @@ 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
27
27
 
28
28
 
29
29
  def _read_pid(pidfile):
30
- """read pid from pidfile, return None if not exists or invalid"""
30
+ """ pid 文件读取进程 ID,若文件不存在或内容无效则返回 None"""
31
31
  pidfile_path = Path(pidfile)
32
32
  if not pidfile_path.exists():
33
33
  return None
@@ -39,7 +39,7 @@ def _read_pid(pidfile):
39
39
 
40
40
 
41
41
  def _is_running(pid):
42
- """check if process with pid is running"""
42
+ """检查指定 PID 的进程是否正在运行"""
43
43
  if pid is None or pid <= 0:
44
44
  return False
45
45
  try:
@@ -50,7 +50,7 @@ def _is_running(pid):
50
50
 
51
51
 
52
52
  def _wait_stop(pid, timeout=10):
53
- """wait for process to stop, return True if stopped"""
53
+ """等待进程停止,超时返回 False,成功停止返回 True"""
54
54
  for _ in range(timeout * 2):
55
55
  if not _is_running(pid):
56
56
  return True
@@ -94,7 +94,7 @@ Examples:
94
94
 
95
95
 
96
96
  def cmd_start():
97
- """start the service in background"""
97
+ """以后台守护进程方式启动服务"""
98
98
  pid = _read_pid(pidfile)
99
99
  if pid and _is_running(pid):
100
100
  print(f'InPanel is already running with PID: {pid}')
@@ -132,11 +132,11 @@ def cmd_start():
132
132
  print(f'InPanel: fork failed: {e}')
133
133
  sys.exit(1)
134
134
 
135
- # child process: detach and run server
135
+ # 子进程:脱离终端并运行服务器
136
136
  os.setsid()
137
137
  os.umask(0)
138
138
 
139
- # redirect stdin/stdout/stderr to log file
139
+ # 重定向标准输入/输出/错误到日志文件
140
140
  sys.stdout.flush()
141
141
  sys.stderr.flush()
142
142
  with open('/dev/null', 'r') as f:
@@ -150,7 +150,7 @@ def cmd_start():
150
150
 
151
151
 
152
152
  def cmd_stop():
153
- """stop the service"""
153
+ """停止服务"""
154
154
  pid = _read_pid(pidfile)
155
155
  if not pid:
156
156
  print('InPanel is not running (no pid file)')
@@ -178,7 +178,7 @@ def cmd_stop():
178
178
 
179
179
 
180
180
  def cmd_status():
181
- """show service status"""
181
+ """显示服务运行状态"""
182
182
  pid = _read_pid(pidfile)
183
183
  if not pid:
184
184
  print('InPanel: not running')
@@ -197,7 +197,7 @@ def cmd_status():
197
197
 
198
198
 
199
199
  def cmd_restart():
200
- """restart the service"""
200
+ """重启服务"""
201
201
  pid = _read_pid(pidfile)
202
202
  if pid and _is_running(pid):
203
203
  cmd_stop()
@@ -206,13 +206,13 @@ def cmd_restart():
206
206
 
207
207
 
208
208
  def cmd_reload():
209
- """reload the service (same as restart)"""
209
+ """重新加载服务(与重启相同)"""
210
210
  print('InPanel: reloading (restart)...')
211
211
  cmd_restart()
212
212
 
213
213
 
214
214
  def cmd_uninstall(args=None):
215
- """uninstall inpanel"""
215
+ """卸载 InPanel"""
216
216
  if os.geteuid() != 0:
217
217
  print('Error: uninstall must be run as root.')
218
218
  sys.exit(1)
@@ -246,7 +246,7 @@ def cmd_uninstall(args=None):
246
246
 
247
247
  print('Uninstalling InPanel...')
248
248
 
249
- # remove systemd service
249
+ # 移除 systemd 服务
250
250
  if os.path.exists(systemd_service):
251
251
  try:
252
252
  subprocess.run(['systemctl', 'stop', 'inpanel'], stderr=subprocess.DEVNULL)
@@ -263,7 +263,7 @@ def cmd_uninstall(args=None):
263
263
  except Exception:
264
264
  pass
265
265
 
266
- # remove init.d script
266
+ # 移除 init.d 脚本
267
267
  if os.path.exists(initd_script):
268
268
  try:
269
269
  subprocess.run(['chkconfig', '--del', 'inpanel'], stderr=subprocess.DEVNULL)
@@ -276,19 +276,19 @@ def cmd_uninstall(args=None):
276
276
  os.remove(initd_script)
277
277
  print(f' removed: {initd_script}')
278
278
 
279
- # remove binary / console script
279
+ # 移除二进制文件 / 控制台脚本
280
280
  if os.path.exists(bin_path):
281
281
  os.remove(bin_path)
282
282
  print(f' removed: {bin_path}')
283
283
 
284
- # remove python package via pip
284
+ # 通过 pip 移除 Python
285
285
  if run_type == 'system':
286
286
  try:
287
287
  subprocess.run([sys.executable, '-m', 'pip', 'uninstall', '-y', 'inpanel'],
288
288
  stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
289
289
  print(' removed: inpanel python package')
290
290
  except Exception:
291
- # try to find and remove manually
291
+ # 尝试手动查找并删除
292
292
  pkg_path = Path(__file__).parent.resolve()
293
293
  if pkg_path.exists() and ('site-packages' in str(pkg_path) or 'dist-packages' in str(pkg_path)):
294
294
  egg_info = pkg_path.parent / 'inpanel.egg-info'
@@ -297,12 +297,12 @@ def cmd_uninstall(args=None):
297
297
  shutil.rmtree(pkg_path, ignore_errors=True)
298
298
  print(f' removed: {pkg_path}')
299
299
 
300
- # remove config files (optional)
300
+ # 移除配置文件(可选)
301
301
  if purge_config and config_path and os.path.exists(config_path):
302
302
  shutil.rmtree(config_path, ignore_errors=True)
303
303
  print(f' removed: {config_path} (config files)')
304
304
 
305
- # remove log files (optional)
305
+ # 移除日志文件(可选)
306
306
  if purge_logs and logging_path and os.path.exists(logging_path):
307
307
  shutil.rmtree(logging_path, ignore_errors=True)
308
308
  print(f' removed: {logging_path} (log files)')
@@ -320,7 +320,7 @@ def cmd_uninstall(args=None):
320
320
 
321
321
 
322
322
  def run_server():
323
- """run the server in foreground"""
323
+ """以前台模式运行服务器"""
324
324
  try:
325
325
  Path(logfile).parent.mkdir(parents=True, exist_ok=True)
326
326
  Path(logerror).parent.mkdir(parents=True, exist_ok=True)
@@ -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' : config_path,
359
- 'index_path' : str(Path(root_path) / 'templates' / 'index.html'),
360
- 'template_path' : str(Path(root_path) / 'templates'),
358
+ 'data_path' : data_path,
359
+ 'index_path' : str(Path(root_path) / 'public' / 'templates' / 'index.html'),
360
+ 'template_path' : str(Path(root_path) / 'public' / 'templates'),
361
361
  'static_path' : str(Path(root_path) / 'public'),
362
- 'plugins_path' : str(Path(root_path) / 'plugins'),
362
+ 'plugins_path' : str(Path(data_path) / 'plugins'),
363
363
  'xsrf_cookies' : True,
364
364
  'gzip' : True
365
365
  }
@@ -374,21 +374,27 @@ def run_server():
374
374
  (r'/api/process/(.+?)(?:/(.+))?', WebRequestProcess),
375
375
  (r'/api/time/(.+?)(?:/(.+))?', web.UtilsTimeHandler),
376
376
  (r'/api/ssl/(.+?)(?:/(.+))?', web.SSLTLSHandler),
377
- (r'/api/repos/yum/(.+?)(?:/(.+))?', web.RepoYumHandler),
378
- (r'/api/repos/dnf/(.+?)(?:/(.+))?', web.RepoDnfHandler),
379
- (r'/api/repos/apt/(.+?)(?:/(.+))?', web.RepoAptHandler),
377
+ (r'/api/sources/yum/(.+?)(?:/(.+))?', web.RepoYumHandler),
378
+ (r'/api/sources/dnf/(.+?)(?:/(.+))?', web.RepoDnfHandler),
379
+ (r'/api/sources/apt/(.+?)(?:/(.+))?', web.RepoAptHandler),
380
+ (r'/api/sources/brew/(.+?)(?:/(.+))?', web.RepoBrewHandler),
381
+ (r'/api/sources/pip/(.+?)(?:/(.+))?', web.RepoPipHandler),
382
+ (r'/api/sources/docker/(.+?)(?:/(.+))?', web.RepoDockerHandler),
383
+ (r'/api/sources/supported/?', web.RepoSupportedHandler),
380
384
  (r'/api/firewall/(.+)', web.FirewallHandler),
381
385
  (r'/api/setting/(.+)', web.SettingHandler),
382
386
  (r'/api/operation/(.+)', web.OperationHandler),
383
- (r'/page/file/preview/(.+)', web.FilePreviewHandler),
384
- (r'/page/(.+)/(.+)', web.PageHandler),
385
387
  (r'/api/backend/(.+)', web.BackendHandler),
386
388
  (r'/api/sitepackage/(.+)', web.SitePackageHandler),
387
389
  (r'/api/client/(.+)', web.ClientHandler),
388
- (r'/api/plugins/(.*)', web.StaticFileHandler, { 'path': settings['plugins_path']}),
390
+ (r'/api/plugins', web.PluginHandler),
391
+ (r'/api/plugins/(list|info|config|install|uninstall|toggle)', web.PluginHandler),
389
392
  (r'/api/file/download/(.+)', web.FileDownloadHandler, { 'path': '/' }),
390
393
  (r'/api/file/upload', web.FileUploadHandler),
391
394
  (r'/api/version', web.VersionHandler),
395
+ (r'/page/plugins/(.*)', web.PluginStaticFileHandler, { 'path': settings['plugins_path']}),
396
+ (r'/page/file/preview/(.+)', web.FilePreviewHandler),
397
+ (r'/page/(.+)/(.+)', web.PageHandler),
392
398
  (r'/((?:css|js|js.min|lib|partials|images|favicon\.ico|robots\.txt)(?:\/.*)?)', web.StaticFileHandler, { 'path': settings['static_path'] }),
393
399
  (r'/', web.IndexHandler),
394
400
  (r'/($)', web.StaticFileHandler, { 'path': settings['index_path'] }),
@@ -463,13 +469,13 @@ def run_server():
463
469
 
464
470
 
465
471
  def main():
466
- # route 'config' subcommand to config module
472
+ # 'config' 子命令路由到 config 模块
467
473
  if len(sys.argv) > 1 and sys.argv[1] == 'config':
468
474
  from .config import main as config_main
469
475
  config_main(sys.argv[2:])
470
476
  return
471
477
 
472
- # service control commands
478
+ # 服务控制命令
473
479
  if len(sys.argv) > 1:
474
480
  cmd = sys.argv[1].lower()
475
481
  if cmd == 'start':
@@ -506,7 +512,7 @@ def main():
506
512
  _print_help()
507
513
  sys.exit(1)
508
514
 
509
- # no arguments: show help
515
+ # 无参数:显示帮助信息
510
516
  _print_help()
511
517
 
512
518
 
@@ -1,10 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
- '''The InPanel Base Information'''
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
+ '''InPanel 基础信息模块'''
8
9
 
9
10
  import sys
10
11
  import os
@@ -40,14 +41,15 @@ __author__ = 'Jackson Dou'
40
41
  __license__ = 'BSD'
41
42
 
42
43
  app_name = 'InPanel'
43
- releasetime = '2026-07-07'
44
- DEBUG = True
44
+ releasetime = '2026-07-17'
45
+ DEBUG = False
45
46
  COMMENTFLAG = '#INPANEL#'
46
47
  GENBY = 'AUTOMATICALLY GENERATED BY INPANEL'
47
48
 
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 = 'binary'
65
- root_path = sys._MEIPASS
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 = 'system'
81
- root_path = str(package_dir)
82
- execfile = '/usr/bin/inpanel'
83
- config_path = '/etc/inpanel/'
84
- config_file = '/etc/inpanel/config.ini'
85
- lastfile_path = '/etc/inpanel/lastfile.ini'
86
- bookmarks_path = '/etc/inpanel/bookmarks.ini'
87
- upgrade_path = '/etc/inpanel/upgrade.ini'
88
- history_path = '/etc/inpanel/history.txt'
89
- logging_path = '/var/log/inpanel/'
90
- logfile = '/var/log/inpanel/main.log'
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 = str(Path(__file__).parent.resolve())
96
- execfile = str(Path(root_path) / 'app.py')
97
- config_path = str(Path(root_path) / 'data')
98
- config_file = str(Path(root_path) / 'data' / 'config.ini')
99
- lastfile_path = str(Path(root_path) / 'data' / 'lastfile.ini')
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 = str(Path(root_path) / 'data' / 'upgrade.ini')
102
- history_path = str(Path(root_path) / 'data' / 'history.txt')
103
- logging_path = str(Path(root_path) / 'data')
104
- logfile = str(Path(root_path) / 'data' / 'main.log')
105
- logerror = str(Path(root_path) / 'data' / 'error.log')
106
- pidfile = str(Path(root_path) / 'data' / 'inpanel.pid')
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)
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
+ '''InPanel 配置管理命令行工具'''
5
+
4
6
  import sys
5
7
  import logging
6
8
  from pathlib import Path
@@ -115,7 +117,8 @@ Examples:
115
117
  from hmac import new as hmac_new
116
118
  from .utils import randstr
117
119
  key = md5(randstr().encode('utf-8')).hexdigest()
118
- pwd = hmac_new(key.encode('utf-8'), value.encode('utf-8'), md5).hexdigest()
120
+ md5_password = md5(value.encode('utf-8')).hexdigest()
121
+ pwd = hmac_new(key.encode('utf-8'), md5_password.encode('utf-8'), md5).hexdigest()
119
122
  value = '%s:%s' % (pwd, key)
120
123
  logger.info(f'Password hash generated, key length: {len(key)}, hash length: {len(pwd)}')
121
124