mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-23 05:51:39 +00:00
Add cookie header support for Roblox API requests in CloneCommand and StudioCommand
- Introduced a cookie header to the API requests in both `fetch_experience_name` and `get_universe_id` functions, allowing for authenticated requests to the Roblox API. - Updated the request handling to conditionally include the cookie if available, enhancing the functionality of the commands when interacting with the API.
This commit is contained in:
parent
8dc050895a
commit
2892d989f8
2 changed files with 22 additions and 5 deletions
|
|
@ -4,6 +4,7 @@ use std::process::{Command, Stdio};
|
||||||
use anyhow::{bail, Context};
|
use anyhow::{bail, Context};
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use reqwest::blocking::Client;
|
use reqwest::blocking::Client;
|
||||||
|
use reqwest::header::COOKIE;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
use super::init::{InitCommand, InitKind};
|
use super::init::{InitCommand, InitKind};
|
||||||
|
|
@ -131,12 +132,17 @@ struct GameData {
|
||||||
|
|
||||||
/// Resolves a place ID to its experience name via the Roblox API.
|
/// Resolves a place ID to its experience name via the Roblox API.
|
||||||
fn fetch_experience_name(place_id: u64) -> anyhow::Result<String> {
|
fn fetch_experience_name(place_id: u64) -> anyhow::Result<String> {
|
||||||
|
let cookie_header = rbx_cookie::get_value().map(|c| format!(".ROBLOSECURITY={}", c));
|
||||||
|
|
||||||
let client = Client::new();
|
let client = Client::new();
|
||||||
|
|
||||||
// Place ID -> Universe ID
|
// Place ID -> Universe ID
|
||||||
let universe_url = format!("https://apis.roblox.com/universes/v1/places/{place_id}/universe");
|
let universe_url = format!("https://apis.roblox.com/universes/v1/places/{place_id}/universe");
|
||||||
let universe: UniverseResponse = client
|
let mut req = client.get(&universe_url);
|
||||||
.get(&universe_url)
|
if let Some(cookie) = &cookie_header {
|
||||||
|
req = req.header(COOKIE, cookie);
|
||||||
|
}
|
||||||
|
let universe: UniverseResponse = req
|
||||||
.send()
|
.send()
|
||||||
.context("Failed to reach Roblox universe API")?
|
.context("Failed to reach Roblox universe API")?
|
||||||
.json()
|
.json()
|
||||||
|
|
@ -147,8 +153,11 @@ fn fetch_experience_name(place_id: u64) -> anyhow::Result<String> {
|
||||||
"https://games.roblox.com/v1/games?universeIds={}",
|
"https://games.roblox.com/v1/games?universeIds={}",
|
||||||
universe.universe_id
|
universe.universe_id
|
||||||
);
|
);
|
||||||
let games: GamesResponse = client
|
let mut req = client.get(&games_url);
|
||||||
.get(&games_url)
|
if let Some(cookie) = &cookie_header {
|
||||||
|
req = req.header(COOKIE, cookie);
|
||||||
|
}
|
||||||
|
let games: GamesResponse = req
|
||||||
.send()
|
.send()
|
||||||
.context("Failed to reach Roblox games API")?
|
.context("Failed to reach Roblox games API")?
|
||||||
.json()
|
.json()
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ use std::process::Command;
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use memofs::Vfs;
|
use memofs::Vfs;
|
||||||
|
use reqwest::header::COOKIE;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
use crate::project::Project;
|
use crate::project::Project;
|
||||||
|
|
@ -66,12 +67,19 @@ impl StudioCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_universe_id(place_id: u64) -> anyhow::Result<u64> {
|
fn get_universe_id(place_id: u64) -> anyhow::Result<u64> {
|
||||||
|
let cookie_header = rbx_cookie::get_value().map(|c| format!(".ROBLOSECURITY={}", c));
|
||||||
|
|
||||||
let url = format!(
|
let url = format!(
|
||||||
"https://apis.roblox.com/universes/v1/places/{}/universe",
|
"https://apis.roblox.com/universes/v1/places/{}/universe",
|
||||||
place_id
|
place_id
|
||||||
);
|
);
|
||||||
|
|
||||||
let response: UniverseResponse = reqwest::blocking::get(&url)
|
let mut req = reqwest::blocking::Client::new().get(&url);
|
||||||
|
if let Some(cookie) = &cookie_header {
|
||||||
|
req = req.header(COOKIE, cookie);
|
||||||
|
}
|
||||||
|
let response: UniverseResponse = req
|
||||||
|
.send()
|
||||||
.context("Failed to fetch universe ID from Roblox API")?
|
.context("Failed to fetch universe ID from Roblox API")?
|
||||||
.json()
|
.json()
|
||||||
.context("Failed to parse universe ID response")?;
|
.context("Failed to parse universe ID response")?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue