auth_cookie.rs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //! Implementation of automatically fetching authentication cookie from a Roblox
  2. //! Studio installation.
  3. #[cfg(windows)]
  4. pub fn get_auth_cookie() -> Option<String> {
  5. use winreg::{enums::HKEY_CURRENT_USER, RegKey};
  6. let hkcu = RegKey::predef(HKEY_CURRENT_USER);
  7. let cookies = hkcu
  8. .open_subkey("Software\\Roblox\\RobloxStudioBrowser\\roblox.com")
  9. .ok()?;
  10. let entry: String = cookies.get_value(".ROBLOSECURITY").ok()?;
  11. let mut cookie = None;
  12. for kv_pair in entry.split(",") {
  13. let mut pieces = kv_pair.split("::");
  14. if let Some("COOK") = pieces.next() {
  15. let value = match pieces.next() {
  16. Some(value) => value,
  17. None => {
  18. log::warn!("Unrecognized Roblox Studio cookie value: missing COOK value");
  19. return None;
  20. }
  21. };
  22. if !value.starts_with('<') || !value.ends_with('>') {
  23. log::warn!("Unrecognized Roblox Studio cookie value: was not wrapped in <>");
  24. return None;
  25. }
  26. let value = &value[1..value.len() - 1];
  27. cookie = Some(value);
  28. }
  29. }
  30. cookie.map(Into::into)
  31. }
  32. #[cfg(not(windows))]
  33. pub fn get_auth_cookie() -> Option<String> {
  34. None
  35. }