HomeController.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace app\Controllers;
  3. use app\Exceptions\InvalidRequestException;
  4. use app\Exceptions\UnauthenticatedException;
  5. use app\Logger;
  6. use app\Types\DatabaseObjects\ContactTracker;
  7. use app\Types\WebhookMessage;
  8. use Pecee\SimpleRouter\SimpleRouter;
  9. use app\Interfaces\IRouteController;
  10. use app\Hajeebtok;
  11. class HomeController implements IRouteController
  12. {
  13. public static function redirect(): void {
  14. if(Hajeebtok::$Config->GetByDotKey("Instance.DebugMode")) return;
  15. response()->redirect("https://" . Hajeebtok::$Config->GetByDotKey("Instance.URL"));
  16. }
  17. public static function contact(): string {
  18. $message = input("message");
  19. $email = input("email");
  20. $name = input("name");
  21. // sanity checks
  22. if(empty($message) || empty($email) || empty($name)) throw new InvalidRequestException(400);
  23. if(strlen($message) > 2000 || strlen($email) > 100 || strlen($name) > 100) throw new InvalidRequestException(400);
  24. $client_ip = get_client_ip();
  25. $contact = new ContactTracker(ip: $client_ip);
  26. if($contact->Exists()) {
  27. $contact->Load();
  28. Logger::Debug(time());
  29. Logger::Debug($contact->date_sent);
  30. Logger::Debug(strval(time() - $contact->date_sent));
  31. if(time() - $contact->date_sent < Hajeebtok::$Config->GetByDotKey("Instance.ContactTimeout")) {
  32. throw new InvalidRequestException(429); // didnt wait atleast 1 hour :-1:
  33. }
  34. }
  35. $contact = new ContactTracker(name: $name, email: $email, message: $message, ip: $client_ip);
  36. $contact->Save();
  37. $webhook = new WebhookMessage(url: Hajeebtok::$Config->GetByDotKey("Instance.PrivateDiscordWebhookURL"));
  38. $webhook->SetContent("this is ground control to major tom");
  39. $webhook->AddEmbed([
  40. "description" => $message,
  41. "fields" => [],
  42. "title" => "New message from $name",
  43. "footer" => [
  44. "text" => $email,
  45. ],
  46. "author" => [
  47. "name" => $client_ip,
  48. ],
  49. "color" => 16711680 // red
  50. ]);
  51. $webhook->Send();
  52. CORSHelper();
  53. return api_json([
  54. "message" => "sent successfully. we will try to answer in less than 15 days."
  55. ]);
  56. }
  57. public static function RegisterRoutes(): void
  58. {
  59. SimpleRouter::group([
  60. "prefix" => "/",
  61. ], function () {
  62. SimpleRouter::get("/", [HomeController::class, "redirect"]);
  63. SimpleRouter::post("/contact", [HomeController::class, "contact"]);
  64. SimpleRouter::options("/contact", "CORSHelper");
  65. });
  66. }
  67. }