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,
|
||||
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,
|
||||
Err(_) => return false,
|
||||
};
|
||||
let scope = match value["scope"].as_str() {
|
||||
Some(s) => s,
|
||||
None => return false,
|
||||
};
|
||||
SCOPES.iter().all(|s| scope.contains(s))
|
||||
for entry in &entries {
|
||||
let scopes = match entry["scopes"].as_array() {
|
||||
Some(s) => s,
|
||||
None => continue,
|
||||
};
|
||||
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> {
|
||||
|
||||
Reference in New Issue
Block a user