mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-05 02:39:53 +02:00
Change panics into Result<_, librespot_core::Error>
This commit is contained in:
parent
a297c68913
commit
62461be1fc
69 changed files with 2041 additions and 1331 deletions
|
@ -7,8 +7,21 @@ use pbkdf2::pbkdf2;
|
|||
use protobuf::ProtobufEnum;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sha1::{Digest, Sha1};
|
||||
use thiserror::Error;
|
||||
|
||||
use crate::protocol::authentication::AuthenticationType;
|
||||
use crate::{protocol::authentication::AuthenticationType, Error};
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum AuthenticationError {
|
||||
#[error("unknown authentication type {0}")]
|
||||
AuthType(u32),
|
||||
}
|
||||
|
||||
impl From<AuthenticationError> for Error {
|
||||
fn from(err: AuthenticationError) -> Self {
|
||||
Error::invalid_argument(err)
|
||||
}
|
||||
}
|
||||
|
||||
/// The credentials are used to log into the Spotify API.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
|
@ -46,7 +59,7 @@ impl Credentials {
|
|||
username: impl Into<String>,
|
||||
encrypted_blob: impl AsRef<[u8]>,
|
||||
device_id: impl AsRef<[u8]>,
|
||||
) -> Credentials {
|
||||
) -> Result<Credentials, Error> {
|
||||
fn read_u8<R: Read>(stream: &mut R) -> io::Result<u8> {
|
||||
let mut data = [0u8];
|
||||
stream.read_exact(&mut data)?;
|
||||
|
@ -91,7 +104,7 @@ impl Credentials {
|
|||
use aes::cipher::generic_array::GenericArray;
|
||||
use aes::cipher::{BlockCipher, NewBlockCipher};
|
||||
|
||||
let mut data = base64::decode(encrypted_blob).unwrap();
|
||||
let mut data = base64::decode(encrypted_blob)?;
|
||||
let cipher = Aes192::new(GenericArray::from_slice(&key));
|
||||
let block_size = <Aes192 as BlockCipher>::BlockSize::to_usize();
|
||||
|
||||
|
@ -109,19 +122,20 @@ impl Credentials {
|
|||
};
|
||||
|
||||
let mut cursor = io::Cursor::new(blob.as_slice());
|
||||
read_u8(&mut cursor).unwrap();
|
||||
read_bytes(&mut cursor).unwrap();
|
||||
read_u8(&mut cursor).unwrap();
|
||||
let auth_type = read_int(&mut cursor).unwrap();
|
||||
let auth_type = AuthenticationType::from_i32(auth_type as i32).unwrap();
|
||||
read_u8(&mut cursor).unwrap();
|
||||
let auth_data = read_bytes(&mut cursor).unwrap();
|
||||
read_u8(&mut cursor)?;
|
||||
read_bytes(&mut cursor)?;
|
||||
read_u8(&mut cursor)?;
|
||||
let auth_type = read_int(&mut cursor)?;
|
||||
let auth_type = AuthenticationType::from_i32(auth_type as i32)
|
||||
.ok_or(AuthenticationError::AuthType(auth_type))?;
|
||||
read_u8(&mut cursor)?;
|
||||
let auth_data = read_bytes(&mut cursor)?;
|
||||
|
||||
Credentials {
|
||||
Ok(Credentials {
|
||||
username,
|
||||
auth_type,
|
||||
auth_data,
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue