Fix token_has_all_scopes for yup-oauth2 v8 array format
yup-oauth2 v8 stores tokens as a JSON array of entries, each with a 'scopes' array field. Updated the parser to iterate over entries and check for matching scopes.
This commit is contained in:
@@ -78,15 +78,24 @@ impl ApiClient {
|
|||||||
Ok(c) => c,
|
Ok(c) => c,
|
||||||
Err(_) => return false,
|
Err(_) => return false,
|
||||||
};
|
};
|
||||||
let value: serde_json::Value = match serde_json::from_str(&content) {
|
let entries: Vec<serde_json::Value> = match serde_json::from_str(&content) {
|
||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(_) => return false,
|
Err(_) => return false,
|
||||||
};
|
};
|
||||||
let scope = match value["scope"].as_str() {
|
for entry in &entries {
|
||||||
Some(s) => s,
|
let scopes = match entry["scopes"].as_array() {
|
||||||
None => return false,
|
Some(s) => s,
|
||||||
};
|
None => continue,
|
||||||
SCOPES.iter().all(|s| scope.contains(s))
|
};
|
||||||
|
let has_all: Vec<&str> = scopes
|
||||||
|
.iter()
|
||||||
|
.filter_map(|s| s.as_str())
|
||||||
|
.collect();
|
||||||
|
if SCOPES.iter().all(|s| has_all.contains(s)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn start_and_wait_for_auth(&self) -> Result<(), ApiError> {
|
pub async fn start_and_wait_for_auth(&self) -> Result<(), ApiError> {
|
||||||
|
|||||||
Reference in New Issue
Block a user