From f53369aeaed850a02e3f6c661cbf473e95f11d32 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Thu, 30 Mar 2023 17:56:01 +0100 Subject: [PATCH] Handle imported Synapse access/refresh tokens --- crates/data-model/src/tokens.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/data-model/src/tokens.rs b/crates/data-model/src/tokens.rs index 5c7acf34..e239b5b3 100644 --- a/crates/data-model/src/tokens.rs +++ b/crates/data-model/src/tokens.rs @@ -178,6 +178,8 @@ impl TokenType { "mar" => Some(TokenType::RefreshToken), "mct" => Some(TokenType::CompatAccessToken), "mcr" => Some(TokenType::CompatRefreshToken), + "syt" => Some(TokenType::CompatAccessToken), // Synapse access token + "syr" => Some(TokenType::CompatRefreshToken), // Synapse refresh token _ => None, } } @@ -220,8 +222,22 @@ impl TokenType { /// TokenType::check("mar_PkpplxPkfjsqvtdfUlYR1Afg2TpaHF_GaTQd2"), /// Ok(TokenType::RefreshToken) /// ); + /// + /// assert_eq!( + /// TokenType::check("syt_PkpplxPkfjsqvtdfUlYR1Afg2TpaHF_GaTQd2"), + /// Ok(TokenType::CompatAccessToken) + /// ); /// ``` pub fn check(token: &str) -> Result { + // these are legacy tokens imported from Synapse + // we don't do any validation on them and continue as is + if token.starts_with("syt_") { + return Ok(TokenType::CompatAccessToken); + } + if token.starts_with("syr_") { + return Ok(TokenType::CompatRefreshToken); + } + let split: Vec<&str> = token.split('_').collect(); let [prefix, random_part, crc]: [&str; 3] = split .try_into() @@ -314,6 +330,8 @@ mod tests { #[test] fn test_prefix_match() { use TokenType::{AccessToken, CompatAccessToken, CompatRefreshToken, RefreshToken}; + assert_eq!(TokenType::match_prefix("syt"), Some(CompatAccessToken)); + assert_eq!(TokenType::match_prefix("syr"), Some(CompatRefreshToken)); assert_eq!(TokenType::match_prefix("mct"), Some(CompatAccessToken)); assert_eq!(TokenType::match_prefix("mcr"), Some(CompatRefreshToken)); assert_eq!(TokenType::match_prefix("mat"), Some(AccessToken));