Skip to content

Commit

Permalink
feat: 🔐 add parse jwt tokens algos
Browse files Browse the repository at this point in the history
add functions which can parse different algorithms
  • Loading branch information
DMoscicki committed Nov 26, 2024
1 parent 6e39e46 commit ae1e7b5
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 1 deletion.
98 changes: 97 additions & 1 deletion src/authn/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,45 @@ impl AuthSdk {
.await?)
}

pub fn parse_jwt_token(&self, token: &str) -> SdkResult<Claims> {
pub fn parse_jwt_token_rs256(&self, token: &str) -> SdkResult<Claims> {
let mut validation = Validation::new(Algorithm::RS256);
validation.set_audience(&[self.sdk.client_id()]);

let td: TokenData<Claims> = jsonwebtoken::decode(token, &DecodingKey::from_rsa_pem(self.sdk.certificate().as_bytes())?, &validation)?;
Ok(td.claims)
}

pub fn parse_jwt_token_rs512(&self, token: &str) -> SdkResult<Claims> {
let mut validation: Validation = Validation::new(Algorithm::RS512);
validation.set_audience(&[self.sdk.client_id()]);

let td: TokenData<Claims> = jsonwebtoken::decode(token, &DecodingKey::from_rsa_pem(self.sdk.certificate().as_bytes())?, &validation)?;

Ok(td.claims)
}

pub fn parse_jwt_token_es256(&self, token: &str) -> SdkResult<Claims> {
let mut validation: Validation = Validation::new(Algorithm::ES256);
validation.set_audience(&[self.sdk.client_id()]);

let decode_key = &DecodingKey::from_ec_pem(self.sdk.certificate().as_bytes()).unwrap();

let token_data: TokenData<Claims> = jsonwebtoken::decode(&token, &decode_key, &validation).unwrap();

Ok(token_data.claims)
}

pub fn parse_jwt_token_es384(&self, token: &str) -> SdkResult<Claims> {
let mut validation: Validation = Validation::new(Algorithm::ES384);
validation.set_audience(&[self.sdk.client_id()]);

let decode_key = &DecodingKey::from_ec_pem(self.sdk.certificate().as_bytes()).unwrap();

let token_data: TokenData<Claims> = jsonwebtoken::decode(&token, &decode_key, &validation).unwrap();

Ok(token_data.claims)
}

pub fn get_signin_url(&self, redirect_url: String) -> String {
let scope = "read";
let state = self.sdk.app_name().clone().unwrap_or_default();
Expand Down Expand Up @@ -126,3 +157,68 @@ impl AuthSdk {
.into_data_default()
}
}

#[cfg(test)]

mod tests {
use std::fs;

use crate::Config;

#[test]
fn succesfully_es256() {
let token = fs::read_to_string("./src/authn/testdata/tok_es256.txt").unwrap();
let cert = fs::read_to_string("./src/authn/testdata/cert_es256.txt").unwrap();
let cfg = Config::new(
"http://localhost:8000",
"e953686f04e7055b698b",
"secret",
cert,
"org_name",
Some("app_name".to_owned()),
).into_sdk();

let authnx = cfg.authn();

let tk = authnx.parse_jwt_token_es256(&token).unwrap();
assert_eq!("user1", tk.user.display_name);
}

#[test]
fn succesfully_es384() {
let token = fs::read_to_string("/home/moscicki/personal_projects/casdoor-rs-sdk/src/authn/testdata/tok_es384.txt").unwrap();
let cert = fs::read_to_string("/home/moscicki/personal_projects/casdoor-rs-sdk/src/authn/testdata/cert_es384.txt").unwrap();
let cfg = Config::new(
"http://localhost:8000",
"e953686f04e7055b698b",
"secret",
cert,
"org_name",
Some("app_name".to_owned()),
).into_sdk();

let authnx = cfg.authn();

let tk = authnx.parse_jwt_token_es384(&token).unwrap();
assert_eq!("user1", tk.user.display_name);
}

#[test]
fn succesfully_rs512() {
let token = fs::read_to_string("/home/moscicki/personal_projects/casdoor-rs-sdk/src/authn/testdata/tok_rs512.txt").unwrap();
let cert = fs::read_to_string("/home/moscicki/personal_projects/casdoor-rs-sdk/src/authn/testdata/cert_rs512.txt").unwrap();
let cfg = Config::new(
"http://localhost:8000",
"e953686f04e7055b698b",
"secret",
cert,
"org_name",
Some("app_name".to_owned()),
).into_sdk();

let authnx = cfg.authn();

let tk = authnx.parse_jwt_token_rs512(&token).unwrap();
assert_eq!("user1", tk.user.display_name);
}
}
10 changes: 10 additions & 0 deletions src/authn/testdata/cert_es256.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-----BEGIN CERTIFICATE-----
MIIBTjCB9KADAgECAgRnRMH0MAoGCCqGSM49BAMCMCYxDjAMBgNVBAoTBWFkbWlu
MRQwEgYDVQQDDAtjZXJ0XzUzNmd4OTAeFw0yNDExMjUxODI5MDhaFw00NDExMjUx
ODI5MDhaMCYxDjAMBgNVBAoTBWFkbWluMRQwEgYDVQQDDAtjZXJ0XzUzNmd4OTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABCnOWrujrhFFgvuBXigUSYtSHj4oeCXE
QecGCIOMz/AIXSDYzkV0BbXQaBG49rGFeNux1dxP/yt3Ms55BdhnQAejEDAOMAwG
A1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDSQAwRgIhAPCxLcRPiFp70CnReHCoNv3B
RAWDs1bN8On3xWhSTLxXAiEApRAHyDZJkuBIwsfdKBBtvl3Lxz3sQXUn8L0vTQST
0zs=
-----END CERTIFICATE-----
11 changes: 11 additions & 0 deletions src/authn/testdata/cert_es384.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-----BEGIN CERTIFICATE-----
MIIBijCCARGgAwIBAgIEZ0Y2tjAKBggqhkjOPQQDAzAmMQ4wDAYDVQQKEwVhZG1p
bjEUMBIGA1UEAwwLY2VydF96NnR3cWIwHhcNMjQxMTI2MjA1OTM0WhcNNDQxMTI2
MjA1OTM0WjAmMQ4wDAYDVQQKEwVhZG1pbjEUMBIGA1UEAwwLY2VydF96NnR3cWIw
djAQBgcqhkjOPQIBBgUrgQQAIgNiAATEkGgkdnmTfcNrFF3Xe32uOwpO3KXGdYgq
TGJ8MNdh5vTiEBPaSM77ImEnPES7Da7ID/jmiVVc+TWWBN/a5RR3s2tTady+ssbk
JOmeq8qwqMTzHv/IqAxlFouW5GJ3xZqjEDAOMAwGA1UdEwEB/wQCMAAwCgYIKoZI
zj0EAwMDZwAwZAIwcFpz+OC2QGXsGvbDLSeassrqKYQuY2nyTCqhCe63O67kQpdp
Orn/UlQ9dPcST1YyAjAjv8olJlkvOVbEExeLUJDFFyHvKY386Z0AuW6ybAql4lrg
TaV2VdeQ84CjVIIlZ1o=
-----END CERTIFICATE-----
29 changes: 29 additions & 0 deletions src/authn/testdata/cert_rs512.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
-----BEGIN CERTIFICATE-----
MIIE3TCCAsWgAwIBAgIDAeJAMA0GCSqGSIb3DQEBDQUAMCgxDjAMBgNVBAoTBWFk
bWluMRYwFAYDVQQDEw1jZXJ0LWJ1aWx0LWluMB4XDTI0MTEyNjIxMTgzOVoXDTQ0
MTEyNjIxMTgzOVowKDEOMAwGA1UEChMFYWRtaW4xFjAUBgNVBAMTDWNlcnQtYnVp
bHQtaW4wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ3WejBKioE7nH
/zcf5qfMhXpiyOlkW3EceSgWnsMovOleRSypbSJISogC8RzyitYCqiCgPnL96Xov
swhJQ3+HShcxL8UHDR5aegIh+mM36lXeGEen7Q1W9D0kGlanc4jgRuj2Ok+43c1t
auoqZkMg+MdMgbyl39Bs16C/GV2Lmh4Pe31TRdIOAgLIX0CN+1BknVzvo4mjIF8O
aYrJztO6pnnBGmQXJR96PC3tv7heyZwGZeomL6xuvhqjqjleVxFYFQk6JHY/7L+u
1gSQnRfkJ2Q/ju+x8Oglc2/AaSuoICCfORoSRbrnKmXOXQIn9wEUlb2/WiENh796
N1NXMw43PTKpOPpPoi/GORO7kgT2Zd4/cyIhNnV8HaoA10z2GwLMz/+FlupUUiEI
CiDyn09q9PmT5rphqb60xy16+OGIsFHZIgZxlaWzBUV+ts+eZPQCbpqcxbU0QjqW
NS50PQaRIK+jH1p5MSvNSPHUxTBYjuTfmyVBr8EBg+xJX9SVEjJW7LLYwR6ZZGD7
xNeG4ew/i9icJRtDJ0jMgvrqeZPg7wnxmtabZZIHx+R+mea+PDAfJq7t8w7ftH7Q
pQ7no40i6DI5ONsDCn5LkaPVxGzjgt0aOlw90ixtdPlOFhu0a5IJcBGQEZftdNrS
aasV/G9P2WESM68MgcTDKH1v+XE2PwIDAQABoxAwDjAMBgNVHRMBAf8EAjAAMA0G
CSqGSIb3DQEBDQUAA4ICAQBhYxoH/yiX8dPe/+q4AtssuIr9fAD9mrcV7uKkwyo6
kK7FkQfFcviRJZVhbu5r3egH7AUn99KmnxeKTObQiwdml1xAFX65SALlY/fNWQ6K
JA7AUYw0iaLcaRDkDriHw33ZZtC3nhyjuZql3e3MeDX09iqjBGnngOb+FT9NdWET
OCW2A5I7gUSt2v6bNhbWRdzaYmUGCxboRFMjLeC9zEPQylejuwv7GKCJa+jXN2kp
CmmQCHlAMf9LZx6lymJ5lYOaLjqXouPE/taSeuA9fwh11NXb0BEx2+Duo/c88qOg
bbqR8/GmnHwb0fv9c2exCKDl7+11E72s/aF0z9VmV4LOwQYI0vhtPUqqGX4VOBmk
YbzxIC8/Ck0N3NlmvFf7WQa8IMQTYC8FtBsvuDZcGIhKa1JBUYjf1E649l4UcGWV
oKmYKLPex3xH+2WHuSZKvtS58bh71mUbAnwuBe19kBS+csWNkcck49reAe/H87d8
0eMAWOaCmY7lfNfZ/Xy+1MOshuUTujd49dgBZjfXMWUBaAAQy5I3h7eMJioQth48
3JhM4jendvx3xkgYZdesd6ThPB0Mmu7SvLO6Reb1PpnifQm6XpEfMPAjhI1M/cHW
oPIZICyzDrDEHJ/wKPyQ3fLXbCm+XvmVlsk+t3n/GKJjX7b5BTB8yGO78Dg2sJ6W
ug==
-----END CERTIFICATE-----
1 change: 1 addition & 0 deletions src/authn/testdata/tok_es256.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJhbGciOiJFUzI1NiIsImtpZCI6ImNlcnRfNTM2Z3g5IiwidHlwIjoiSldUIn0.eyJvd25lciI6Ikt1YmVybmV0ZXMiLCJuYW1lIjoidXNlcjEiLCJjcmVhdGVkVGltZSI6IjIwMjQtMTEtMTRUMjM6NTA6MTYrMDM6MDAiLCJ1cGRhdGVkVGltZSI6IjIwMjQtMTEtMjVUMTg6MzY6MjVaIiwiZGVsZXRlZFRpbWUiOiIiLCJpZCI6ImFlYzI5NTBhLTkzMTEtNGM2Yy1iNzBiLTAyZGIzOTA5ZmQ4NCIsInR5cGUiOiJub3JtYWwtdXNlciIsInBhc3N3b3JkIjoiIiwicGFzc3dvcmRTYWx0IjoiIiwicGFzc3dvcmRUeXBlIjoicGxhaW4iLCJkaXNwbGF5TmFtZSI6InVzZXIxIiwiZmlyc3ROYW1lIjoiIiwibGFzdE5hbWUiOiIiLCJhdmF0YXIiOiJodHRwczovL2Nkbi5jYXNiaW4ub3JnL2ltZy9jYXNiaW4uc3ZnIiwiYXZhdGFyVHlwZSI6IiIsInBlcm1hbmVudEF2YXRhciI6IiIsImVtYWlsIjoiZHA4dTRhQGV4YW1wbGUuY29tIiwiZW1haWxWZXJpZmllZCI6ZmFsc2UsInBob25lIjoiODQ2NjQ2MTcxNTYiLCJjb3VudHJ5Q29kZSI6IlVTIiwicmVnaW9uIjoiIiwibG9jYXRpb24iOiIiLCJhZGRyZXNzIjpbXSwiYWZmaWxpYXRpb24iOiJFeGFtcGxlIEluYy4iLCJ0aXRsZSI6IiIsImlkQ2FyZFR5cGUiOiIiLCJpZENhcmQiOiIiLCJob21lcGFnZSI6IiIsImJpbyI6IiIsImxhbmd1YWdlIjoiIiwiZ2VuZGVyIjoiIiwiYmlydGhkYXkiOiIiLCJlZHVjYXRpb24iOiIiLCJzY29yZSI6MjAwMCwia2FybWEiOjAsInJhbmtpbmciOjIsImlzRGVmYXVsdEF2YXRhciI6ZmFsc2UsImlzT25saW5lIjpmYWxzZSwiaXNBZG1pbiI6dHJ1ZSwiaXNGb3JiaWRkZW4iOmZhbHNlLCJpc0RlbGV0ZWQiOmZhbHNlLCJzaWdudXBBcHBsaWNhdGlvbiI6IkNsdXN0ZXIiLCJoYXNoIjoiIiwicHJlSGFzaCI6IiIsImFjY2Vzc0tleSI6IiIsImFjY2Vzc1NlY3JldCI6IiIsImdpdGh1YiI6IiIsImdvb2dsZSI6IiIsInFxIjoiIiwid2VjaGF0IjoiIiwiZmFjZWJvb2siOiIiLCJkaW5ndGFsayI6IiIsIndlaWJvIjoiIiwiZ2l0ZWUiOiIiLCJsaW5rZWRpbiI6IiIsIndlY29tIjoiIiwibGFyayI6IiIsImdpdGxhYiI6IiIsImNyZWF0ZWRJcCI6IiIsImxhc3RTaWduaW5UaW1lIjoiIiwibGFzdFNpZ25pbklwIjoiIiwicHJlZmVycmVkTWZhVHlwZSI6IiIsInJlY292ZXJ5Q29kZXMiOm51bGwsInRvdHBTZWNyZXQiOiIiLCJtZmFQaG9uZUVuYWJsZWQiOmZhbHNlLCJtZmFFbWFpbEVuYWJsZWQiOmZhbHNlLCJsZGFwIjoiIiwicHJvcGVydGllcyI6e30sInJvbGVzIjpbXSwicGVybWlzc2lvbnMiOltdLCJncm91cHMiOltdLCJsYXN0U2lnbmluV3JvbmdUaW1lIjoiIiwic2lnbmluV3JvbmdUaW1lcyI6MCwibWFuYWdlZEFjY291bnRzIjpudWxsLCJ0b2tlblR5cGUiOiJhY2Nlc3MtdG9rZW4iLCJ0YWciOiJzdGFmZiIsInNjb3BlIjoicmVhZCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsInN1YiI6ImFlYzI5NTBhLTkzMTEtNGM2Yy1iNzBiLTAyZGIzOTA5ZmQ4NCIsImF1ZCI6WyJlOTUzNjg2ZjA0ZTcwNTViNjk4YiJdLCJleHAiOjE3MzMxNjQ4NDMsIm5iZiI6MTczMjU2MDA0MywiaWF0IjoxNzMyNTYwMDQzLCJqdGkiOiJhZG1pbi9iOTgzODcyOS0yODk3LTQyMTAtOGNjZS0yN2ZkZDMxNDhhMmQifQ.HAd0GfUz3gBkOU02cu4JC7LK9evf5bmvC5KE6S1DvodG1-JlUvKm3UrxeJEQh_bPpGhybJSxTYiQT-_poQ2Erw
1 change: 1 addition & 0 deletions src/authn/testdata/tok_es384.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJhbGciOiJFUzM4NCIsImtpZCI6ImNlcnRfejZ0d3FiIiwidHlwIjoiSldUIn0.eyJvd25lciI6Ikt1YmVybmV0ZXMiLCJuYW1lIjoidXNlcjEiLCJjcmVhdGVkVGltZSI6IjIwMjQtMTEtMTRUMjM6NTA6MTYrMDM6MDAiLCJ1cGRhdGVkVGltZSI6IjIwMjQtMTEtMjVUMTg6MzY6MjVaIiwiZGVsZXRlZFRpbWUiOiIiLCJpZCI6ImFlYzI5NTBhLTkzMTEtNGM2Yy1iNzBiLTAyZGIzOTA5ZmQ4NCIsInR5cGUiOiJub3JtYWwtdXNlciIsInBhc3N3b3JkIjoiIiwicGFzc3dvcmRTYWx0IjoiIiwicGFzc3dvcmRUeXBlIjoicGxhaW4iLCJkaXNwbGF5TmFtZSI6InVzZXIxIiwiZmlyc3ROYW1lIjoiIiwibGFzdE5hbWUiOiIiLCJhdmF0YXIiOiJodHRwczovL2Nkbi5jYXNiaW4ub3JnL2ltZy9jYXNiaW4uc3ZnIiwiYXZhdGFyVHlwZSI6IiIsInBlcm1hbmVudEF2YXRhciI6IiIsImVtYWlsIjoiZHA4dTRhQGV4YW1wbGUuY29tIiwiZW1haWxWZXJpZmllZCI6ZmFsc2UsInBob25lIjoiODQ2NjQ2MTcxNTYiLCJjb3VudHJ5Q29kZSI6IlVTIiwicmVnaW9uIjoiIiwibG9jYXRpb24iOiIiLCJhZGRyZXNzIjpbXSwiYWZmaWxpYXRpb24iOiJFeGFtcGxlIEluYy4iLCJ0aXRsZSI6IiIsImlkQ2FyZFR5cGUiOiIiLCJpZENhcmQiOiIiLCJob21lcGFnZSI6IiIsImJpbyI6IiIsImxhbmd1YWdlIjoiIiwiZ2VuZGVyIjoiIiwiYmlydGhkYXkiOiIiLCJlZHVjYXRpb24iOiIiLCJzY29yZSI6MjAwMCwia2FybWEiOjAsInJhbmtpbmciOjIsImlzRGVmYXVsdEF2YXRhciI6ZmFsc2UsImlzT25saW5lIjpmYWxzZSwiaXNBZG1pbiI6dHJ1ZSwiaXNGb3JiaWRkZW4iOmZhbHNlLCJpc0RlbGV0ZWQiOmZhbHNlLCJzaWdudXBBcHBsaWNhdGlvbiI6IkNsdXN0ZXIiLCJoYXNoIjoiIiwicHJlSGFzaCI6IiIsImFjY2Vzc0tleSI6IiIsImFjY2Vzc1NlY3JldCI6IiIsImdpdGh1YiI6IiIsImdvb2dsZSI6IiIsInFxIjoiIiwid2VjaGF0IjoiIiwiZmFjZWJvb2siOiIiLCJkaW5ndGFsayI6IiIsIndlaWJvIjoiIiwiZ2l0ZWUiOiIiLCJsaW5rZWRpbiI6IiIsIndlY29tIjoiIiwibGFyayI6IiIsImdpdGxhYiI6IiIsImNyZWF0ZWRJcCI6IiIsImxhc3RTaWduaW5UaW1lIjoiIiwibGFzdFNpZ25pbklwIjoiIiwicHJlZmVycmVkTWZhVHlwZSI6IiIsInJlY292ZXJ5Q29kZXMiOm51bGwsInRvdHBTZWNyZXQiOiIiLCJtZmFQaG9uZUVuYWJsZWQiOmZhbHNlLCJtZmFFbWFpbEVuYWJsZWQiOmZhbHNlLCJsZGFwIjoiIiwicHJvcGVydGllcyI6e30sInJvbGVzIjpbXSwicGVybWlzc2lvbnMiOltdLCJncm91cHMiOltdLCJsYXN0U2lnbmluV3JvbmdUaW1lIjoiIiwic2lnbmluV3JvbmdUaW1lcyI6MCwibWFuYWdlZEFjY291bnRzIjpudWxsLCJ0b2tlblR5cGUiOiJhY2Nlc3MtdG9rZW4iLCJub25jZSI6IjdaUDBOTUhpN3BEcyIsInRhZyI6InN0YWZmIiwic2NvcGUiOiJyZWFkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwic3ViIjoiYWVjMjk1MGEtOTMxMS00YzZjLWI3MGItMDJkYjM5MDlmZDg0IiwiYXVkIjpbImU5NTM2ODZmMDRlNzA1NWI2OThiIl0sImV4cCI6MTczMzI1OTY5NiwibmJmIjoxNzMyNjU0ODk2LCJpYXQiOjE3MzI2NTQ4OTYsImp0aSI6ImFkbWluL2EzYWVkMmJhLWJhMmMtNDliYi1iYmMxLTQ3NTdjM2NhMTI2OCJ9.LqeNfXxRu_FTVBcqp12nRHAtwxZEOFtF7eTpvKsb2cD_Pv-m1-bP7NJUszpRKmzw3NvsYWabVVhdAe-ITa_bI5ZbCr2Rq3vwPsWIDhn3aLzr2OudcNqD5Ox7fLxtMmZL
1 change: 1 addition & 0 deletions src/authn/testdata/tok_rs512.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJhbGciOiJSUzUxMiIsImtpZCI6ImNlcnQtYnVpbHQtaW4iLCJ0eXAiOiJKV1QifQ.eyJvd25lciI6Ikt1YmVybmV0ZXMiLCJuYW1lIjoidXNlcjEiLCJjcmVhdGVkVGltZSI6IjIwMjQtMTEtMTRUMjM6NTA6MTYrMDM6MDAiLCJ1cGRhdGVkVGltZSI6IjIwMjQtMTEtMjVUMTg6MzY6MjVaIiwiZGVsZXRlZFRpbWUiOiIiLCJpZCI6ImFlYzI5NTBhLTkzMTEtNGM2Yy1iNzBiLTAyZGIzOTA5ZmQ4NCIsInR5cGUiOiJub3JtYWwtdXNlciIsInBhc3N3b3JkIjoiIiwicGFzc3dvcmRTYWx0IjoiIiwicGFzc3dvcmRUeXBlIjoicGxhaW4iLCJkaXNwbGF5TmFtZSI6InVzZXIxIiwiZmlyc3ROYW1lIjoiIiwibGFzdE5hbWUiOiIiLCJhdmF0YXIiOiJodHRwczovL2Nkbi5jYXNiaW4ub3JnL2ltZy9jYXNiaW4uc3ZnIiwiYXZhdGFyVHlwZSI6IiIsInBlcm1hbmVudEF2YXRhciI6IiIsImVtYWlsIjoiZHA4dTRhQGV4YW1wbGUuY29tIiwiZW1haWxWZXJpZmllZCI6ZmFsc2UsInBob25lIjoiODQ2NjQ2MTcxNTYiLCJjb3VudHJ5Q29kZSI6IlVTIiwicmVnaW9uIjoiIiwibG9jYXRpb24iOiIiLCJhZGRyZXNzIjpbXSwiYWZmaWxpYXRpb24iOiJFeGFtcGxlIEluYy4iLCJ0aXRsZSI6IiIsImlkQ2FyZFR5cGUiOiIiLCJpZENhcmQiOiIiLCJob21lcGFnZSI6IiIsImJpbyI6IiIsImxhbmd1YWdlIjoiIiwiZ2VuZGVyIjoiIiwiYmlydGhkYXkiOiIiLCJlZHVjYXRpb24iOiIiLCJzY29yZSI6MjAwMCwia2FybWEiOjAsInJhbmtpbmciOjIsImlzRGVmYXVsdEF2YXRhciI6ZmFsc2UsImlzT25saW5lIjpmYWxzZSwiaXNBZG1pbiI6dHJ1ZSwiaXNGb3JiaWRkZW4iOmZhbHNlLCJpc0RlbGV0ZWQiOmZhbHNlLCJzaWdudXBBcHBsaWNhdGlvbiI6IkNsdXN0ZXIiLCJoYXNoIjoiIiwicHJlSGFzaCI6IiIsImFjY2Vzc0tleSI6IiIsImFjY2Vzc1NlY3JldCI6IiIsImdpdGh1YiI6IiIsImdvb2dsZSI6IiIsInFxIjoiIiwid2VjaGF0IjoiIiwiZmFjZWJvb2siOiIiLCJkaW5ndGFsayI6IiIsIndlaWJvIjoiIiwiZ2l0ZWUiOiIiLCJsaW5rZWRpbiI6IiIsIndlY29tIjoiIiwibGFyayI6IiIsImdpdGxhYiI6IiIsImNyZWF0ZWRJcCI6IiIsImxhc3RTaWduaW5UaW1lIjoiIiwibGFzdFNpZ25pbklwIjoiIiwicHJlZmVycmVkTWZhVHlwZSI6IiIsInJlY292ZXJ5Q29kZXMiOm51bGwsInRvdHBTZWNyZXQiOiIiLCJtZmFQaG9uZUVuYWJsZWQiOmZhbHNlLCJtZmFFbWFpbEVuYWJsZWQiOmZhbHNlLCJsZGFwIjoiIiwicHJvcGVydGllcyI6e30sInJvbGVzIjpbXSwicGVybWlzc2lvbnMiOltdLCJncm91cHMiOltdLCJsYXN0U2lnbmluV3JvbmdUaW1lIjoiIiwic2lnbmluV3JvbmdUaW1lcyI6MCwibWFuYWdlZEFjY291bnRzIjpudWxsLCJ0b2tlblR5cGUiOiJhY2Nlc3MtdG9rZW4iLCJub25jZSI6InJEeVZEQmNtSDhIeSIsInRhZyI6InN0YWZmIiwic2NvcGUiOiJyZWFkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwic3ViIjoiYWVjMjk1MGEtOTMxMS00YzZjLWI3MGItMDJkYjM5MDlmZDg0IiwiYXVkIjpbImU5NTM2ODZmMDRlNzA1NWI2OThiIl0sImV4cCI6MTczMzI2MDgwNywibmJmIjoxNzMyNjU2MDA3LCJpYXQiOjE3MzI2NTYwMDcsImp0aSI6ImFkbWluLzZlNWM2MzkxLTIyMzItNDFhOC05YjMxLTk0NTJmMDM1NDMxZiJ9.jDR9jcyxJaxuP-3YVOf12sHB-gaSDIYeVgYPjsU-Y0gfZls-wbvX2e2sddrCzeEbLKFoQnG9YBzaKK6VF4ePAIbjdfUzUy4Pp_Uckjq8tD1EdZUtieDay51508zvagXClMgyF_K8CvBy-kHpkGiMtH_lediHTQuUBYS9oMajzRP_TgUsQvf6KGshv_LJD4DFgjar9yWpkGBMxqdGLo17x_cO2K-6c8Wz53jxw0qP-GqXHhzhjlvcAe-WtFaFUkuYD-6nOprzM8vpqTiZ-WR1EjjgTq8j5iB4NUBamoPhrDcxF9x-pKZKjqAOQ20j8LXJHrwFRcrgX7zT5rnrpWZeZTqZ3N0s9SUQWt19yT3B-C6yCj6cEzmmRBFZWEciWSNsOUbbqdLwJwhyPsYRjne7-fXn545xk_vb1-bIqL0ntH0-DI2lfm9W0yAWWb8ezmYkInH8fVipMQkmLv8u3Ct0BasFQMYTs1KHBVZ5YbNdKuxcWs5kR6xVh5z6ZD-C48R4xqsa7_6GXLG3LYxZ6zoid7XVPm7CgBGhAQeRlSM_qOSUec62xSB1OFZo9jygp0zFrDi97BSDOPkbpGXCyvPEYv9IqBCVBLVcuFo8BNehRh-t3FKXm8mHoOP07XQHHxj9HjPr7Yxng_MBiJbJmmcDWHLlHZXOCMP1bQ-PN4k4uQo

0 comments on commit ae1e7b5

Please sign in to comment.