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,28 @@
1
+ <div navbar ng-init="currentItem='utils.shell'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>SHELL</h3>
9
+ </div>
10
+
11
+ <div class="tabbable" ng-init="load()">
12
+ <ul class="nav nav-tabs">
13
+ <li ng-class="'active' | iftrue:activeTabName=='base'"><a href="#base" ng-click="tab_sec('base')" data-toggle="tab">基础版</a></li>
14
+ <li ng-class="'active' | iftrue:activeTabName=='advance'"><a href="#advance" ng-click="tab_sec('advance')" data-toggle="tab">高级版</a></li>
15
+ </ul>
16
+ <div class="tab-content">
17
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='base'" id="base">
18
+ <form class="shell-form" onsubmit="return false;" ng-submit="send_base_cmd()">
19
+ <span ng-repeat="line in base_cmds">{{line}}</span>
20
+ <input class="shell-input" type="text" ng-model="base_input" id="base_input" placeholder="$" autofocus autocomplete="off">
21
+ </form>
22
+ </div>
23
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='advance'" id="advance">
24
+ <p>开发中</p>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
@@ -0,0 +1,319 @@
1
+ <div navbar ng-init="currentItem='utils.ssl'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>SSL/TLS 管理(正在开发测试中)</h3>
9
+ </div>
10
+
11
+ <div ng-show="!installed" value="install" style="display:none">
12
+ <div class="well">
13
+ <p>系统检测到您还未安装 Let’s Encrypt 证书管理工具。</p>
14
+ <p>请先安装 Let’s Encrypt 证书管理工具后继续操作。</p>
15
+ <p style="padding-top: 10px;"><a class="btn btn-default" href="#/application?s=lets-encrypt">立即安装</a></p>
16
+ </div>
17
+ </div>
18
+ <div class="tabbable" ng-init="load()" ng-show="installed">
19
+ <div class="alert alert-info alert-dismissible" ng-show="showAlertInfo && activeTabName=='keys'">
20
+ <button ng-click="showAlertInfo=false" type="button" class="close"><span aria-hidden="true">&times;</span></button>
21
+ <p>私钥用于解密通过 SSL 传输的信息。 在创建 SSL 证书时,第一步是生成与该 SSL 证书关联的私钥文件。 应为您创建的每一个 SSL 证书生成一个私钥。 此私钥非常重要,应严格保密。 应将每一个私钥的副本放在安全的地方;私钥一旦丢失将无法找回。</p>
22
+ </div>
23
+ <div class="alert alert-info alert-dismissible" ng-show="showAlertInfo && activeTabName=='crts'">
24
+ <button ng-click="showAlertInfo=false" type="button" class="close"><span aria-hidden="true">&times;</span></button>
25
+ <p>您可以使用自签名证书,或者使用 SSL 证书颁发机构颁发的受信任证书。 如果想要为您的站点之一使用自签名证书,请在下面生成证书。 如果想要使用受信任的证书,则需要首先从受信任的提供商处获得 SSL 证书,然后上传或在下面提供该证书。</p>
26
+ </div>
27
+ <div class="alert alert-info alert-dismissible" ng-show="showAlertInfo && activeTabName=='csrs'">
28
+ <button ng-click="showAlertInfo=false" type="button" class="close"><span aria-hidden="true">&times;</span></button>
29
+ <p>如果是从受信任的 SSL 提供商处获取证书,必须填写证书签名请求表单以提供生成您的 SSL 证书所需的信息。</p>
30
+ </div>
31
+ <div class="alert alert-info alert-dismissible" ng-show="showAlertInfo && activeTabName=='host'">
32
+ <button ng-click="showAlertInfo=false" type="button" class="close"><span aria-hidden="true">&times;</span></button>
33
+ <p>通过此界面可配置站点的 SSL。</p>
34
+ <p>SSL 证书可为一个或多个域提供安全保护;要为某个域创建 SSL 主机,您必须拥有一个保护该域安全的证书。 每个 SSL 证书都对应有一个匹配的私钥文件,它是安装证书时必不可少的文件。 用于生产目的的 SSL 证书通常需要一个 CA 包,该页面会自动从服务器请求获得 CA 包,如果服务器找不到所需的 CA 包,您需要将其粘贴于此。</p>
35
+ </div>
36
+ <ul class="nav nav-tabs">
37
+ <li ng-class="'active' | iftrue:activeTabName=='keys'"><a href="#keys" ng-click="tab_sec('keys')" data-toggle="tab">私钥</a></li>
38
+ <li ng-class="'active' | iftrue:activeTabName=='csrs'"><a href="#csrs" ng-click="tab_sec('csrs')" data-toggle="tab">签名请求</a></li>
39
+ <li ng-class="'active' | iftrue:activeTabName=='crts'"><a href="#crts" ng-click="tab_sec('crts')" data-toggle="tab">证书</a></li>
40
+ <li ng-class="'active' | iftrue:activeTabName=='host'"><a href="#host" ng-click="tab_sec('host')" data-toggle="tab">SSL站点</a></li>
41
+ </ul>
42
+ <div class="tab-content">
43
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='keys'" id="keys">
44
+ <div ng-show="loading_keys"><div waiting></div></div>
45
+ <div ng-show="!loading_keys" style="display:none">
46
+ <div class="pull-left"><h5>私钥列表(*.key)</h5></div>
47
+ <div class="pull-right">
48
+ <button class="btn btn-default btn-sm" ng-click="add_domain_keys()" title="批量生成私钥">批量生成(正在开发)</button>
49
+ <button class="btn btn-default btn-sm" ng-click="rename(item.name)" title="生成私钥">生成私钥</button>
50
+ <button class="btn btn-default btn-sm" ng-click="rename(item.name)" title="上传私钥">上传私钥</button>
51
+ </div>
52
+ <table class="table table-hover table-bordered table-condensed">
53
+ <thead>
54
+ <tr>
55
+ <th style="width: 30px;" class="text-right">#</th>
56
+ <th>文件名</th>
57
+ <th style="width: 240px;">ID</th>
58
+ <th style="width: 60px;">大小</th>
59
+ <th style="width: 70px;">操作</th>
60
+ </tr>
61
+ </thead>
62
+ <tbody>
63
+ <tr ng-show="list_keys.length==0">
64
+ <td colspan="5">服务器上暂无私钥。</td>
65
+ </tr>
66
+ <tr ng-repeat="item_key in list_keys">
67
+ <td class="text-right">{{$index+1}}</td>
68
+ <td>{{item_key.name}}</td>
69
+ <td>{{item_key.id}}</td>
70
+ <td>{{item_key.size}}</td>
71
+ <td>
72
+ <div class="btn-group">
73
+ <button class="btn btn-default btn-xs" title="查看该私钥" ng-click="keys_check(item_key)"><i class="glyphicon glyphicon-info-sign"></i></button>
74
+ <button class="btn btn-default btn-xs" title="删除该私钥" ng-click="keys_delete(item_key)"><i class="glyphicon glyphicon-remove"></i></button>
75
+ </div>
76
+ </td>
77
+ </tr>
78
+ </tbody>
79
+ </table>
80
+ </div>
81
+ </div>
82
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='csrs'" id="csrs">
83
+ <div ng-show="!loading_csrs">
84
+ <div class="well" ng-show="host_packages.length==0">未找到网站程序。</div>
85
+ </div>
86
+ <div ng-show="loading_csrs"><div waiting></div></div>
87
+ <div ng-show="!loading_csrs">
88
+ <div class="pull-left"><h5>签名请求列表(*.csr)</h5></div>
89
+ <div class="pull-right">
90
+ <button class="btn btn-default btn-sm" ng-click="csr_generate()" title="生成证书签名请求">生成证书签名请求</button>
91
+ </div>
92
+ <table class="table table-hover table-bordered table-condensed">
93
+ <thead>
94
+ <tr>
95
+ <th style="width: 20px;" class="text-right">#</th>
96
+ <th>文件名</th>
97
+ <th style="width: 140px;">创建时间(UTC)</th>
98
+ <th style="width: 70px;">大小</th>
99
+ <th style="width: 110px;">说明</th>
100
+ <th style="width: 110px;">操作</th>
101
+ </tr>
102
+ </thead>
103
+ <tbody>
104
+ <tr ng-show="list_csrs.length==0">
105
+ <td colspan="6">服务器上暂无签名请求文件。</td>
106
+ </tr>
107
+ <tr ng-repeat="item in list_csrs">
108
+ <td class="text-right">{{$index+1}}</td>
109
+ <td>{{item.name}}</td>
110
+ <td>{{item.created}}</td>
111
+ <td>{{item.size}}</td>
112
+ <td>{{item.description}}</td>
113
+ <td>
114
+ <div class="btn-group">
115
+ <button class="btn btn-default btn-xs" title="查看该证书" ng-click="csrs_check(item)"><i class="glyphicon glyphicon-info-sign"></i></button>
116
+ <button class="btn btn-default btn-xs" title="删除该证书" ng-click="csrs_delete(item)"><i class="glyphicon glyphicon-trash"></i></button>
117
+ </div>
118
+ </td>
119
+ </tr>
120
+ </tbody>
121
+ </table>
122
+ </div>
123
+ </div>
124
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='crts'" id="crts">
125
+ <div ng-show="loading_crts"><div waiting></div></div>
126
+ <div ng-show="!loading_crts">
127
+ <div class="pull-left"><h5>证书列表(*.crt)</h5></div>
128
+ <div class="pull-right">
129
+ <button class="btn btn-default btn-sm" ng-click="crt_upload()" title="上传证书">上传证书</button>
130
+ <button class="btn btn-default btn-sm" ng-click="crt_generate()" title="生成自签名证书">生成自签名证书</button>
131
+ </div>
132
+ <table class="table table-hover table-bordered table-condensed">
133
+ <thead>
134
+ <tr>
135
+ <th style="width: 20px;" class="text-right">#</th>
136
+ <th>文件名</th>
137
+ <th>域</th>
138
+ <th style="width: 100px;">颁发者</th>
139
+ <th style="width: 140px;">有效期(UTC)</th>
140
+ <th style="width: 70px;">大小</th>
141
+ <th style="width: 110px;">说明</th>
142
+ <th style="width: 110px;">操作</th>
143
+ </tr>
144
+ </thead>
145
+ <tbody>
146
+ <tr ng-show="list_crts.length==0">
147
+ <td colspan="6">服务器上暂无证书。</td>
148
+ </tr>
149
+ <tr ng-repeat="item in list_crts">
150
+ <td class="text-right">{{$index+1}}</td>
151
+ <td>{{item.name}}</td>
152
+ <td>{{item.ans}}</td>
153
+ <td>{{item.issuer}}</td>
154
+ <td>{{item.expiration}}</td>
155
+ <td>{{item.size}}</td>
156
+ <td>{{item.description}}</td>
157
+ <td>
158
+ <div class="btn-group">
159
+ <button class="btn btn-default btn-xs" title="查看该证书" ng-click="crts_check(item)"><i class="glyphicon glyphicon-info-sign"></i></button>
160
+ <button class="btn btn-default btn-xs" title="续期该证书" ng-click="crts_renew(item)"><i class="glyphicon glyphicon-refresh"></i></button>
161
+ <button class="btn btn-default btn-xs" title="吊销该证书" ng-click="crts_revoke(item)"><i class="glyphicon glyphicon-remove"></i></button>
162
+ <button class="btn btn-default btn-xs" title="移除该证书" ng-click="crts_delete(item)"><i class="glyphicon glyphicon-trash"></i></button>
163
+ </div>
164
+ </td>
165
+ </tr>
166
+ </tbody>
167
+ </table>
168
+ </div>
169
+ </div>
170
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='host'" id="host">
171
+ <div ng-show="loading_host"><div waiting></div></div>
172
+ <div ng-show="!loading_host">
173
+ <div class="pull-left"><h5>管理 SSL 主机</h5></div>
174
+ <table class="table table-hover table-bordered table-condensed">
175
+ <thead>
176
+ <tr>
177
+ <th style="width: 20px;" class="text-right">#</th>
178
+ <th>域名</th>
179
+ <th style="width: 50px;">颁发时间</th>
180
+ <th style="width: 140px;">过期时间</th>
181
+ <th style="width: 210px;">站点目录</th>
182
+ <th style="width: 110px;">操作</th>
183
+ </tr>
184
+ </thead>
185
+ <tbody>
186
+ <tr ng-show="list_host.length==0">
187
+ <td colspan="6">服务器上暂无安装证书的站点。</td>
188
+ </tr>
189
+ <tr>
190
+ <td class="text-right">{{$index+1}}</td>
191
+ <td>angeldoit.cn.uiie.cn<br>angeldoit.cn<br>mail.angeldoit.cn<br>www.angeldoit.cn<br>www.angeldoit.cn.uiie.cn</td>
192
+ <td>2019-01-04</td>
193
+ <td>2019-03-04</td>
194
+ <td>/public_html/angeldoit.cn</td>
195
+ <td>
196
+ <div class="btn-group">
197
+ <button class="btn btn-link btn-xs" title="设为主网站" ng-click="host_make_primary(item)">设为主网站</button>
198
+ <button class="btn btn-link btn-xs" title="卸载" ng-click="host_crts_uninstall(item)">卸载</button>
199
+ <button class="btn btn-link btn-xs" title="更新证书" ng-click="host_crts_update(item)">更新证书</button>
200
+ <button class="btn btn-link btn-xs" title="证书详细信息" ng-click="host_crts_details(item)">证书详细信息</button>
201
+ <button class="btn btn-link btn-xs" title="为新站点使用证书" ng-click="host_crts_new(item)">为新站点使用证书</button>
202
+ </div>
203
+ </td>
204
+ </tr>
205
+ <tr ng-repeat="item in list_host">
206
+ <td class="text-right">{{$index+1}}</td>
207
+ <td>{{item.domains}}</td>
208
+ <td>{{item.start}}</td>
209
+ <td>{{item.expiration}}</td>
210
+ <td>{{item.docroot}}</td>
211
+ <td>
212
+ <div class="btn-group">
213
+ <button class="btn btn-link btn-xs" title="设为主网站" ng-click="host_make_primary(item)">设为主网站</button>
214
+ <button class="btn btn-link btn-xs" title="卸载" ng-click="host_crts_uninstall(item)">卸载</button>
215
+ <button class="btn btn-link btn-xs" title="更新证书" ng-click="host_crts_update(item)">更新证书</button>
216
+ <button class="btn btn-link btn-xs" title="证书详细信息" ng-click="host_crts_details(item)">证书详细信息</button>
217
+ <button class="btn btn-link btn-xs" title="为新站点使用证书" ng-click="host_crts_new(item)">为新站点使用证书</button>
218
+ </div>
219
+ </td>
220
+ </tr>
221
+ </tbody>
222
+ </table>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </div>
228
+
229
+ <div id="pkg_install_setting" class="modal fade">
230
+ <div class="modal-dialog" role="document">
231
+ <div class="modal-content">
232
+ <div class="modal-header">
233
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
234
+ <h3 class="modal-title">{{curpkg.name}} 安装设置</h3>
235
+ </div>
236
+ <div class="modal-body">
237
+ <h5>请选择要安装的版本</h5>
238
+ <table class="table table-condensed" style="width: 350px;">
239
+ <thead>
240
+ <tr>
241
+ <th>版本名称</th>
242
+ <th>大小</th>
243
+ <th>选择</th>
244
+ </tr>
245
+ </thead>
246
+ <tbody>
247
+ <tr ng-repeat="v in curpkg.versions">
248
+ <td>{{v.name}}</td>
249
+ <td>{{v.size}}</td>
250
+ <td><label class="radio"><input type="radio" name="pkgver" ng-model="pkgver" ng-click="package_version_select(v)" value="{{v.code}}"></label></td>
251
+ </tr>
252
+ </tbody>
253
+ </table>
254
+ <h5>请设置要安装到的目录</h5>
255
+ <div class="input-append">
256
+ <input ng-model="installpath" type="text" class="input-large" placeholder="网站系统的安装目录">
257
+ <button class="btn btn-default" ng-click="selectinstallpath()"><i class="glyphicon glyphicon-folder-open"></i></button>
258
+ </div>
259
+ </div>
260
+ <div class="modal-footer">
261
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
262
+ <button class="btn btn-primary" onclick="$('#pkg_install_setting').modal('hide')" ng-click="package_install()">开始安装</button>
263
+ </div>
264
+ </div>
265
+ </div>
266
+ </div>
267
+
268
+ <div id="confirm" class="modal fade">
269
+ <div class="modal-dialog" role="document">
270
+ <div class="modal-content">
271
+ <div class="modal-header">
272
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
273
+ <h3 class="modal-title">{{confirm_title}}</h3>
274
+ </div>
275
+ <div class="modal-body" ng-bind-html-unsafe="confirm_body">
276
+ </div>
277
+ <div class="modal-footer">
278
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true" ng-click="cancel()">取消</button>
279
+ <button class="btn btn-primary" onclick="$('#confirm').modal('hide')" ng-click="confirm()">确定</button>
280
+ </div>
281
+ </div>
282
+ </div>
283
+ </div>
284
+
285
+ <div id="nginx_deleteserverconfirm" class="modal fade">
286
+ <div class="modal-dialog" role="document">
287
+ <div class="modal-content">
288
+ <div class="modal-header">
289
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
290
+ <h3 class="modal-title">删除确认</h3>
291
+ </div>
292
+ <div class="modal-body">
293
+ <p>是否确认删除 “{{nginx_server_name}}” 这个站点?</p>
294
+ <p class="text-error">注意:此处仅删除站点配置文件,网站的其它数据不受影响。</p>
295
+ </div>
296
+ <div class="modal-footer">
297
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
298
+ <button class="btn btn-primary" onclick="$('#nginx_deleteserverconfirm').modal('hide')" ng-click="nginx_deleteserver()">确定</button>
299
+ </div>
300
+ </div>
301
+ </div>
302
+ </div>
303
+
304
+ <div id="selector" class="modal fade">
305
+ <div class="modal-dialog" role="document">
306
+ <div class="modal-content">
307
+ <div class="modal-header">
308
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
309
+ <h3 class="modal-title">{{selector_title}}</h3>
310
+ </div>
311
+ <div class="modal-body">
312
+ <div selector></div>
313
+ </div>
314
+ <div class="modal-footer">
315
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
316
+ </div>
317
+ </div>
318
+ </div>
319
+ </div>
@@ -0,0 +1,109 @@
1
+ <div navbar ng-init="currentItem='utils.time'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>时间设置</h3>
9
+ </div>
10
+
11
+ <div class="tabbable">
12
+ <ul class="nav nav-tabs">
13
+ <li ng-class="'active' | iftrue:activeTabName=='datetime'"><a href="#datetime" ng-click="sec('datetime')" data-toggle="tab">时间设置</a></li>
14
+ <li ng-class="'active' | iftrue:activeTabName=='timezone'"><a href="#timezone" ng-click="sec('timezone')" data-toggle="tab">时区设置</a></li>
15
+ <li ng-class="'active' | iftrue:activeTabName=='sync'"><a href="#sync" ng-click="sec('sync')" data-toggle="tab">时间同步服务</a></li>
16
+ </ul>
17
+ <div class="tab-content">
18
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='datetime'" id="datetime" ng-init="loadDatetime()">
19
+ <form class="form-horizontal form-horizontal-small" ng-submit="saveDatetime()" onsubmit="return false" method="get" action="/">
20
+ <div class="form-group form-inline">
21
+ <label class="col-sm-2 control-label">当前时间:</label>
22
+ <div class="col-sm-10">
23
+ <span class="btn btn-default">{{datetime.str + ' ' + datetime.tz}}</span>
24
+ <button ng-click="synctime()" class="btn btn-default" ng-disabled="processing" ng-show="ntpdStatus!='none'">同步时间</button>
25
+ </div>
26
+ </div>
27
+ <div class="form-group form-inline">
28
+ <label class="col-sm-2 control-label" for="datetime">修改时间:</label>
29
+ <div class="col-sm-10">
30
+ <div class="input-group">
31
+ <input class="form-control" ng-model="newDatetime" ng-disabled="processing" size="19" type="text" id="datetime">
32
+ <span class="input-group-addon">{{datetime.tz}}</span>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ <div class="form-group form-inline">
37
+ <label class="col-sm-2 control-label"></label>
38
+ <div class="col-sm-10">
39
+ <button type="submit" class="btn btn-default" ng-disabled="processing">提交修改</button>
40
+ </div>
41
+ </div>
42
+ </form>
43
+ </div>
44
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='timezone'" id="timezone" ng-init="loadTimezone()">
45
+ <form class="form-horizontal form-horizontal-small" ng-submit="saveTimezone()" onsubmit="return false" method="get" action="/">
46
+ <div class="form-group form-inline">
47
+ <label class="col-sm-2 control-label">当前时区:</label>
48
+ <div class="col-sm-10">
49
+ <span class="btn btn-default">{{timezone}}</span>
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
+ <select class="form-control" ng-init="loadTimezones()" ng-change="loadTimezones(timezone_region)" ng-model="timezone_region" ng-options="region for region in regions"></select>
56
+ <select class="form-control" ng-model="timezone_city" ng-options="city for city in cities"></select>
57
+ </div>
58
+ </div>
59
+ <div class="form-group form-inline">
60
+ <label class="col-sm-2 control-label">快速选择:</label>
61
+ <div class="col-sm-10">
62
+ <a class="btn btn-default" ng-click="setTimezone('Asia', 'Shanghai')">北京时间</a>
63
+ <a class="btn btn-default" ng-click="setTimezone('America', 'Los_Angeles')">洛杉矶时间</a>
64
+ <a class="btn btn-default" ng-click="setTimezone('America', 'New_York')">纽约时间</a>
65
+ </div>
66
+ </div>
67
+ <div class="form-group form-inline">
68
+ <label class="col-sm-2 control-label"></label>
69
+ <div class="col-sm-10">
70
+ <button type="submit" class="btn btn-default" ng-disabled="processing">提交修改</button>
71
+ </div>
72
+ </div>
73
+ </form>
74
+ </div>
75
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='sync'" id="sync" ng-init="loadSync()">
76
+ <div class="panel panel-default" style="display:none" ng-show="virt=='Virtuozzo/OpenVZ'">
77
+ <div class="panel-body">
78
+ <p>时间同步在 Virtuozzo/OpenVZ 虚拟化平台下无法正常工作!</p>
79
+ <p>此功能被禁用!</p>
80
+ </div>
81
+ </div>
82
+ <div class="panel panel-default" style=display:none " ng-show="virt!='Virtuozzo/OpenVZ' ">
83
+ <div class="panel-body " ng-show="ntpdChecking ">
84
+ <p>正在检测 NTP 服务状态...</p>
85
+ </div>
86
+ <div class="panel-body " ng-show="!ntpdChecking && (ntpdStatus==null) ">
87
+ <p ng-bind-html-unsafe="installMessage "></p>
88
+ <p style="display:none; " ng-show="showInstallBtn ">
89
+ <button class="btn btn-default " ng-click="ntp_install() " ng-disabled="processing ">确定并安装</button>
90
+ </p>
91
+ </div>
92
+ <div class="panel-body " ng-show="ntpdStatus=='stopped' ">
93
+ <p ng-bind-html-unsafe="startMessage "></p>
94
+ <p style="display:none; " ng-show="showStartBtn ">
95
+ <button class="btn btn-default " ng-click="ntp_start() " ng-disabled="processing ">确定并启用</button>
96
+ </p>
97
+ </div>
98
+ <div class="panel-body " ng-show="ntpdStatus=='running' ">
99
+ <p ng-bind-html-unsafe="stopMessage "></p>
100
+ <p style="display:none; " ng-show="showStopBtn ">
101
+ <button class="btn btn-default " ng-click="ntp_stop() " ng-disabled="processing ">确定并停止</button>
102
+ </p>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ </div>
108
+
109
+ </div>