index.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. // Check empty fields
  13. if (empty($_POST["v_key"])) {
  14. $errors[] = _("SSH Key");
  15. }
  16. if (!empty($errors[0])) {
  17. foreach ($errors as $i => $error) {
  18. if ($i == 0) {
  19. $error_msg = $error;
  20. } else {
  21. $error_msg = $error_msg . ", " . $error;
  22. }
  23. }
  24. $_SESSION["error_msg"] = sprintf(_('Field "%s" can not be blank.'), $error_msg);
  25. }
  26. if ($_SESSION["userContext"] === "admin" && !empty($_GET["user"])) {
  27. $user = quoteshellarg($_GET["user"]);
  28. }
  29. if (!$_SESSION["error_msg"]) {
  30. if ($_POST) {
  31. //key if key already exists
  32. exec(HESTIA_CMD . "v-list-user-ssh-key " . $user . " json", $output, $return_var);
  33. $data = json_decode(implode("", $output), true);
  34. unset($output);
  35. $keylist = [];
  36. $idlist = [];
  37. foreach ($data as $key => $value) {
  38. $idlist[] = trim($data[$key]["ID"]);
  39. $keylist[] = trim($data[$key]["KEY"]);
  40. }
  41. $v_key_parts = explode(" ", $_POST["v_key"]);
  42. $key_id = trim($v_key_parts[2]);
  43. if ($v_key_parts[2] == "") {
  44. $v_key_parts[2] = md5(time());
  45. $_POST["v_key"] .= " " . $v_key_parts[2];
  46. }
  47. //for deleting / revoking key the last part user@domain is used therefore needs to be unique
  48. //maybe consider adding random generated message or even an human read able string set by user?
  49. if (in_array($v_key_parts[2], $idlist)) {
  50. $_SESSION["error_msg"] = _("SSH Key already exists.");
  51. }
  52. if (in_array($v_key_parts[1], $keylist)) {
  53. $_SESSION["error_msg"] = _("SSH Key already exists.");
  54. }
  55. $v_key = quoteshellarg(trim($_POST["v_key"]));
  56. }
  57. }
  58. if (empty($_SESSION["error_msg"])) {
  59. exec(HESTIA_CMD . "v-add-user-ssh-key " . $user . " " . $v_key, $output, $return_var);
  60. check_return_code($return_var, $output);
  61. }
  62. unset($output);
  63. // Flush field values on success
  64. if (empty($_SESSION["error_msg"])) {
  65. $_SESSION["ok_msg"] = _("SSH Key has been created successfully.");
  66. }
  67. }
  68. if (empty($v_key)) {
  69. $v_key = "";
  70. }
  71. render_page($user, $TAB, "add_key");
  72. // Flush session messages
  73. unset($_SESSION["error_msg"]);
  74. unset($_SESSION["ok_msg"]);