InPanel 1.2.1__py3-none-any.whl

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 (198) hide show
  1. inpanel/__init__.py +29 -0
  2. inpanel/acme.py +289 -0
  3. inpanel/aliyuncs.py +269 -0
  4. inpanel/app.py +514 -0
  5. inpanel/apt.py +223 -0
  6. inpanel/base.py +200 -0
  7. inpanel/config.py +139 -0
  8. inpanel/data/config.ini +29 -0
  9. inpanel/data/history +5 -0
  10. inpanel/data/runlogs.ini +12 -0
  11. inpanel/data/update_info.ini +4 -0
  12. inpanel/dnf.py +225 -0
  13. inpanel/lib/__init__.py +9 -0
  14. inpanel/lib/async_process.py +98 -0
  15. inpanel/lib/filelock.py +82 -0
  16. inpanel/lib/magic.py +233 -0
  17. inpanel/lib/pxssh.py +310 -0
  18. inpanel/lib/pyDes.py +867 -0
  19. inpanel/mod/__init__.py +0 -0
  20. inpanel/mod/apt.py +316 -0
  21. inpanel/mod/certificate.py +268 -0
  22. inpanel/mod/config.py +372 -0
  23. inpanel/mod/cron.py +315 -0
  24. inpanel/mod/disk.py +322 -0
  25. inpanel/mod/dnf.py +239 -0
  26. inpanel/mod/file.py +722 -0
  27. inpanel/mod/firewall.py +199 -0
  28. inpanel/mod/firewall_base.py +137 -0
  29. inpanel/mod/firewall_firewalld.py +170 -0
  30. inpanel/mod/firewall_iptables.py +176 -0
  31. inpanel/mod/firewall_macos.py +213 -0
  32. inpanel/mod/firewall_ufw.py +128 -0
  33. inpanel/mod/ftp.py +231 -0
  34. inpanel/mod/httpd.py +1205 -0
  35. inpanel/mod/lighttpd.py +26 -0
  36. inpanel/mod/login.py +98 -0
  37. inpanel/mod/mysql.py +577 -0
  38. inpanel/mod/named.py +26 -0
  39. inpanel/mod/nginx.py +2327 -0
  40. inpanel/mod/package.py +33 -0
  41. inpanel/mod/package_apt.py +62 -0
  42. inpanel/mod/package_base.py +77 -0
  43. inpanel/mod/package_dnf.py +62 -0
  44. inpanel/mod/package_map.py +366 -0
  45. inpanel/mod/package_yum.py +64 -0
  46. inpanel/mod/php.py +289 -0
  47. inpanel/mod/process.py +291 -0
  48. inpanel/mod/proftpd.py +26 -0
  49. inpanel/mod/pureftpd.py +26 -0
  50. inpanel/mod/query.py +108 -0
  51. inpanel/mod/server.py +1319 -0
  52. inpanel/mod/service.py +262 -0
  53. inpanel/mod/setting.py +228 -0
  54. inpanel/mod/shell.py +78 -0
  55. inpanel/mod/ssh.py +280 -0
  56. inpanel/mod/system.py +220 -0
  57. inpanel/mod/task.py +1337 -0
  58. inpanel/mod/ufw.py +14 -0
  59. inpanel/mod/user.py +306 -0
  60. inpanel/mod/vsftpd.py +67 -0
  61. inpanel/mod/yum.py +243 -0
  62. inpanel/plugins/__init__.py +10 -0
  63. inpanel/plugins/__pycache__/__init__.cpython-313.pyc +0 -0
  64. inpanel/plugins/acme/static/index.html +10 -0
  65. inpanel/plugins/acme/static/index.js +13 -0
  66. inpanel/plugins/shadowsocks-libev/__pycache__/info.cpython-313.pyc +0 -0
  67. inpanel/plugins/shadowsocks-libev/info.py +73 -0
  68. inpanel/plugins/shadowsocks-libev/static/index.html +70 -0
  69. inpanel/plugins/shadowsocks-libev/static/index.js +18 -0
  70. inpanel/public/css/global.css +138 -0
  71. inpanel/public/favicon.ico +0 -0
  72. inpanel/public/images/alipay.jpg +0 -0
  73. inpanel/public/images/loading.gif +0 -0
  74. inpanel/public/images/weixin.jpg +0 -0
  75. inpanel/public/index.html +94 -0
  76. inpanel/public/js/controllers/controllers.js +566 -0
  77. inpanel/public/js/controllers/database.js +590 -0
  78. inpanel/public/js/controllers/ecs.js +624 -0
  79. inpanel/public/js/controllers/file.js +940 -0
  80. inpanel/public/js/controllers/plugins.js +105 -0
  81. inpanel/public/js/controllers/service.js +1460 -0
  82. inpanel/public/js/controllers/site.js +1241 -0
  83. inpanel/public/js/controllers/utils.js +2319 -0
  84. inpanel/public/js/core.js +221 -0
  85. inpanel/public/js/directives.js +784 -0
  86. inpanel/public/js/filters.js +395 -0
  87. inpanel/public/js/services.js +257 -0
  88. inpanel/public/lib/angular/1.0.2/angular-resource.min.js +10 -0
  89. inpanel/public/lib/angular/1.0.2/angular.min.js +158 -0
  90. inpanel/public/lib/bootstrap/css/bootstrap-theme.css +587 -0
  91. inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +1 -0
  92. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +6 -0
  93. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +1 -0
  94. inpanel/public/lib/bootstrap/css/bootstrap.css +6757 -0
  95. inpanel/public/lib/bootstrap/css/bootstrap.css.map +1 -0
  96. inpanel/public/lib/bootstrap/css/bootstrap.min.css +6 -0
  97. inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +1 -0
  98. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  99. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  100. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  101. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  102. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  103. inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  104. inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  105. inpanel/public/lib/bootstrap/js/bootstrap.js +2377 -0
  106. inpanel/public/lib/bootstrap/js/bootstrap.min.js +7 -0
  107. inpanel/public/lib/bootstrap/js/npm.js +13 -0
  108. inpanel/public/lib/codemirror/codemirror-compressed.js +1 -0
  109. inpanel/public/lib/codemirror/codemirror.css +173 -0
  110. inpanel/public/lib/jquery/jquery-1.12.4.min.js +5 -0
  111. inpanel/public/lib/md5/md5.js +379 -0
  112. inpanel/public/lib/md5/md5.min.js +1 -0
  113. inpanel/public/partials/database/index.html +172 -0
  114. inpanel/public/partials/database/mysql/dbedit.html +462 -0
  115. inpanel/public/partials/database/mysql/dbnew.html +348 -0
  116. inpanel/public/partials/database/mysql/useredit.html +310 -0
  117. inpanel/public/partials/database/mysql/usernew.html +97 -0
  118. inpanel/public/partials/directives/message.html +20 -0
  119. inpanel/public/partials/directives/navbar.html +25 -0
  120. inpanel/public/partials/directives/selector.html +57 -0
  121. inpanel/public/partials/directives/srvbase.html +72 -0
  122. inpanel/public/partials/directives/srvext.html +34 -0
  123. inpanel/public/partials/directives/srvfile.html +23 -0
  124. inpanel/public/partials/directives/srvinstall.html +34 -0
  125. inpanel/public/partials/directives/srvlog.html +23 -0
  126. inpanel/public/partials/directives/srvminiop.html +28 -0
  127. inpanel/public/partials/directives/srvuninstall.html +38 -0
  128. inpanel/public/partials/directives/srvupdate.html +30 -0
  129. inpanel/public/partials/ecs/account.html +156 -0
  130. inpanel/public/partials/ecs/ecs.html +198 -0
  131. inpanel/public/partials/ecs/index.html +40 -0
  132. inpanel/public/partials/ecs/setings.html +459 -0
  133. inpanel/public/partials/file/file.html +501 -0
  134. inpanel/public/partials/file/trash.html +95 -0
  135. inpanel/public/partials/ftp.html +36 -0
  136. inpanel/public/partials/log.html +83 -0
  137. inpanel/public/partials/login.html +79 -0
  138. inpanel/public/partials/logout.html +22 -0
  139. inpanel/public/partials/main.html +534 -0
  140. inpanel/public/partials/plugins/index.html +55 -0
  141. inpanel/public/partials/plugins/plugins.html +13 -0
  142. inpanel/public/partials/secure.html +13 -0
  143. inpanel/public/partials/service/apache.html +147 -0
  144. inpanel/public/partials/service/cron.html +71 -0
  145. inpanel/public/partials/service/index.html +293 -0
  146. inpanel/public/partials/service/iptables.html +40 -0
  147. inpanel/public/partials/service/lighttpd.html +63 -0
  148. inpanel/public/partials/service/mariadb.html +113 -0
  149. inpanel/public/partials/service/memcache.html +36 -0
  150. inpanel/public/partials/service/minio.html +44 -0
  151. inpanel/public/partials/service/mongodb.html +44 -0
  152. inpanel/public/partials/service/mysql.html +113 -0
  153. inpanel/public/partials/service/named.html +61 -0
  154. inpanel/public/partials/service/nginx.html +296 -0
  155. inpanel/public/partials/service/ntp.html +40 -0
  156. inpanel/public/partials/service/php.html +250 -0
  157. inpanel/public/partials/service/proftpd.html +59 -0
  158. inpanel/public/partials/service/pureftpd.html +59 -0
  159. inpanel/public/partials/service/redis.html +40 -0
  160. inpanel/public/partials/service/samba.html +58 -0
  161. inpanel/public/partials/service/sendmail.html +40 -0
  162. inpanel/public/partials/service/ssh.html +186 -0
  163. inpanel/public/partials/service/tomcat.html +65 -0
  164. inpanel/public/partials/service/vsftpd.html +195 -0
  165. inpanel/public/partials/setting.html +299 -0
  166. inpanel/public/partials/site/apache/site.html +277 -0
  167. inpanel/public/partials/site/index.html +344 -0
  168. inpanel/public/partials/site/nginx/site.html +558 -0
  169. inpanel/public/partials/sorry.html +19 -0
  170. inpanel/public/partials/storage/autofm.html +103 -0
  171. inpanel/public/partials/storage/backup.html +42 -0
  172. inpanel/public/partials/storage/index.html +360 -0
  173. inpanel/public/partials/storage/migrate.html +93 -0
  174. inpanel/public/partials/storage/movedata.html +98 -0
  175. inpanel/public/partials/storage/remote.html +77 -0
  176. inpanel/public/partials/utils/cron.html +486 -0
  177. inpanel/public/partials/utils/firewall.html +266 -0
  178. inpanel/public/partials/utils/index.html +193 -0
  179. inpanel/public/partials/utils/network.html +118 -0
  180. inpanel/public/partials/utils/process.html +239 -0
  181. inpanel/public/partials/utils/repository.html +373 -0
  182. inpanel/public/partials/utils/shell.html +28 -0
  183. inpanel/public/partials/utils/ssl.html +319 -0
  184. inpanel/public/partials/utils/time.html +109 -0
  185. inpanel/public/partials/utils/user.html +359 -0
  186. inpanel/public/robots.txt +2 -0
  187. inpanel/remote.py +109 -0
  188. inpanel/templates/file/preview.html +34 -0
  189. inpanel/templates/index.html +93 -0
  190. inpanel/utils.py +282 -0
  191. inpanel/web.py +1811 -0
  192. inpanel/yum.py +756 -0
  193. inpanel-1.2.1.dist-info/METADATA +399 -0
  194. inpanel-1.2.1.dist-info/RECORD +198 -0
  195. inpanel-1.2.1.dist-info/WHEEL +5 -0
  196. inpanel-1.2.1.dist-info/entry_points.txt +2 -0
  197. inpanel-1.2.1.dist-info/licenses/LICENSE +30 -0
  198. inpanel-1.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,195 @@
1
+ <div navbar ng-init="currentItem='service.vsftpd'"></div>
2
+ <div ng-show="Auth.processing||!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="!Auth.processing&&loaded" style="display:none" ng-init="checkInstalled()">
7
+ <div class="module-header">
8
+ <h3>vsftpd - 安全快速的 FTP 服务器软件</h3>
9
+ </div>
10
+
11
+ <div srvinstall ng-init="name='vsftpd';pkg='vsftpd';expected_repolist=['base','CentALT'];"></div>
12
+
13
+ <div class="tabbable" ng-show="installed">
14
+ <ul class="nav nav-tabs">
15
+ <li ng-class="'active' | iftrue:activeTabName=='base'"><a href="#base" ng-click="sec('base')" data-toggle="tab">基本信息</a></li>
16
+ <li ng-class="'active' | iftrue:activeTabName=='baseconfig'"><a href="#baseconfig" ng-click="sec('baseconfig')" data-toggle="tab">基本配置</a></li>
17
+ <li ng-class="'active' | iftrue:activeTabName=='configfile'"><a href="#configfile" ng-click="sec('configfile')" data-toggle="tab">配置文件</a></li>
18
+ <li ng-class="'active' | iftrue:activeTabName=='update'"><a href="#update" ng-click="sec('update')" data-toggle="tab">升级</a></li>
19
+ <li ng-class="'active' | iftrue:activeTabName=='uninstall'"><a href="#uninstall" ng-click="sec('uninstall')" data-toggle="tab">卸载</a></li>
20
+ </ul>
21
+ <div class="tab-content">
22
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='base'" id="base">
23
+ <div srvbase ng-init="name='vsftpd';pkg='vsftpd';service='vsftpd';"></div>
24
+ </div>
25
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='baseconfig'" id="baseconfig">
26
+ <form class="form-horizontal form-horizontal-small" ng-submit="savesettings()" onsubmit="return false">
27
+ <div class="form-group">
28
+ <label class="control-label" for="anonymous_enable">是否允许匿名登录</label>
29
+ <div style="margin-left: 160px">
30
+ <input class="form-control" ng-model="baseconfigs.anonymous_enable" ng-disabled="processing" type="text" id="anonymous_enable" placeholder="anonymous_enable">
31
+ </div>
32
+ </div>
33
+ <div class="form-group">
34
+ <label class="control-label" for="local_enable">local_enable</label>
35
+ <div style="margin-left: 160px">
36
+ <input class="form-control" ng-model="baseconfigs.local_enable" ng-disabled="processing" type="text" id="local_enable" placeholder="local_enable">
37
+ </div>
38
+ </div>
39
+ <div class="form-group">
40
+ <label class="control-label" for="local_umask">local_umask</label>
41
+ <div style="margin-left: 160px">
42
+ <input class="form-control" ng-model="baseconfigs.local_umask" ng-disabled="processing" type="text" id="local_umask" placeholder="local_umask">
43
+ </div>
44
+ </div>
45
+ <div class="form-group">
46
+ <label class="control-label" for="anon_upload_enable">匿名用户可上传文件</label>
47
+ <div style="margin-left: 160px">
48
+ <input class="form-control" ng-model="baseconfigs.anon_upload_enable" ng-disabled="processing" type="text" id="anon_upload_enable" placeholder="是否允许匿名用户登录,YES允许,NO不允许,默认值为YES。 ">
49
+ </div>
50
+ </div>
51
+ <div class="form-group">
52
+ <label class="control-label" for="anon_mkdir_write_enable">匿名用户可创建文件夹</label>
53
+ <div style="margin-left: 160px">
54
+ <input class="form-control" ng-model="baseconfigs.anon_mkdir_write_enable" ng-disabled="processing" type="text" id="anon_mkdir_write_enable" placeholder="anon_mkdir_write_enable">
55
+ </div>
56
+ </div>
57
+ <div class="form-group">
58
+ <label class="control-label" for="dirmessage_enable">dirmessage_enable</label>
59
+ <div style="margin-left: 160px">
60
+ <input class="form-control" ng-model="baseconfigs.dirmessage_enable" ng-disabled="processing" type="text" id="dirmessage_enable" placeholder="dirmessage_enable">
61
+ </div>
62
+ </div>
63
+ <div class="form-group">
64
+ <label class="control-label" for="xferlog_enable">xferlog_enable</label>
65
+ <div style="margin-left: 160px">
66
+ <input class="form-control" ng-model="baseconfigs.xferlog_enable" ng-disabled="processing" type="text" id="xferlog_enable" placeholder="xferlog_enable">
67
+ </div>
68
+ </div>
69
+ <div class="form-group">
70
+ <label class="control-label" for="connect_from_port_20">主动模式需要连接项</label>
71
+ <div style="margin-left: 160px">
72
+ <input class="form-control" ng-model="baseconfigs.connect_from_port_20" ng-disabled="processing" type="text" id="connect_from_port_20" placeholder="connect_from_port_20">
73
+ </div>
74
+ </div>
75
+ <div class="form-group">
76
+ <label class="control-label" for="chown_upload">chown_upload</label>
77
+ <div style="margin-left: 160px">
78
+ <input class="form-control" ng-model="baseconfigs.chown_upload" ng-disabled="processing" type="text" id="chown_upload" placeholder="chown_upload">
79
+ </div>
80
+ </div>
81
+ <div class="form-group">
82
+ <label class="control-label" for="chown_username">chown_username</label>
83
+ <div style="margin-left: 160px">
84
+ <input class="form-control" ng-model="baseconfigs.chown_username" ng-disabled="processing" type="text" id="chown_username" placeholder="chown_username">
85
+ </div>
86
+ </div>
87
+ <div class="form-group">
88
+ <label class="control-label" for="xferlog_file">xferlog_file</label>
89
+ <div style="margin-left: 160px">
90
+ <input class="form-control" ng-model="baseconfigs.xferlog_file" ng-disabled="processing" type="text" id="xferlog_file" placeholder="xferlog_file">
91
+ </div>
92
+ </div>
93
+ <div class="form-group">
94
+ <label class="control-label" for="xferlog_std_format">xferlog_std_format</label>
95
+ <div style="margin-left: 160px">
96
+ <input class="form-control" ng-model="baseconfigs.xferlog_std_format" ng-disabled="processing" type="text" id="xferlog_std_format" placeholder="xferlog_std_format">
97
+ </div>
98
+ </div>
99
+ <div class="form-group">
100
+ <label class="control-label" for="idle_session_timeout">idle_session_timeout</label>
101
+ <div style="margin-left: 160px">
102
+ <input class="form-control" ng-model="baseconfigs.idle_session_timeout" ng-disabled="processing" type="text" id="idle_session_timeout" placeholder="idle_session_timeout">
103
+ </div>
104
+ </div>
105
+ <div class="form-group">
106
+ <label class="control-label" for="data_connection_timeout">data_connection_timeout</label>
107
+ <div style="margin-left: 160px">
108
+ <input class="form-control" ng-model="baseconfigs.data_connection_timeout" ng-disabled="processing" type="text" id="data_connection_timeout" placeholder="data_connection_timeout">
109
+ </div>
110
+ </div>
111
+ <div class="form-group">
112
+ <label class="control-label" for="nopriv_user">nopriv_user</label>
113
+ <div style="margin-left: 160px">
114
+ <input class="form-control" ng-model="baseconfigs.nopriv_user" ng-disabled="processing" type="text" id="nopriv_user" placeholder="nopriv_user">
115
+ </div>
116
+ </div>
117
+ <div class="form-group">
118
+ <label class="control-label" for="async_abor_enable">async_abor_enable</label>
119
+ <div style="margin-left: 160px">
120
+ <input class="form-control" ng-model="baseconfigs.async_abor_enable" ng-disabled="processing" type="text" id="async_abor_enable" placeholder="async_abor_enable">
121
+ </div>
122
+ </div>
123
+ <div class="form-group">
124
+ <label class="control-label" for="ascii_upload_enable">ascii_upload_enable</label>
125
+ <div style="margin-left: 160px">
126
+ <input class="form-control" ng-model="baseconfigs.ascii_upload_enable" ng-disabled="processing" type="text" id="ascii_upload_enable" placeholder="ascii_upload_enable">
127
+ </div>
128
+ </div>
129
+ <div class="form-group">
130
+ <label class="control-label" for="ascii_download_enable">ascii_download_enable</label>
131
+ <div style="margin-left: 160px">
132
+ <input class="form-control" ng-model="baseconfigs.ascii_download_enable" ng-disabled="processing" type="text" id="ascii_download_enable" placeholder="ascii_download_enable">
133
+ </div>
134
+ </div>
135
+ <div class="form-group">
136
+ <label class="control-label" for="ftpd_banner">ftpd_banner</label>
137
+ <div style="margin-left: 160px">
138
+ <input class="form-control" ng-model="baseconfigs.ftpd_banner" ng-disabled="processing" type="text" id="ftpd_banner" placeholder="ftpd_banner">
139
+ </div>
140
+ </div>
141
+ <div class="form-group">
142
+ <label class="control-label" for="deny_email_enable">deny_email_enable</label>
143
+ <div style="margin-left: 160px">
144
+ <input class="form-control" ng-model="baseconfigs.deny_email_enable" ng-disabled="processing" type="text" id="deny_email_enable" placeholder="deny_email_enable">
145
+ </div>
146
+ </div>
147
+ <div class="form-group">
148
+ <label class="control-label" for="banned_email_file">banned_email_file</label>
149
+ <div style="margin-left: 160px">
150
+ <input class="form-control" ng-model="baseconfigs.banned_email_file" ng-disabled="processing" type="text" id="banned_email_file" placeholder="banned_email_file">
151
+ </div>
152
+ </div>
153
+ <div class="form-group">
154
+ <label class="control-label" for="chroot_list_enable">是否可切换到上级目录</label>
155
+ <div style="margin-left: 160px">
156
+ <input class="form-control" ng-model="baseconfigs.chroot_list_enable" ng-disabled="processing" type="text" id="chroot_list_enable" placeholder="chroot_list_enable">
157
+ </div>
158
+ </div>
159
+ <div class="form-group">
160
+ <label class="control-label" for="chroot_list_file">可登录用户</label>
161
+ <div style="margin-left: 160px">
162
+ <input class="form-control" ng-model="baseconfigs.chroot_list_file" ng-disabled="processing" type="text" id="chroot_list_file" placeholder="chroot_list_file">
163
+ </div>
164
+ </div>
165
+ <div class="form-group">
166
+ <label class="control-label" for="max_clients">max_clients</label>
167
+ <div style="margin-left: 160px">
168
+ <input class="form-control" ng-model="baseconfigs.max_clients" ng-disabled="processing" type="text" id="max_clients" placeholder="max_clients">
169
+ </div>
170
+ </div>
171
+ <div class="form-group">
172
+ <label class="control-label" for="message_file">message_file</label>
173
+ <div style="margin-left: 160px">
174
+ <input class="form-control" ng-model="baseconfigs.message_file" ng-disabled="processing" type="text" id="message_file" placeholder="message_file">
175
+ </div>
176
+ </div>
177
+ <div class="form-group">
178
+ <div style="margin-left: 160px">
179
+ <button type="submit" class="btn btn-default" ng-disabled="processing">提交修改</button>
180
+ </div>
181
+ </div>
182
+ </form>
183
+ </div>
184
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='configfile'" id="configfile">
185
+ <div srvfile ng-init="items=[{name:'主目录', path:'/etc/vsftpd', isdir:true}];"></div>
186
+ </div>
187
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='update'" id="update">
188
+ <div srvupdate ng-init="name='vsftpd';pkg='vsftpd';"></div>
189
+ </div>
190
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='uninstall'" id="uninstall">
191
+ <div srvuninstall ng-init="name='vsftpd';pkg='vsftpd';"></div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </div>
@@ -0,0 +1,299 @@
1
+ <div ng-include src="'/api/xsrf'"></div>
2
+
3
+ <div navbar ng-init="currentItem='setting'"></div>
4
+ <div ng-show="!loaded">
5
+ <div loading></div>
6
+ </div>
7
+
8
+ <div id="main" ng-show="loaded" style="display:none">
9
+ <div class="module-header">
10
+ <h3>设置</h3>
11
+ </div>
12
+
13
+ <div class="tabbable" ng-init="load()">
14
+ <ul class="nav nav-tabs">
15
+ <li ng-class="'active' | iftrue:activeTabName=='authinfo'"><a href="#authinfo" ng-click="sec('authinfo')" data-toggle="tab">账号设置</a></li>
16
+ <li ng-class="'active' | iftrue:activeTabName=='serverinfo'"><a href="#serverinfo" ng-click="sec('serverinfo')" data-toggle="tab">服务设置</a></li>
17
+ <!-- <li ng-class="'active' | iftrue:activeTabName=='runtime'"><a href="#runtime" ng-click="sec('runtime')" data-toggle="tab">运行设置</a></li> -->
18
+ <li ng-class="'active' | iftrue:activeTabName=='accesskey'"><a href="#accesskey" ng-click="sec('accesskey')" data-toggle="tab">远程控制</a></li>
19
+ <li ng-class="'active' | iftrue:activeTabName=='restart'"><a href="#restart" ng-click="sec('restart')" data-toggle="tab">重启服务</a></li>
20
+ <li ng-class="'active' | iftrue:activeTabName=='upversion'"><a href="#upversion" ng-click="sec('upversion')" data-toggle="tab">版本升级</a></li>
21
+ <li ng-class="'active' | iftrue:activeTabName=='about'"><a href="#about" ng-click="sec('about')" data-toggle="tab">关于应用</a></li>
22
+ <li ng-class="'active' | iftrue:activeTabName=='license'"><a href="#license" ng-click="sec('license')" data-toggle="tab">开源协议</a></li>
23
+ <li ng-class="'active' | iftrue:activeTabName=='donation'"><a href="#donation" ng-click="sec('donation')" data-toggle="tab">捐助项目</a></li>
24
+ </ul>
25
+ <div class="tab-content">
26
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='authinfo'" id="authinfo" ng-init="loadAuthInfo()">
27
+ <form class="form-horizontal form-horizontal-small" ng-submit="updateAuthInfo()" onsubmit="return false">
28
+ <div class="form-group form-inline">
29
+ <label for="username" class="col-sm-2 control-label">用户名</label>
30
+ <div class="col-sm-10">
31
+ <input class="form-control" ng-model="username" ng-disabled="processing" type="text" id="username" placeholder="管理员用户名">
32
+ </div>
33
+ </div>
34
+ <div class="form-group form-inline">
35
+ <label class="col-sm-2 control-label" for="password">新密码</label>
36
+ <div class="col-sm-10">
37
+ <input class="form-control" ng-model="password" ng-disabled="processing" type="password" id="password" placeholder="留空表示不修改密码" autocomplete="off">
38
+ </div>
39
+ </div>
40
+ <div class="form-group form-inline">
41
+ <label class="col-sm-2 control-label" for="passwordc">确认新密码</label>
42
+ <div class="col-sm-10">
43
+ <input class="form-control" ng-model="passwordc" ng-disabled="processing" type="password" id="passwordc" placeholder="留空表示不修改密码" autocomplete="off">
44
+ </div>
45
+ </div>
46
+ <div class="form-group form-inline">
47
+ <label class="col-sm-2 control-label">密码检测</label>
48
+ <div class="col-sm-10 checkbox">
49
+ <label><input ng-model="passwordcheck" ng-disabled="processing" type="checkbox"> 开启密码安全级别检测</label>
50
+ </div>
51
+ </div>
52
+ <div class="form-group form-inline">
53
+ <label class="col-sm-2 control-label"></label>
54
+ <div class="col-sm-10">
55
+ <button type="submit" class="btn btn-default" ng-disabled="processing">保存设置</button>
56
+ </div>
57
+ </div>
58
+ </form>
59
+ </div>
60
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='serverinfo'" id="serverinfo" ng-init="loadServerInfo()">
61
+ <form class="form-horizontal form-horizontal-small" ng-submit="updateServerInfo()" onsubmit="return false">
62
+ <div class="form-group form-inline">
63
+ <label class="col-sm-2 control-label" for="bind_ip">绑定IP</label>
64
+ <div class="col-sm-10">
65
+ <input class="form-control" ng-model="ip" ng-disabled="processing" type="text" id="bind_ip" placeholder="服务绑定的IP">
66
+ </div>
67
+ </div>
68
+ <div class="form-group form-inline">
69
+ <label class="col-sm-2 control-label" for="bind_port">绑定端口</label>
70
+ <div class="col-sm-10">
71
+ <input class="form-control" ng-model="port" ng-disabled="processing" type="text" id="bind_port" placeholder="服务绑定的端口">
72
+ </div>
73
+ </div>
74
+ <div class="form-group">
75
+ <label class="col-sm-2 control-label" for="ssl_key">SSL 私钥</label>
76
+ <div class="col-sm-10">
77
+ <div class="input-group">
78
+ <div class="input-group-btn">
79
+ <button type="button" class="btn btn-default" ng-click="selectsslkey()" title="选择私钥文件"><i class="glyphicon glyphicon-folder-open"></i></button>
80
+ </div>
81
+ <input class="form-control" ng-model="sslkey" ng-disabled="processing" type="text" id="ssl_key" placeholder="SSL 私钥文件路径(*.key)">
82
+ </div>
83
+ </div>
84
+ </div>
85
+ <div class="form-group">
86
+ <label class="col-sm-2 control-label" for="ssl_crt">SSL 证书</label>
87
+ <div class="col-sm-10">
88
+ <div class="input-group">
89
+ <div class="input-group-btn">
90
+ <button type="button" class="btn btn-default" ng-click="selectsslcrt()" title="选择证书文件"><i class="glyphicon glyphicon-folder-open"></i></button>
91
+ </div>
92
+ <input class="form-control" ng-model="sslcrt" ng-disabled="processing" type="text" id="ssl_crt" placeholder="SSL 证书文件路径(*.crt)">
93
+ </div>
94
+ </div>
95
+ </div>
96
+ <div class="form-group form-inline">
97
+ <label class="col-sm-2 control-label">强制HTTPS</label>
98
+ <div class="col-sm-10 checkbox">
99
+ <label><input ng-model="forcehttps" ng-disabled="processing" type="checkbox"> 强制使用 HTTPS 访问面板</label>
100
+ </div>
101
+ </div>
102
+ <div class="form-group form-inline">
103
+ <label class="col-sm-2 control-label"></label>
104
+ <div class="col-sm-10">
105
+ <button type="submit" class="btn btn-default" ng-disabled="processing">保存设置</button>
106
+ </div>
107
+ </div>
108
+ </form>
109
+ </div>
110
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='runtime'" id="runtime" ng-init="loadRuntimeInfo()">
111
+ <div class="alert alert-info alert-dismissible">
112
+ <p>注意事项:</p>
113
+ <p>1. 修改运行模式前,请再三确认操作是否有必要 !</p>
114
+ <p>2. 在【演示模式】下,不允许再次进行修改 !</p>
115
+ <hr />
116
+ <p>在【演示模式】下,如需调整到【正式模式】,请在服务器上执行以下命令:</p>
117
+ <p>inpanel config mode prod</p>
118
+ </div>
119
+ <form class="form-horizontal form-horizontal-small" ng-submit="updateRuntimeInfo()" onsubmit="return false">
120
+ <div class="form-group form-inline">
121
+ <label class="col-sm-2 control-label" for="runtime_mode">运行模式</label>
122
+ <div class="col-sm-10">
123
+ <select class="form-control" ng-model="runtime_mode" ng-disabled="processing">
124
+ <option value="prod">生产模式</option>
125
+ <option value="dev">开发模式</option>
126
+ <option value="demo">演示模式</option>
127
+ </select>
128
+ </div>
129
+ </div>
130
+ <div class="form-group form-inline">
131
+ <label class="col-sm-2 control-label"></label>
132
+ <div class="col-sm-10">
133
+ <button type="submit" class="btn btn-default" ng-disabled="processing">保存设置</button>
134
+ </div>
135
+ </div>
136
+ </form>
137
+ </div>
138
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='accesskey'" id="accesskey" ng-init="loadAccessKey()">
139
+ <div class="form-horizontal form-horizontal-small">
140
+ <div class="form-group form-inline">
141
+ <label class="col-sm-2 control-label">远程控制</label>
142
+ <div class="col-sm-10 checkbox">
143
+ <label><input ng-model="accesskeyenable" ng-disabled="processing" type="checkbox">允许使用授权码进行远程控制</label>
144
+ </div>
145
+ </div>
146
+ <div class="form-group form-inline">
147
+ <label class="col-sm-2 control-label" for="accesskey">授权码</label>
148
+ <div class="col-sm-10">
149
+ <textarea class="form-control" ng-model="accesskey" ng-disabled="processing" id="accesskey" placeholder="远程控制使用的授权码" style="width:300px; height:80px"></textarea>
150
+ </div>
151
+ </div>
152
+ <div class="form-group form-inline">
153
+ <label class="col-sm-2 control-label"></label>
154
+ <div class="col-sm-10">
155
+ <button ng-click="updateAccessKey()" class="btn btn-default" ng-disabled="processing">保存设置</button>
156
+ <button ng-click="genaccesskey()" class="btn btn-default" ng-disabled="processing">随机生成</button>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='restart'" id="restart" ng-init="restartService()">
162
+ <div class="panel panel-danger">
163
+ <div class="panel-heading">
164
+ <div class="panel-title">
165
+ <i class="glyphicon glyphicon-refresh"></i>
166
+ <span> 重启服务</span>
167
+ </div>
168
+ </div>
169
+ <div class="panel-body">
170
+ <p ng-bind-html-unsafe="restartMessage"></p>
171
+ <button class="btn btn-default" ng-show="showRestartBtn" ng-click="restart()" ng-disabled="processing">确定并重启服务</button>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='upversion'" id="upversion">
176
+ <table class="table table-hover table-bordered">
177
+ <thead>
178
+ <tr>
179
+ <th colspan="2">当前版本信息</th>
180
+ </tr>
181
+ </thead>
182
+ <tbody>
183
+ <tr>
184
+ <td style="width: 200px;">版本信息:</td>
185
+ <td>v{{version.version}}</td>
186
+ </tr>
187
+ <tr>
188
+ <td>发布时间:</td>
189
+ <td>{{version.releasetime}}</td>
190
+ </tr>
191
+ <tr>
192
+ <td>变更记录:</td>
193
+ <td><a href="{{version.changelog}}" target="_blank">查看版本变更记录</a></td>
194
+ </tr>
195
+ </tbody>
196
+ </table>
197
+ <div ng-bind-html-unsafe="upverMessage"></div>
198
+ <p style="display:none" ng-show="showUpdateBtn">
199
+ <button class="btn btn-default" ng-click="update()" ng-disabled="processing">{{updateBtnText}}</button>
200
+ </p>
201
+ </div>
202
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='about'" id="about">
203
+ <div class="panel panel-default">
204
+ <div class="panel-heading">
205
+ <div class="panel-title">
206
+ <i class="glyphicon glyphicon-info-sign"></i>
207
+ <span> 关于 InPanel</span>
208
+ </div>
209
+ </div>
210
+ <div class="panel-body">
211
+ <p>InPanel v{{version.version}}</p>
212
+ <p>InPanel 是一款开源的 Linux 服务器管理面板,后端服务基于 Python 语言开发,前端页面基于框架 Angular JS v1.0.2</p>
213
+ <p>源码托管在 <a href="https://github.com/inpanel/inpanel" target="_blank">GitHub</a>、<a href="https://gitee.com/inpanel/inpanel" target="_blank">Gitee</a></p>
214
+ <p>国际网站:<a href="https://inpanel.org" target="_blank">https://inpanel.org</a>(提供多语言版本,针对国际用户)</p>
215
+ <p>国内网站:<a href="https://inpanel.cn" target="_blank">https://inpanel.cn</a>(只提供中文版,针对国内用户)</p>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='license'" id="license">
220
+ <div class="panel panel-info">
221
+ <div class="panel-heading">
222
+ <div class="panel-title">
223
+ <i class="glyphicon glyphicon-copyright-mark"></i>
224
+ <span> 使用 InPanel 需遵循 BSD 开源协议</span>
225
+ </div>
226
+ </div>
227
+ <div class="panel-body">
228
+ <p>您可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当您发布使用了 BSD 协议的代码,或者以 BSD 协议代码为基础,进行二次开发自己的产品时,需要遵循以下三个原则:</p>
229
+ <p>1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。</p>
230
+ <p>2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的 BSD 协议。</p>
231
+ <p>3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。</p>
232
+ <p>详细的条款许可请查阅 <a href="https://github.com/inpanel/inpanel/blob/main/LICENSE" target="_blank">这里</a></p>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='donation'" id="donation">
237
+ <div class="panel panel-success">
238
+ <div class="panel-heading">
239
+ <div class="panel-title">
240
+ <i class="glyphicon glyphicon-heart-empty"></i>
241
+ <span> 捐助项目</span>
242
+ </div>
243
+ </div>
244
+ <div class="panel-body">
245
+ <p>如果本项目对您有帮助,您可以请作者喝奶茶。</p>
246
+ <p>收到您的捐助后,我们将会在网站上进行展示,<a href="https://inpanel.cn" target="_blank">点击这里查看</a>(<a href="https://crogram.org/donation.html" target="_blank">对公转账请点击这里查看</a>)。</p>
247
+ <p>转账时请备注:您的称呼,感谢您的捐助,祝您生活愉快 !</p>
248
+ </div>
249
+ </div>
250
+ <div class="row">
251
+ <div class="col-md-6 col-sm-6">
252
+ <div class="panel panel-info">
253
+ <div class="panel-heading">
254
+ <div class="panel-title">
255
+ <i class="glyphicon glyphicon-qrcode"></i>
256
+ <span> 通过【支付宝】转账</span>
257
+ </div>
258
+ </div>
259
+ <div class="panel-body">
260
+ <img src="images/alipay.jpg" class="img-responsive img-rounded">
261
+ </div>
262
+ </div>
263
+ </div>
264
+ <div class="col-md-6 col-sm-6">
265
+ <div class="panel panel-info">
266
+ <div class="panel-heading">
267
+ <div class="panel-title">
268
+ <i class="glyphicon glyphicon-qrcode"></i>
269
+ <span> 通过【微信支付】转账</span>
270
+ </div>
271
+ </div>
272
+ <div class="panel-body">
273
+ <img src="images/weixin.jpg" class="img-responsive img-rounded">
274
+ </div>
275
+ </div>
276
+ </div>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ </div>
281
+
282
+ </div>
283
+
284
+ <div id="selector" class="modal fade">
285
+ <div class="modal-dialog" role="document">
286
+ <div class="modal-content">
287
+ <div class="modal-header">
288
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
289
+ <h3 class="modal-title">{{selector_title}}</h3>
290
+ </div>
291
+ <div class="modal-body">
292
+ <div selector></div>
293
+ </div>
294
+ <div class="modal-footer">
295
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
296
+ </div>
297
+ </div>
298
+ </div>
299
+ </div>