aboutsummaryrefslogtreecommitdiff
path: root/crates/secd/src/util/mod.rs
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2023-05-26 22:05:23 -0700
committerbenj <benj@rse8.com>2023-05-26 22:06:36 -0700
commitb3ba31a1572ecec38115385fafe4a4e87ca39361 (patch)
tree2a91038cf96e87b475d71fbcb149d2999dc74c62 /crates/secd/src/util/mod.rs
parentbd6a6a2023649505ebcf7e78f2a47de57d0c72b0 (diff)
downloadsecdiam-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.rs16
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 })
}