diff options
| author | benj <benj@rse8.com> | 2023-05-26 22:05:23 -0700 |
|---|---|---|
| committer | benj <benj@rse8.com> | 2023-05-26 22:06:36 -0700 |
| commit | b3ba31a1572ecec38115385fafe4a4e87ca39361 (patch) | |
| tree | 2a91038cf96e87b475d71fbcb149d2999dc74c62 /crates/secd/src/util/mod.rs | |
| parent | bd6a6a2023649505ebcf7e78f2a47de57d0c72b0 (diff) | |
| download | secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar.gz secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar.bz2 secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar.lz secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar.xz secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.tar.zst secdiam-b3ba31a1572ecec38115385fafe4a4e87ca39361.zip | |
🐞: don't panic when parsing a malformed api token
Diffstat (limited to 'crates/secd/src/util/mod.rs')
| -rw-r--r-- | crates/secd/src/util/mod.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/crates/secd/src/util/mod.rs b/crates/secd/src/util/mod.rs index fb984d1..03e7517 100644 --- a/crates/secd/src/util/mod.rs +++ b/crates/secd/src/util/mod.rs @@ -75,10 +75,18 @@ impl CredentialType { .decode(token) .map_err(|e| SecdError::DecodeError(e.to_string()))?; - let public = - general_purpose::URL_SAFE_NO_PAD.encode(&decoded[0..CREDENTIAL_PUBLIC_PART_BYTES]); - let private = - general_purpose::URL_SAFE_NO_PAD.encode(&decoded[CREDENTIAL_PUBLIC_PART_BYTES..]); + let public = general_purpose::URL_SAFE_NO_PAD.encode( + &decoded + .get(0..CREDENTIAL_PUBLIC_PART_BYTES) + .ok_or(SecdError::CredentialIsNotApiToken) + .ctx("insufficent number of bytes to find credential's public part")?, + ); + let private = general_purpose::URL_SAFE_NO_PAD.encode( + &decoded + .get(CREDENTIAL_PUBLIC_PART_BYTES..) + .ok_or(SecdError::CredentialIsNotApiToken) + .ctx("insufficent number of bytes to find credential's secret part")?, + ); Ok(CredentialType::ApiToken { public, private }) } |
