index.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. use function Hestiacp\quoteshellarg\quoteshellarg;
  3. ob_start();
  4. session_start();
  5. $TAB = "USER";
  6. // Main include
  7. include $_SERVER["DOCUMENT_ROOT"] . "/inc/main.php";
  8. // Check POST request
  9. if (!empty($_POST["ok"])) {
  10. // Check token
  11. verify_csrf($_POST);
  12. if (empty($_POST["v_key"])) {
  13. $_SESSION["error_msg"] = _("Field SSH_KEY can not be blank.");
  14. }
  15. if ($_SESSION["userContext"] === "admin" && !empty($_GET["user"])) {
  16. $user = quoteshellarg($_GET["user"]);
  17. }
  18. if (!$_SESSION["error_msg"]) {
  19. if ($_POST) {
  20. //key if key already exists
  21. exec(HESTIA_CMD . "v-list-user-ssh-key " . $user . " json", $output, $return_var);
  22. $data = json_decode(implode("", $output), true);
  23. unset($output);
  24. $keylist = [];
  25. $idlist = [];
  26. foreach ($data as $key => $value) {
  27. $idlist[] = trim($data[$key]["ID"]);
  28. $keylist[] = trim($data[$key]["KEY"]);
  29. }
  30. $v_key_parts = explode(" ", $_POST["v_key"]);
  31. $key_id = trim($v_key_parts[2]);
  32. if ($v_key_parts[2] == "") {
  33. $v_key_parts[2] = md5(time());
  34. $_POST["v_key"] .= " " . $v_key_parts[2];
  35. }
  36. //for deleting / revoking key the last part user@domain is used therefore needs to be unique
  37. //maybe consider adding random generated message or even an human read able string set by user?
  38. if (in_array($v_key_parts[2], $idlist)) {
  39. $_SESSION["error_msg"] = _("SSH KEY already exists");
  40. }
  41. if (in_array($v_key_parts[1], $keylist)) {
  42. $_SESSION["error_msg"] = _("SSH KEY already exists");
  43. }
  44. $v_key = quoteshellarg(trim($_POST["v_key"]));
  45. }
  46. }
  47. if (empty($_SESSION["error_msg"])) {
  48. exec(HESTIA_CMD . "v-add-user-ssh-key " . $user . " " . $v_key, $output, $return_var);
  49. check_return_code($return_var, $output);
  50. }
  51. unset($output);
  52. // Flush field values on success
  53. if (empty($_SESSION["error_msg"])) {
  54. $_SESSION["ok_msg"] = _("SSH KEY created");
  55. }
  56. }
  57. if (empty($v_key)) {
  58. $v_key = "";
  59. }
  60. render_page($user, $TAB, "add_key");
  61. // Flush session messages
  62. unset($_SESSION["error_msg"]);
  63. unset($_SESSION["ok_msg"]);