Fix protocol URL parsing - action is host, session is path
This commit is contained in:
@@ -352,6 +352,8 @@ pub fn parse_protocol_url(url: &str) -> Result<(String, String, Option<String>)>
|
|||||||
// guruconnect://view/SESSION_ID
|
// guruconnect://view/SESSION_ID
|
||||||
// guruconnect://view/SESSION_ID?token=API_KEY
|
// guruconnect://view/SESSION_ID?token=API_KEY
|
||||||
// guruconnect://connect/SESSION_ID?server=wss://...&token=API_KEY
|
// guruconnect://connect/SESSION_ID?server=wss://...&token=API_KEY
|
||||||
|
//
|
||||||
|
// Note: In URL parsing, "view" becomes the host, SESSION_ID is the path
|
||||||
|
|
||||||
let url = url::Url::parse(url)
|
let url = url::Url::parse(url)
|
||||||
.map_err(|e| anyhow!("Invalid URL: {}", e))?;
|
.map_err(|e| anyhow!("Invalid URL: {}", e))?;
|
||||||
@@ -360,17 +362,22 @@ pub fn parse_protocol_url(url: &str) -> Result<(String, String, Option<String>)>
|
|||||||
return Err(anyhow!("Invalid scheme: expected guruconnect://"));
|
return Err(anyhow!("Invalid scheme: expected guruconnect://"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The "action" (view/connect) is parsed as the host
|
||||||
|
let action = url.host_str()
|
||||||
|
.ok_or_else(|| anyhow!("Missing action in URL"))?;
|
||||||
|
|
||||||
|
// The session ID is the first path segment
|
||||||
let path = url.path().trim_start_matches('/');
|
let path = url.path().trim_start_matches('/');
|
||||||
let parts: Vec<&str> = path.split('/').collect();
|
let session_id = if path.is_empty() {
|
||||||
|
return Err(anyhow!("Missing session ID"));
|
||||||
|
} else {
|
||||||
|
path.split('/').next().unwrap_or("").to_string()
|
||||||
|
};
|
||||||
|
|
||||||
if parts.is_empty() {
|
if session_id.is_empty() {
|
||||||
return Err(anyhow!("Missing action in URL"));
|
return Err(anyhow!("Missing session ID"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let action = parts[0];
|
|
||||||
let session_id = parts.get(1).map(|s| s.to_string())
|
|
||||||
.ok_or_else(|| anyhow!("Missing session ID"))?;
|
|
||||||
|
|
||||||
// Extract query parameters
|
// Extract query parameters
|
||||||
let mut server = None;
|
let mut server = None;
|
||||||
let mut token = None;
|
let mut token = None;
|
||||||
|
|||||||
Reference in New Issue
Block a user