test.pas 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. unit test;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. BrookAction, Captcha, RUtils, Classes, SysUtils;
  6. type
  7. TTest = class(TBrookAction)
  8. public
  9. procedure Get; override;
  10. procedure Post; override;
  11. end;
  12. const
  13. FORM =
  14. '<!DOCTYPE HTML>'+lf+
  15. '<html lang="pt-BR">'+lf+
  16. '<head>'+lf+
  17. ' <meta charset="UTF-8">'+lf+
  18. ' <title></title>'+lf+
  19. '</head>'+lf+
  20. '<body>'+lf+
  21. '<img src="data:image/gif;base64,%s"/>'+lf+
  22. ' <form autocomplete="off" action="" method="post">'+lf+
  23. ' <input type="text" name="captcha"/>'+lf+
  24. ' <input type="submit"/>'+lf+
  25. ' </form>'+lf+
  26. '</body>'+lf+
  27. '</html>';
  28. implementation
  29. uses
  30. FPWritePNG;
  31. procedure TTest.Get;
  32. var
  33. VImage: TMemoryImage;
  34. VStream: TMemoryStream;
  35. begin
  36. if not TCaptcha.FontExists(ftLiberationSerifRegularTTF) then
  37. Exit;
  38. VImage := TMemoryImage.Create;
  39. VStream := TMemoryStream.Create;
  40. try
  41. SetCookie('captcha', TCaptcha.Generate(VStream));
  42. VStream.Seek(0, 0);
  43. Write(FORM, [StreamToBase64(VStream)]);
  44. finally
  45. VStream.Free;
  46. VImage.Free;
  47. end;
  48. end;
  49. procedure TTest.Post;
  50. begin
  51. if SameText(Fields.Values['captcha'], GetCookie('captcha')) then
  52. Write('OK')
  53. else
  54. Write('Fail');
  55. end;
  56. initialization
  57. TTest.Register('*');
  58. end.