Browse Source
Refactor the uri match change
Refactored the uri match fix to also convert numbers within a string to an int.
If it fails it will be null.
Signed-off-by: BlackDex <black.dex@gmail.com>
pull/5339/head
BlackDex
4 months ago
No known key found for this signature in database
GPG Key ID: 58C80A2AA6C765E1
1 changed files with
15 additions and
12 deletions
src/db/models/cipher.rs
@ -241,20 +241,23 @@ impl Cipher {
// NOTE: This was marked as *Backwards Compatibility Code*, but as of January 2021 this is still being used by upstream
// Set the first element of the Uris array as Uri, this is needed several (mobile) clients.
if self . atype = = 1 {
if type_data_json [ "uris" ] . is_array ( ) {
// Upstream always has an `uri` key/value
type_data_json [ "uri" ] = Value ::Null ;
if let Some ( uris ) = type_data_json [ "uris" ] . as_array_mut ( ) {
if ! uris . is_empty ( ) {
// Fix uri match values first, they are only allowed to be a number or null
// If it is a string, convert it to null since all clients do not allow strings anyway
let uri_count = type_data_json [ "uris" ] . as_array ( ) . unwrap ( ) . len ( ) ;
for n in 0 . . uri_count {
if type_data_json [ "uris" ] [ n ] [ "match" ] . is_string ( ) {
type_data_json [ "uris" ] [ n ] [ "match" ] = Value ::Null ;
// If it is a string, convert it to an int or null if that fails
for uri in & mut * uris {
if uri [ "match" ] . is_string ( ) {
let match_value = match uri [ "match" ] . as_str ( ) . unwrap_or_default ( ) . parse ::< u8 > ( ) {
Ok ( n ) = > json ! ( n ) ,
_ = > Value ::Null ,
} ;
uri [ "match" ] = match_value ;
}
}
let uri = type_data_json [ "uris" ] [ 0 ] [ "uri" ] . clone ( ) ;
type_data_json [ "uri" ] = uri ;
} else {
// Upstream always has an Uri key/value
type_data_json [ "uri" ] = Value ::Null ;
type_data_json [ "uri" ] = uris [ 0 ] [ "uri" ] . clone ( ) ;
}
}
}