Cookie.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2022, Tobias Christiansen <tobyase@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "Cookie.h"
  7. #include <LibIPC/Decoder.h>
  8. #include <LibIPC/Encoder.h>
  9. namespace Web::Cookie {
  10. StringView same_site_to_string(SameSite same_site)
  11. {
  12. switch (same_site) {
  13. case SameSite::Default:
  14. return "Default"sv;
  15. case SameSite::None:
  16. return "None"sv;
  17. case SameSite::Lax:
  18. return "Lax"sv;
  19. case SameSite::Strict:
  20. return "Strict"sv;
  21. }
  22. VERIFY_NOT_REACHED();
  23. }
  24. SameSite same_site_from_string(StringView same_site_mode)
  25. {
  26. if (same_site_mode.equals_ignoring_case("None"sv))
  27. return SameSite::None;
  28. if (same_site_mode.equals_ignoring_case("Strict"sv))
  29. return SameSite::Strict;
  30. if (same_site_mode.equals_ignoring_case("Lax"sv))
  31. return SameSite::Lax;
  32. return SameSite::Default;
  33. }
  34. }
  35. template<>
  36. ErrorOr<void> IPC::encode(Encoder& encoder, Web::Cookie::Cookie const& cookie)
  37. {
  38. TRY(encoder.encode(cookie.name));
  39. TRY(encoder.encode(cookie.value));
  40. TRY(encoder.encode(cookie.domain));
  41. TRY(encoder.encode(cookie.path));
  42. TRY(encoder.encode(cookie.creation_time));
  43. TRY(encoder.encode(cookie.expiry_time));
  44. TRY(encoder.encode(cookie.host_only));
  45. TRY(encoder.encode(cookie.http_only));
  46. TRY(encoder.encode(cookie.last_access_time));
  47. TRY(encoder.encode(cookie.persistent));
  48. TRY(encoder.encode(cookie.secure));
  49. TRY(encoder.encode(cookie.same_site));
  50. return {};
  51. }
  52. template<>
  53. ErrorOr<Web::Cookie::Cookie> IPC::decode(Decoder& decoder)
  54. {
  55. auto name = TRY(decoder.decode<DeprecatedString>());
  56. auto value = TRY(decoder.decode<DeprecatedString>());
  57. auto domain = TRY(decoder.decode<DeprecatedString>());
  58. auto path = TRY(decoder.decode<DeprecatedString>());
  59. auto creation_time = TRY(decoder.decode<Core::DateTime>());
  60. auto expiry_time = TRY(decoder.decode<Core::DateTime>());
  61. auto host_only = TRY(decoder.decode<bool>());
  62. auto http_only = TRY(decoder.decode<bool>());
  63. auto last_access_time = TRY(decoder.decode<Core::DateTime>());
  64. auto persistent = TRY(decoder.decode<bool>());
  65. auto secure = TRY(decoder.decode<bool>());
  66. auto same_site = TRY(decoder.decode<Web::Cookie::SameSite>());
  67. return Web::Cookie::Cookie { move(name), move(value), same_site, move(creation_time), move(last_access_time), move(expiry_time), move(domain), move(path), secure, http_only, host_only, persistent };
  68. }