edit_user.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <!-- Begin toolbar -->
  2. <div class="toolbar">
  3. <div class="toolbar-inner">
  4. <div class="toolbar-buttons">
  5. <a class="button button-secondary button-back js-button-back" href="/list/user/">
  6. <i class="fas fa-arrow-left icon-blue"></i><?= _("Back") ?>
  7. </a>
  8. <?php
  9. if (($_SESSION['userContext'] === 'admin') && (!isset($_SESSION['look'])) && ($_SESSION['user'] !== $v_username)) {
  10. $ssh_key_url = "/list/key/?user=".htmlentities($user_plain)."&token=".$_SESSION['token']."";
  11. $log_url = "/list/log/?user=".htmlentities($user_plain)."&token=".$_SESSION['token']."";
  12. $keys_url = "/list/access-key/?user=".htmlentities($user_plain)."&token=".$_SESSION['token']."";
  13. } else {
  14. $ssh_key_url = "/list/key/";
  15. $log_url = "/list/log/";
  16. $keys_url = "/list/access-key/";
  17. }
  18. ?>
  19. <a href="<?= $ssh_key_url; ?>" class="button button-secondary js-button-create" title="<?= _("Manage SSH Keys") ?>">
  20. <i class="fas fa-key icon-orange"></i><?= _("Manage SSH Keys") ?>
  21. </a>
  22. <?php if ($_SESSION["userContext"] == "admin" || ($_SESSION["userContext"] !== "admin" && $_SESSION["POLICY_USER_VIEW_LOGS"] !== "no")) { ?>
  23. <a href="<?= $log_url ?>" class="button button-secondary js-button-create" title="<?= _("Logs") ?>">
  24. <i class="fas fa-clock-rotate-left icon-maroon"></i><?= _("Logs") ?>
  25. </a>
  26. <?php } ?>
  27. <?php
  28. $api_status = (!empty($_SESSION['API_SYSTEM']) && is_numeric($_SESSION['API_SYSTEM'])) ? $_SESSION['API_SYSTEM'] : 0;
  29. if (($user_plain == 'admin' && $api_status > 0) || ($user_plain != 'admin' && $api_status > 1)) { ?>
  30. <a href="<?= $keys_url; ?>" class="button button-secondary js-button-create" title="<?= _("Access Keys") ?>">
  31. <i class="fas fa-key icon-purple"></i><?= _("Access Keys") ?>
  32. </a>
  33. <?php } ?>
  34. </div>
  35. <div class="toolbar-buttons">
  36. <button type="submit" class="button" form="main-form">
  37. <i class="fas fa-floppy-disk icon-purple"></i><?= _("Save") ?>
  38. </button>
  39. </div>
  40. </div>
  41. </div>
  42. <!-- End toolbar -->
  43. <div class="container animate__animated animate__fadeIn">
  44. <form
  45. x-data="{
  46. loginDisabled: <?= $v_login_disabled === "yes" ? "true" : "false" ?>,
  47. useIpAllowList: <?= $v_login_use_iplist === "yes" ? "true" : "false" ?>,
  48. showAdvanced: false,
  49. }"
  50. id="main-form"
  51. method="post"
  52. name="v_edit_user"
  53. class="<?= $v_status ?>"
  54. >
  55. <input type="hidden" name="token" value="<?= $_SESSION["token"] ?>">
  56. <input type="hidden" name="save" value="save">
  57. <div class="form-container">
  58. <h1 class="u-mb20"><?= _("Edit User") ?></h1>
  59. <?php show_alert_message($_SESSION); ?>
  60. <div class="u-mb10">
  61. <label for="v_user" class="form-label"><?= _("Username") ?></label>
  62. <input type="text" class="form-control" name="v_user" id="v_user" value="<?= htmlentities(trim($v_username, "'")) ?>" disabled required>
  63. <input type="hidden" name="v_username" value="<?= htmlentities(trim($v_username, "'")) ?>">
  64. </div>
  65. <div class="u-mb10">
  66. <label for="v_name" class="form-label"><?= _("Contact Name") ?></label>
  67. <input type="text" class="form-control" name="v_name" id="v_name" value="<?= htmlentities(trim($v_name, "'")) ?>" <?php if (($_SESSION['userContext'] !=='admin' ) && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !=='yes' )) { echo 'disabled' ; }?> required>
  68. <?php if (($_SESSION['userContext'] !== 'admin') && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'yes')) { ?>
  69. <input type="hidden" name="v_name" value="<?= htmlentities(trim($v_name, "'")) ?>">
  70. <?php } ?>
  71. </div>
  72. <div class="u-mb10">
  73. <label for="v_email" class="form-label"><?= _("Email") ?></label>
  74. <input type="email" class="form-control" name="v_email" id="v_email" value="<?= htmlentities(trim($v_email, "'")) ?>" <?php if (($_SESSION['userContext'] !=='admin' ) && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !=='yes' )) { echo 'disabled' ; }?> required>
  75. <?php if (($_SESSION['userContext'] !== 'admin') && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'yes')) { ?>
  76. <input type="hidden" name="v_email" value="<?= htmlentities(trim($v_email, "'")) ?>">
  77. <?php } ?>
  78. </div>
  79. <div class="u-mb10">
  80. <label for="v_password" class="form-label">
  81. <?= _("Password") ?>
  82. <button type="button" title="<?= _("Generate") ?>" class="u-unstyled-button u-ml5 js-generate-password">
  83. <i class="fas fa-arrows-rotate icon-green"></i>
  84. </button>
  85. </label>
  86. <div class="u-pos-relative u-mb10">
  87. <input type="text" class="form-control js-password-input" name="v_password" id="v_password" value="<?= htmlentities(trim($v_password, "'")) ?>">
  88. <div class="password-meter">
  89. <meter max="4" class="password-meter-input js-password-meter"></meter>
  90. </div>
  91. </div>
  92. </div>
  93. <div id="password-details" class="u-mb20">
  94. <p class="u-mb10"><?= _("Your password must have at least") ?>:</p>
  95. <ul class="u-list-bulleted u-mb10">
  96. <li><?= _("8 characters long") ?></li>
  97. <li><?= _("1 uppercase & 1 lowercase character") ?></li>
  98. <li><?= _("1 number") ?></li>
  99. </ul>
  100. <?php if ($_SESSION["userContext"] === "admin") { ?>
  101. <div class="form-check">
  102. <input x-model="loginDisabled" class="form-check-input" type="checkbox" name="v_login_disabled" id="v_login_disabled">
  103. <label for="v_login_disabled">
  104. <?= _("Do not allow user to log in to Control Panel") ?>
  105. </label>
  106. </div>
  107. <?php } ?>
  108. <div x-cloak x-show="!loginDisabled" id="password-options">
  109. <div class="form-check">
  110. <input class="form-check-input" type="checkbox" name="v_twofa" id="v_twofa" <?php if (!empty($v_twofa)) echo 'checked' ?>>
  111. <label for="v_twofa">
  112. <?= _("Enable two-factor authentication") ?>
  113. </label>
  114. </div>
  115. <?php if (!empty($v_twofa)) { ?>
  116. <p class="u-mb10"><?= _("Account Recovery Code") . ": " . $v_twofa ?></p>
  117. <p class="u-mb10"><?= _("Please scan the code below in your 2FA application") ?>:</p>
  118. <div class="u-mb10">
  119. <img class="qr-code" src="<?= htmlentities($v_qrcode) ?>" alt="<?= _("2FA QR Code") ?>">
  120. </div>
  121. <?php } ?>
  122. </div>
  123. <div x-cloak x-show="!loginDisabled" id="password-options-ip">
  124. <div class="form-check">
  125. <input x-model="useIpAllowList" class="form-check-input" type="checkbox" name="v_login_use_iplist" id="v_login_use_iplist">
  126. <label for="v_login_use_iplist">
  127. <?= _("Use IP address allow list for login attempts") ?>
  128. </label>
  129. </div>
  130. </div>
  131. <div x-cloak x-show="useIpAllowList" id="ip-allowlist" class="u-mt10">
  132. <input type="text" class="form-control" name="v_login_allowed_ips" value="<?= htmlentities(trim($v_login_allowed_ips, "'")) ?>" placeholder="<?= _("For example") ?>: 127.0.0.1,192.168.1.100">
  133. </div>
  134. </div>
  135. <div class="u-mb10">
  136. <label for="v_language" class="form-label"><?= _("Language") ?></label>
  137. <select class="form-select" name="v_language" id="v_language" required>
  138. <?php
  139. foreach ($languages as $key => $value) {
  140. echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".$key."\"";
  141. $skey = "'".$key."'";
  142. if (( $key == $v_language ) || ( $skey == $v_language)){
  143. echo 'selected' ;
  144. }
  145. if (( $key == detect_user_language() ) && (empty($v_language))){
  146. echo 'selected' ;
  147. }
  148. echo ">".htmlentities($value)."</option>\n";
  149. }
  150. ?>
  151. </select>
  152. </div>
  153. <?php if ($v_username != "admin" && $_SESSION["userContext"] === "admin" && $_SESSION["user"] != $v_username): ?>
  154. <div class="u-mb10">
  155. <label for="v_role" class="form-label"><?= _("Role") ?></label>
  156. <select class="form-select" name="v_role" id="v_role" required>
  157. <option value="user"><?= _("User") ?></option>
  158. <option value="admin" <?= $v_role == "admin" ? "selected" : "" ?>><?= _("Administrator") ?></option>
  159. <option value="dns-cluster" <?= $v_role == "dns-cluster" ? "selected" : "" ?>><?= _("DNS Sync User") ?></option>
  160. </select>
  161. </div>
  162. <?php endif; ?>
  163. <?php if ($_SESSION["POLICY_USER_CHANGE_THEME"] !== "no") { ?>
  164. <div class="u-mb10">
  165. <label for="v_user_theme" class="form-label"><?= _("Theme") ?></label>
  166. <select class="form-select" name="v_user_theme" id="v_user_theme">
  167. <?php
  168. foreach ($themes as $key => $value) {
  169. echo "\t\t\t\t<option value=\"".$value."\"";
  170. if ((!empty($_SESSION['userTheme'])) && ( $value == $v_user_theme )) {
  171. echo ' selected' ;
  172. }
  173. if ((empty($v_user_theme) && (!empty($_SESSION['THEME']))) && ( $value == $_SESSION['THEME'] )) {
  174. echo ' selected' ;
  175. }
  176. echo ">".$value."</option>\n";
  177. }
  178. ?>
  179. </select>
  180. </div>
  181. <?php } ?>
  182. <div class="u-mb10">
  183. <label for="v_sort_order" class="form-label"><?= _("Default List Sort Order") ?></label>
  184. <select class="form-select" name="v_sort_order" id="v_sort_order">
  185. <option value='date' <?php if ($v_sort_order === 'date') echo 'selected' ?>><?= _("Date") ?></option>
  186. <option value='name' <?php if ($v_sort_order === 'name') echo 'selected' ?>><?= _("Name") ?></option>
  187. </select>
  188. </div>
  189. <?php if ($_SESSION['userContext'] === 'admin') { ?>
  190. <div class="u-mb20">
  191. <label for="v_package" class="form-label"><?= _("Package") ?></label>
  192. <select class="form-select" name="v_package" id="v_package" required>
  193. <?php
  194. foreach ($packages as $key => $value) {
  195. echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".htmlentities($key)."\"";
  196. $skey = "'".$key."'";
  197. if (( $key == $v_package ) || ( $skey == $v_package)){
  198. echo 'selected' ;
  199. }
  200. echo ">".htmlentities($key)."</option>\n";
  201. }
  202. ?>
  203. </select>
  204. </div>
  205. <div class="u-mb20">
  206. <button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
  207. <?= _("Advanced Options") ?>
  208. </button>
  209. </div>
  210. <div x-cloak x-show="showAdvanced">
  211. <div class="u-mb10">
  212. <label for="v_shell" class="form-label"><?= _("SSH Access") ?></label>
  213. <select class="form-select" name="v_shell" id="v_shell">
  214. <?php
  215. foreach ($shells as $key => $value) {
  216. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  217. $svalue = "'".$value."'";
  218. if (( $value == $v_shell ) || ($svalue == $v_shell )){
  219. echo 'selected' ;
  220. }
  221. echo ">".htmlentities($value)."</option>\n";
  222. }
  223. ?>
  224. </select>
  225. </div>
  226. <div class="u-mb10">
  227. <label for="v_phpcli" class="form-label"><?= _("PHP CLI Version") ?></label>
  228. <select class="form-select" name="v_phpcli" id="v_phpcli">
  229. <?php
  230. foreach ($php_versions as $key => $value) {
  231. $php = explode('-',$value);
  232. echo "\t\t\t\t<option value=\"".$value."\"";
  233. $svalue = "'".$value."'";
  234. if ((!empty($v_phpcli)) && ( $value == $v_phpcli ) || ($svalue == $v_phpcli)){
  235. echo ' selected' ;
  236. }
  237. if ((empty($v_phpcli)) && ($value == DEFAULT_PHP_VERSION)){
  238. echo ' selected' ;
  239. }
  240. echo ">".htmlentities($value)."</option>\n";
  241. }
  242. ?>
  243. </select>
  244. </div>
  245. <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) { ?>
  246. <p class="form-label u-mb10"><?= _("Default Name Servers") ?></p>
  247. <div class="u-mb5">
  248. <input type="text" class="form-control" name="v_ns1" value="<?= htmlentities(trim($v_ns1, "'")) ?>">
  249. </div>
  250. <div class="u-mb5">
  251. <input type="text" class="form-control" name="v_ns2" value="<?= htmlentities(trim($v_ns2, "'")) ?>">
  252. </div>
  253. <?php
  254. if ($v_ns3) {
  255. echo '<div class="u-side-by-side u-mb5">
  256. <input type="text" class="form-control" name="v_ns3" value="'.htmlentities(trim($v_ns3, "'")).'">
  257. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  258. </div>';
  259. }
  260. if ($v_ns4) {
  261. echo '<div class="u-side-by-side u-mb5">
  262. <input type="text" class="form-control" name="v_ns4" value="'.htmlentities(trim($v_ns4, "'")).'">
  263. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  264. </div>';
  265. }
  266. if ($v_ns5) {
  267. echo '<div class="u-side-by-side u-mb5">
  268. <input type="text" class="form-control" name="v_ns5" value="'.htmlentities(trim($v_ns5, "'")).'">
  269. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  270. </div>';
  271. }
  272. if ($v_ns6) {
  273. echo '<div class="u-side-by-side u-mb5">
  274. <input type="text" class="form-control" name="v_ns6" value="'.htmlentities(trim($v_ns6, "'")).'">
  275. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  276. </div>';
  277. }
  278. if ($v_ns7) {
  279. echo '<div class="u-side-by-side u-mb5">
  280. <input type="text" class="form-control" name="v_ns7" value="'.htmlentities(trim($v_ns7, "'")).'">
  281. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  282. </div>';
  283. }
  284. if ($v_ns8) {
  285. echo '<div class="u-side-by-side u-mb5">
  286. <input type="text" class="form-control" name="v_ns8" value="'.htmlentities(trim($v_ns8, "'")).'">
  287. <span class="u-ml10 js-remove-ns"><i class="fas fa-trash icon-dim icon-red"></i></span>
  288. </div>';
  289. }
  290. ?>
  291. <button type="button" class="form-link u-mt20 js-add-ns" <?php if ($v_ns8) echo 'style="display:none;"'; ?>>
  292. <?= _("Add Name Server") ?>
  293. </button>
  294. <?php } ?>
  295. </div>
  296. <?php } ?>
  297. </div>
  298. </form>
  299. </div>