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,310 @@
1
+ <div navbar ng-init="currentItem='database'"></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>管理用户 {{username}}</h3>
9
+ </div>
10
+
11
+ <!-- 请输入数据库管理员 root 的密码后继续操作,需改进为复用模板 -->
12
+ <div class="panel panel-warning" ng-show="!$mysql.password_validated">
13
+ <div class="panel-heading">
14
+ <div class="panel-title">
15
+ <i class="glyphicon glyphicon-lock"></i>
16
+ <span> 请输入数据库管理员 root 的密码</span>
17
+ </div>
18
+ </div>
19
+ <div class="panel-body">
20
+ <form class="form-horizontal" onsubmit="return false" method="get" action="/">
21
+ <div class="form-group form-inline">
22
+ <label class="col-sm-2 control-label" for="password">管理员密码</label>
23
+ <div class="col-sm-10">
24
+ <input class="form-control" ng-model="$mysql.password" type="password" id="password" ng-disabled="processing" placeholder="管理员密码" autocomplete="off" autofocus>
25
+ </div>
26
+ </div>
27
+ <div class="form-group form-inline">
28
+ <div class="col-sm-2 control-label"></div>
29
+ <div class="col-sm-10">
30
+ <button class="btn btn-primary" ng-click="validate_password()" ng-disabled="processing">
31
+ <i class="glyphicon glyphicon-user"></i> <span>登录 MySQL</span>
32
+ </button>
33
+ <span style="padding-left:20px">
34
+ <a href="#/service/mysql?s=password">忘记密码?</a>
35
+ </span>
36
+ </div>
37
+ </div>
38
+ </form>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="tabbable" ng-init="load()" ng-show="$mysql.password_validated">
43
+ <ul class="nav nav-tabs">
44
+ <li ng-class="'active' | iftrue:activeTabName=='privs'"><a href="#privs" ng-click="sec('privs')" data-toggle="tab">用户权限</a></li>
45
+ <li ng-class="'active' | iftrue:activeTabName=='operation'"><a href="#operation" ng-click="sec('operation')" data-toggle="tab">用户操作</a></li>
46
+ </ul>
47
+ <div class="tab-content">
48
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='privs'" id="privs">
49
+ <div ng-show="privsloading">
50
+ <div waiting ng-init="waitingText='正在加载权限列表,请稍候...'"></div>
51
+ </div>
52
+
53
+ <div class="panel panel-default" ng-show="!privsloading">
54
+ <div class="panel-heading">
55
+ <div class="panel-title">
56
+ <i class="glyphicon glyphicon-user"></i>
57
+ <span"> 按数据库指定的权限</span>
58
+ </div>
59
+ </div>
60
+ <table class="table table-hover table-bordered table-condensed">
61
+ <thead>
62
+ <tr>
63
+ <th style="width:20px" class="text-right">#</th>
64
+ <th>数据库</th>
65
+ <th>权限</th>
66
+ <th>授权权限</th>
67
+ <th style="width:90px">操作</th>
68
+ </tr>
69
+ </thead>
70
+ <tbody>
71
+ <tr ng-show="privs.bydb.length==0">
72
+ <td colspan="5">该用户暂未设置数据库权限</td>
73
+ </tr>
74
+ <tr ng-repeat="dbpriv in privs.bydb">
75
+ <td class="text-right">{{$index+1}}</td>
76
+ <td>{{dbpriv.Db}}</td>
77
+ <td ng-bind-html-unsafe="dbpriv | mysql.privs: 'db'"></td>
78
+ <td ng-bind-html-unsafe="dbpriv.Grant_priv | mysql.grant"></td>
79
+ <td>
80
+ <div class="btn-group">
81
+ <button class="btn btn-default btn-sm" ng-click="editprivs(dbpriv)">
82
+ <i class="icon-edit"></i> 编辑权限
83
+ </button>
84
+ </div>
85
+ </td>
86
+ </tr>
87
+ </tbody>
88
+ </table>
89
+ </div>
90
+ <div class="panel panel-default" ng-show="!privsloading">
91
+ <div class="panel-heading">
92
+ <div class="panel-title">
93
+ <i class="glyphicon glyphicon-edit"></i>
94
+ <span> 设置数据库权限</span>
95
+ </div>
96
+ </div>
97
+ <div class="panel-body">
98
+ <div class="form-group form-inline">
99
+ <label class="control-label">在下列数据库中设置用户权限:</label>
100
+ <select class="form-control" ng-disabled="processing" ng-model="privs_dbname" ng-options="db.name as db.name for db in dbs"></select>
101
+ <button class="btn btn-default" ng-disabled="processing" ng-click="editprivs()">设置权限</button>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <div class="panel panel-default" ng-show="!privsloading">
106
+ <div class="panel-heading">
107
+ <div class="panel-title">
108
+ <i class="glyphicon glyphicon-user"></i>
109
+ <span> 全局权限</span>
110
+ </div>
111
+ </div>
112
+ <table class="table table-hover table-bordered table-condensed">
113
+ <thead>
114
+ <tr>
115
+ <th>权限</th>
116
+ <th>授权权限</th>
117
+ <th style="width:90px">操作</th>
118
+ </tr>
119
+ </thead>
120
+ <tbody>
121
+ <tr>
122
+ <td ng-bind-html-unsafe="privs.global | mysql.privs: 'global'"></td>
123
+ <td ng-bind-html-unsafe="privs.global.Grant_priv | mysql.grant"></td>
124
+ <td>
125
+ <div class="btn-group">
126
+ <button class="btn btn-default btn-sm" ng-click="editprivs(privs.global)" ng-disabled="user=='root' &&host!='%'">
127
+ <i class="glyphicon glyphicon-edit"></i> 编辑权限
128
+ </button>
129
+ </div>
130
+ </td>
131
+ </tr>
132
+ </tbody>
133
+ </table>
134
+ </div>
135
+ </div>
136
+
137
+ <div class="tab-pane" ng-class=" 'active' | iftrue:activeTabName=='operation'" id="operation">
138
+ <div ng-show="privsloading">
139
+ <div waiting ng-init="waitingText='正在加载用户信息,请稍候...'"></div>
140
+ </div>
141
+
142
+ <div class="panel panel-default" ng-show="!privsloading">
143
+ <div class="panel-heading">
144
+ <div class="panel-title">
145
+ <i class="glyphicon glyphicon-lock"></i>
146
+ <span> 密码设置</span>
147
+ </div>
148
+ </div>
149
+ <div class="panel-body">
150
+ <div class="form-horizontal form-horizontal-small">
151
+ <div class="form-group form-inline">
152
+ <label class="col-sm-2 control-label"></label>
153
+ <div class="col-sm-10 checkbox">
154
+ <label>
155
+ <input type="checkbox" ng-model="emptypassword"> 使用空密码
156
+ </label>
157
+ </div>
158
+ </div>
159
+ <div class="form-group form-inline">
160
+ <label class="col-sm-2 control-label" for="newpassword">新密码</label>
161
+ <div class="col-sm-10">
162
+ <input class="form-control" type="password" id="newpassword" ng-disabled="processing||emptypassword" ng-model="newpassword" placeholder="不修改请留空" autocomplete="off">
163
+ </div>
164
+ </div>
165
+ <div class="form-group form-inline">
166
+ <label class="col-sm-2 control-label" for="newpasswordc">确认密码</label>
167
+ <div class="col-sm-10">
168
+ <input class="form-control" type="password" id="newpasswordc" ng-disabled="processing||emptypassword" ng-model="newpasswordc" placeholder="不修改请留空" autocomplete="off">
169
+ </div>
170
+ </div>
171
+ <div class="form-group form-inline">
172
+ <label class="col-sm-2 control-label"></label>
173
+ <div class="col-sm-10">
174
+ <button class="btn btn-default" ng-disabled="processing||(!emptypassword&&!newpassword)" ng-click="setpassword()">更新密码</button>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ <div class="panel panel-danger" ng-show="(user!='root' ||host=='%' ) && !privsloading">
181
+ <div class="panel-heading">
182
+ <div class="panel-title">
183
+ <i class="glyphicon glyphicon-trash"></i>
184
+ <span> 删除用户</span>
185
+ </div>
186
+ </div>
187
+ <div class="panel-body">
188
+ <div class="form-group form-inline has-warning">
189
+ <input class="form-control" type="text" ng-disabled="processing" ng-model="delete_confirm" placeholder="输入 OK">
190
+ <button class="btn btn-danger" ng-disabled="processing||delete_confirm!='OK'" ng-click="dropuser()">输入大写 OK 后确认删除</button>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+
199
+ <div id="privsedit" class="modal fade">
200
+ <div class="modal-dialog" role="document">
201
+ <div class="modal-content">
202
+ <div class="modal-header">
203
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
204
+ <h3 class="modal-title">{{privsedit_title}}</h3>
205
+ </div>
206
+ <div class="modal-body">
207
+ <div class="form-group">
208
+ <legend>数据权限</legend>
209
+ <div class="checkbox">
210
+ <label title="允许查询数据"><input type="checkbox" ng-model="curprivs.Select_priv" ng-true-value="Y" ng-false-value="N"> SELECT</label>
211
+ </div>
212
+ <div class="checkbox">
213
+ <label title="允许插入和替换数据"><input type="checkbox" ng-model="curprivs.Insert_priv" ng-true-value="Y" ng-false-value="N"> INSERT</label>
214
+ </div>
215
+ <div class="checkbox">
216
+ <label title="允许修改数据"><input type="checkbox" ng-model="curprivs.Update_priv" ng-true-value="Y" ng-false-value="N"> UPDATE</label>
217
+ </div>
218
+ <div class="checkbox">
219
+ <label title="允许删除数据"><input type="checkbox" ng-model="curprivs.Delete_priv" ng-true-value="Y" ng-false-value="N"> DELETE</label>
220
+ </div>
221
+ <div class="checkbox" ng-show="!curprivs.Db">
222
+ <label title="允许从文件中导入数据以及将数据导出至文件" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.File_priv" ng-true-value="Y" ng-false-value="N"> FILE</label>
223
+ </div>
224
+ </div>
225
+ <div class="form-group">
226
+ <legend>结构权限</legend>
227
+ <div class="checkbox">
228
+ <label title="允许创建新数据库和数据表"><input type="checkbox" ng-model="curprivs.Create_priv" ng-true-value="Y" ng-false-value="N"> CREATE</label>
229
+ </div>
230
+ <div class="checkbox">
231
+ <label title="允许修改现有数据表的结构"><input type="checkbox" ng-model="curprivs.Alter_priv" ng-true-value="Y" ng-false-value="N"> ALTER</label>
232
+ </div>
233
+ <div class="checkbox">
234
+ <label title="允许创建和删除索引"><input type="checkbox" ng-model="curprivs.Index_priv" ng-true-value="Y" ng-false-value="N"> INDEX</label>
235
+ </div>
236
+ <div class="checkbox">
237
+ <label title="允许删除数据库和数据表"><input type="checkbox" ng-model="curprivs.Drop_priv" ng-true-value="Y" ng-false-value="N"> DROP</label>
238
+ </div>
239
+ <div class="checkbox">
240
+ <label title="允许创建临时表"><input type="checkbox" ng-model="curprivs.Create_tmp_table_priv" ng-true-value="Y" ng-false-value="N"> CREATE TEMPORARY TABLES</label>
241
+ </div>
242
+ <div class="checkbox">
243
+ <label title="允许执行 SHOW CREATE VIEW 查询"><input type="checkbox" ng-model="curprivs.Show_view_priv" ng-true-value="Y" ng-false-value="N"> SHOW VIEW</label>
244
+ </div>
245
+ <div class="checkbox">
246
+ <label title="允许创建存储过程"><input type="checkbox" ng-model="curprivs.Create_routine_priv" ng-true-value="Y" ng-false-value="N"> CREATE ROUTINE</label>
247
+ </div>
248
+ <div class="checkbox">
249
+ <label title="允许修改或删除储存过程"><input type="checkbox" ng-model="curprivs.Alter_routine_priv" ng-true-value="Y" ng-false-value="N"> ALTER ROUTINE</label>
250
+ </div>
251
+ <div class="checkbox">
252
+ <label title="允许运行存储过程"><input type="checkbox" ng-model="curprivs.Execute_priv" ng-true-value="Y" ng-false-value="N"> EXECUTE</label>
253
+ </div>
254
+ <div class="checkbox">
255
+ <label title="允许创建视图"><input type="checkbox" ng-model="curprivs.Create_view_priv" ng-true-value="Y" ng-false-value="N"> CREATE VIEW</label>
256
+ </div>
257
+ <div class="checkbox">
258
+ <label title="允许为事件触发器设置事件"><input type="checkbox" ng-model="curprivs.Event_priv" ng-true-value="Y" ng-false-value="N"> EVENT</label>
259
+ </div>
260
+ <div class="checkbox">
261
+ <label title="允许创建和删除触发器"><input type="checkbox" ng-model="curprivs.Trigger_priv" ng-true-value="Y" ng-false-value="N"> TRIGGER</label>
262
+ </div>
263
+ </div>
264
+ <div class="form-group">
265
+ <legend>管理权限</legend>
266
+ <div class="checkbox">
267
+ <label title="允许添加用户和权限,而不允许重新载入权限表"><input type="checkbox" ng-model="curprivs.Grant_priv" ng-true-value="Y" ng-false-value="N"> GRANT</label>
268
+ </div>
269
+ <div class="checkbox" ng-show="!curprivs.Db">
270
+ <label title="允许在达到最大连接数时连接,对于大多数像设置全局变量或杀死其它用户线程这样的管理操作是必需的" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Super_priv" ng-true-value="Y" ng-false-value="N"> SUPER</label>
271
+ </div>
272
+ <div class="checkbox" ng-show="!curprivs.Db">
273
+ <label title="允许查看所有用户的进程" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Process_priv" ng-true-value="Y" ng-false-value="N"> PROCESS</label>
274
+ </div>
275
+ <div class="checkbox" ng-show="!curprivs.Db">
276
+ <label title="允许重新载入服务器设置并刷新服务器的缓存" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Reload_priv" ng-true-value="Y" ng-false-value="N"> RELOAD</label>
277
+ </div>
278
+ <div class="checkbox" ng-show="!curprivs.Db">
279
+ <label title="允许关闭服务器" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Shutdown_priv" ng-true-value="Y" ng-false-value="N"> SHUTDOWN</label>
280
+ </div>
281
+ <div class="checkbox" ng-show="!curprivs.Db">
282
+ <label title="允许访问完整的数据库列表" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Show_db_priv" ng-true-value="Y" ng-false-value="N"> SHOW DATABASES</label>
283
+ </div>
284
+ <div class="checkbox">
285
+ <label title="允许锁定当前线程的表"><input type="checkbox" ng-model="curprivs.Lock_tables_priv" ng-true-value="Y" ng-false-value="N"> LOCK TABLES</label>
286
+ </div>
287
+ <div class="checkbox">
288
+ <label title="允许创建外键约束"><input type="checkbox" ng-model="curprivs.References_priv" ng-true-value="Y" ng-false-value="N"> REFERENCES</label>
289
+ </div>
290
+ <div class="checkbox" ng-show="!curprivs.Db">
291
+ <label title="允许询问附属者/控制者在哪里" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Repl_client_priv" ng-true-value="Y" ng-false-value="N"> REPLICATION CLIENT</label>
292
+ </div>
293
+ <div class="checkbox" ng-show="!curprivs.Db">
294
+ <label title="允许主从模式中的从复制" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Repl_slave_priv" ng-true-value="Y" ng-false-value="N"> REPLICATION SLAVE</label>
295
+ </div>
296
+ <div class="checkbox" ng-show="!curprivs.Db">
297
+ <label title="允许创建、删除和重命名用户账户" ng-disabled="curprivs.Db!=''"><input type="checkbox" ng-model="curprivs.Create_user_priv" ng-true-value="Y" ng-false-value="N"> CREATE USER</label>
298
+ </div>
299
+ </div>
300
+ </div>
301
+ <div class="modal-footer">
302
+ <div class="pull-left checkbox">
303
+ <label><input type="checkbox" ng-model="selectall"> 全选/全不选</label>
304
+ </div>
305
+ <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">取消</button>
306
+ <button class="btn btn-primary" onclick="$( '#privsedit').modal( 'hide')" ng-click="updateprivs()">保存权限设置</button>
307
+ </div>
308
+ </div>
309
+ </div>
310
+ </div>
@@ -0,0 +1,97 @@
1
+ <div navbar ng-init="currentItem='database'"></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
+ <!-- 请输入数据库管理员 root 的密码后继续操作,需改进为复用模板 -->
12
+ <div class="panel panel-warning" ng-show="!$mysql.password_validated">
13
+ <div class="panel-heading">
14
+ <div class="panel-title">
15
+ <i class="glyphicon glyphicon-lock"></i>
16
+ <span> 请输入数据库管理员 root 的密码</span>
17
+ </div>
18
+ </div>
19
+ <div class="panel-body">
20
+ <form class="form-horizontal" onsubmit="return false" method="get" action="/">
21
+ <div class="form-group form-inline">
22
+ <label class="col-sm-2 control-label" for="password">管理员密码</label>
23
+ <div class="col-sm-10">
24
+ <input class="form-control" ng-model="$mysql.password" type="password" id="password" ng-disabled="processing" placeholder="管理员密码" autocomplete="off" autofocus>
25
+ </div>
26
+ </div>
27
+ <div class="form-group form-inline">
28
+ <div class="col-sm-2 control-label"></div>
29
+ <div class="col-sm-10">
30
+ <button class="btn btn-primary" ng-click="validate_password()" ng-disabled="processing">
31
+ <i class="glyphicon glyphicon-user"></i> <span>登录 MySQL</span>
32
+ </button>
33
+ <span style="padding-left:20px">
34
+ <a href="#/service/mysql?s=password">忘记密码?</a>
35
+ </span>
36
+ </div>
37
+ </div>
38
+ </form>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="panel panel-default" ng-show="$mysql.password_validated">
43
+ <div class="panel-heading">
44
+ <div class="panel-title">
45
+ <i class="glyphicon glyphicon-user"></i>
46
+ <span> 添加新用户</span>
47
+ <span style="display:none" ng-show="dbname">到数据库 {{dbname}}</span>
48
+ </div>
49
+ </div>
50
+ <div class="panel-body form-horizontal form-horizontal-small">
51
+ <div class="form-group form-inline">
52
+ <label class="col-sm-2 control-label">用户名</label>
53
+ <div class="col-sm-10">
54
+ <input class="form-control" type="text" ng-disabled="processing" ng-model="user" autofocus>
55
+ </div>
56
+ </div>
57
+ <div class="form-group form-inline">
58
+ <label class="col-sm-2 control-label">主机</label>
59
+ <div class="col-sm-10">
60
+ <input class="form-control" type="text" ng-disabled="processing" ng-model="host" ng-init="host='localhost'">
61
+ <select class="form-control" ng-disabled="processing" ng-model="hosttype" ng-change="host=hosttype" ng-init="hosttype='localhost'">
62
+ <option value="%">任意(不推荐)</option>
63
+ <option value="localhost">本地(比较安全)</option>
64
+ <option value="">自定义</option>
65
+ </select>
66
+ </div>
67
+ </div>
68
+ <div class="form-group form-inline">
69
+ <label class="col-sm-2 control-label" for="passwordn">密码</label>
70
+ <div class="col-sm-10">
71
+ <input class="form-control" type="password" id="passwordn" ng-disabled="processing||emptypassword" ng-model="password" autocomplete="off">
72
+ <label><input type="checkbox" ng-model="emptypassword"> 使用空密码</label>
73
+ </div>
74
+ </div>
75
+ <div class="form-group form-inline">
76
+ <label class="col-sm-2 control-label" for="passwordc">确认密码</label>
77
+ <div class="col-sm-10">
78
+ <input class="form-control" type="password" id="passwordc" ng-disabled="processing||emptypassword" ng-model="passwordc" autocomplete="off">
79
+ </div>
80
+ </div>
81
+ <div class="form-group form-inline">
82
+ <label class="col-sm-2 control-label">随机密码</label>
83
+ <div class="col-sm-10">
84
+ <input class="form-control" type="text" ng-disabled="processing||emptypassword" ng-model="randpassword">
85
+ <button class="btn btn-default" ng-disabled="processing||emptypassword" ng-click="genpassword()">随机生成</button>
86
+ </div>
87
+ </div>
88
+ <div class="form-group form-inline">
89
+ <div class="col-sm-2 control-label"></div>
90
+ <div class="col-sm-10">
91
+ <button class="btn btn-default" ng-disabled="processing" ng-click="newuser()">添加新用户</button>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ </div>
@@ -0,0 +1,20 @@
1
+ <div id="{{id}}" style="position:fixed;left:0;bottom:0;width:100%;z-index:100">
2
+ <div class="container">
3
+ <div class="alert alert-danger" style="display:none;margin-bottom:3px" ng-show="$rootScope.showErrorMsg">
4
+ <button ng-click="$rootScope.showErrorMsg=false" type="button" class="close">&times;</button>
5
+ <span ng-bind-html-unsafe="$rootScope.errorMessage"></span>
6
+ </div>
7
+ <div class="alert alert-success" style="display:none;margin-bottom:3px" ng-show="$rootScope.showSuccessMsg">
8
+ <button ng-click="$rootScope.showSuccessMsg=false" type="button" class="close">&times;</button>
9
+ <span ng-bind-html-unsafe="$rootScope.successMessage"></span>
10
+ </div>
11
+ <div class="alert alert-warning" style="display:none;margin-bottom:3px" ng-show="$rootScope.showWarningMsg">
12
+ <button ng-click="$rootScope.showWarningMsg=false" type="button" class="close">&times;</button>
13
+ <span ng-bind-html-unsafe="$rootScope.warningMessage"></span>
14
+ </div>
15
+ <div class="alert alert-info" style="display:none;margin-bottom:3px" ng-show="$rootScope.showInfoMsg">
16
+ <button ng-click="$rootScope.showInfoMsg=false" type="button" class="close">&times;</button>
17
+ <span ng-bind-html-unsafe="$rootScope.infoMessage"></span>
18
+ </div>
19
+ </div>
20
+ </div>
@@ -0,0 +1,25 @@
1
+ <nav class="navbar navbar-default">
2
+ <div class="container-fluid">
3
+ <div class="navbar-header">
4
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
5
+ <span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
6
+ </button>
7
+ <a class="navbar-brand" href="#/">InPanel</a>
8
+ </div>
9
+ <div id="navbar" class="navbar-collapse collapse">
10
+ <ul class="nav navbar-nav">
11
+ <li ng-class="'active' | ifmatch:[currentItem,'main']"><a href="#/">首页</a></li>
12
+ <li ng-class="'active' | ifmatch:[currentItem,'service(..*)?']"><a href="#/service">服务</a></li>
13
+ <li ng-class="'active' | ifmatch:[currentItem,'file']"><a href="#/file">文件</a></li>
14
+ <li ng-class="'active' | ifmatch:[currentItem,'site(..*)?']"><a href="#/site">网站</a></li>
15
+ <li ng-class="'active' | ifmatch:[currentItem,'database']"><a href="#/database">数据库</a></li>
16
+ <!-- <li ng-class="'active' | ifmatch:[currentItem,'plugins(..*)?']"><a href="#/plugins">应用</a></li> -->
17
+ <li ng-class="'active' | ifmatch:[currentItem,'utils(..*)?']"><a href="#/utils">工具</a></li>
18
+ </ul>
19
+ <ul class="nav navbar-nav navbar-right">
20
+ <li ng-class="'active' | ifmatch:[currentItem,'setting(..*)?']"><a href="#/setting">设置</a></li>
21
+ <li ng-class="'active' | ifmatch:[currentItem,'logout']"><a href="#/logout">退出</a></li>
22
+ </ul>
23
+ </div>
24
+ </div>
25
+ </nav>
@@ -0,0 +1,57 @@
1
+ <div>
2
+ <div ng-show="onlydir&&!onlyfile&&!otherdir">
3
+ <p>当前目录为:{{path}}</p>
4
+ <p>
5
+ <button class="btn btn-default btn-sm" ng-click="selecthandler(path)">选择当前目录</button>
6
+ <button class="btn btn-default btn-sm" ng-click="otherdir=true;listdir(path)">选择其它目录</button>
7
+ </p>
8
+ </div>
9
+ <div ng-show="otherdir">
10
+ <ul class="breadcrumb" style="margin-bottom:0">
11
+ <li>
12
+ <a ng-click="listdir('/')">根目录</a>
13
+ </li>
14
+ <li ng-repeat="pathinfo in pathinfos" ng-show="pathinfos.length>0">
15
+ <a ng-click="listdir(pathinfo.path)">{{pathinfo.name}}</a>
16
+ </li>
17
+ <li>
18
+ <button class="btn btn-default btn-xs" ng-show="onlydir"
19
+ ng-click="selecthandler(curpath)">选取该目录</button>
20
+ </li>
21
+ </ul>
22
+ <table class="table table-hover table-condensed">
23
+ <thead>
24
+ <tr>
25
+ <th style="width:20px"></th>
26
+ <th></th>
27
+ <th style="width:80px"></th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <tr ng-repeat="item in items">
32
+ <td>
33
+ <i class="glyphicon glyphicon-folder-open" title="文件夹" ng-show="item.isdir"></i>
34
+ <i class="glyphicon glyphicon-file" title="文件" ng-show="item.isreg"></i>
35
+ <i class="glyphicon glyphicon-link" title="链接"
36
+ ng-show="item.islnk&&(item.link_isdir||item.link_isreg)"></i>
37
+ <i class="glyphicon glyphicon-ban-circle" title="未知"
38
+ ng-show="!item.isdir&&!item.isreg&&(!item.islnk||(item.islnk&&!item.link_isdir&&!item.link_isreg))"></i>
39
+ </td>
40
+ <td>
41
+ <a class="black" ng-click="listdir(curpath_pre+'/'+item.name)"
42
+ ng-show="item.isdir||(item.islnk&&item.link_isdir)">{{item.name}}</a>
43
+ <a class="black" ng-show="item.isreg||(item.islnk&&!item.link_isdir)">{{item.name}}</a>
44
+ <span class="text-info" ng-show="item.islnk">-> {{item.linkto}}</span>
45
+ </td>
46
+ <td>
47
+ <button class="btn btn-default btn-xs"
48
+ ng-show="onlydir&&(item.isdir||(item.islnk&&item.link_isdir))"
49
+ ng-click="selecthandler(curpath_pre+'/'+item.name)">选取该目录</button>
50
+ <button class="btn btn-default btn-xs"
51
+ ng-show="onlyfile&&(item.isreg||(item.islnk&&item.link_isreg))"
52
+ ng-click="selecthandler(curpath_pre+'/'+item.name)">选取该文件</button>
53
+ </td>
54
+ </tr>
55
+ </tbody>
56
+ </table>
57
+ </div>
@@ -0,0 +1,72 @@
1
+ <table class="table table-hover">
2
+ <thead>
3
+ <tr>
4
+ <th colspan="2">{{name}} 服务操作</th>
5
+ </tr>
6
+ </thead>
7
+ <tbody>
8
+ <tr>
9
+ <td style="width:120px;">软件安装版本:</td>
10
+ <td>
11
+ <span ng-show="!pkginfo">正在获取...</span>
12
+ <span style="display:none" ng-show="pkginfo">
13
+ {{pkginfo.name}} {{'v'+pkginfo.version+'-'+pkginfo.release | iftrue:pkginfo.version}}
14
+ {{"("+pkginfo.from_repo+")" | iftrue:pkginfo.from_repo}}
15
+ </span>
16
+ </td>
17
+ </tr>
18
+ <tr>
19
+ <td style="width:120px;">软件官方网站:</td>
20
+ <td>
21
+ <span ng-show="!pkginfo">正在获取...</span>
22
+ <span style="display:none" ng-show="pkginfo">
23
+ <a href="{{pkginfo.url}}" target="_blank" ng-show="pkginfo.url">{{pkginfo.url}}</a>
24
+ </span>
25
+ </td>
26
+ </tr>
27
+ <tr>
28
+ <td style="width:120px;">软件授权协议:</td>
29
+ <td>
30
+ <span ng-show="!pkginfo">正在获取...</span>
31
+ <span style="display:none" ng-show="pkginfo">{{pkginfo.license}}</span>
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td style="width:120px;">当前服务状态:</td>
36
+ <td ng-bind-html-unsafe="$scope.status | service.status"></td>
37
+ </tr>
38
+ <tr>
39
+ <td>开机是否启动:</td>
40
+ <td>
41
+ <button class="btn btn-default btn-xs" ng-class="'active' | iftrue:$scope.autostart"
42
+ data-toggle="button" ng-click="toggleAutostart()">
43
+ <span class="glyphicon glyphicon-check"></span> 开机自动启动
44
+ </button>
45
+ </td>
46
+ </tr>
47
+ <tr>
48
+ <td>启动/停止服务:</td>
49
+ <td>
50
+ <button class="btn btn-default btn-xs" ng-show="$scope.status=='stopped'" ng-disabled="$scope.waiting"
51
+ ng-click="start()">
52
+ <span class="glyphicon glyphicon-play"></span> 启动服务
53
+ </button>
54
+ <button class="btn btn-default btn-xs" ng-show="$scope.status=='running'" ng-disabled="$scope.waiting"
55
+ ng-click="stop()">
56
+ <span class="glyphicon glyphicon-stop"></span> 停止服务
57
+ </button>
58
+ <button class="btn btn-default btn-xs" ng-disabled="$scope.status=='stopped'||$scope.waiting"
59
+ ng-click="restart()">
60
+ <span class="glyphicon glyphicon-refresh"></span> 重启服务
61
+ </button>
62
+ </td>
63
+ </tr>
64
+ <tr>
65
+ <td style="width:120px;">软件摘要信息:</td>
66
+ <td>
67
+ <span ng-show="!pkginfo">正在获取...</span>
68
+ <span style="display:none" ng-show="pkginfo">{{pkginfo.summary}}</span>
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table>
@@ -0,0 +1,34 @@
1
+ <div class="well" style="display:none" ng-show="$scope.installed&&!$scope.checking">
2
+ <div ng-show="!operating">
3
+ <p>点击下面的按钮检测扩展安装情况。</p>
4
+ </div>
5
+ <div ng-show="operating" ng-bind-html-unsafe="showMsg"></div>
6
+ <p ng-show="!operating">
7
+ <button class="btn btn-default btn-sm" style="margin-top:10px" ng-click="start()">检测扩展</button>
8
+ </p>
9
+ <table class="table table-condensed" style="margin-top:20px;display:none" ng-show="showExtList&&exts.length>0">
10
+ <thead>
11
+ <tr>
12
+ <th>扩展名称</th>
13
+ <th>版本</th>
14
+ <th style="width:70px">软件源</th>
15
+ <th style="width:70px">大小</th>
16
+ <th style="width:90px">操作</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <tr ng-repeat="ext in exts">
21
+ <td>{{ext.name}}</td>
22
+ <td>{{ext.version}}-{{ext.release}}</td>
23
+ <td>{{'已安装'|iftrue:ext.repo=='installed'}}{{ext.repo|iftrue:ext.repo!='installed'}}</td>
24
+ <td>{{ext.size}}</td>
25
+ <td>
26
+ <button class="btn btn-default btn-xs" ng-show="ext.repo=='installed'"
27
+ ng-click="uninstall(ext.repo, ext.name, ext.version, ext.release)">删除扩展</button>
28
+ <button class="btn btn-default btn-xs" ng-show="ext.repo!='installed'"
29
+ ng-click="install(ext.repo, ext.name, ext.version, ext.release)">安装该扩展</button>
30
+ </td>
31
+ </tr>
32
+ </tbody>
33
+ </table>
34
+ </div>