diff --git a/src/auth/login.rs b/src/auth/login.rs new file mode 100644 index 0000000..c7716c8 --- /dev/null +++ b/src/auth/login.rs @@ -0,0 +1,22 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct LoginSuccess { + #[serde(rename = "bak:UserId")] + pub user_id: String, + pub access_token: String, + pub token_type: TokenType, + pub expires_in: i64, + pub refresh_token: String, + #[serde(rename = "bak:ApiVersion")] + pub api_version: String, + #[serde(rename = "bak:AppVersion")] + pub app_version: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum TokenType { + Bearer, +} diff --git a/src/auth/mod.rs b/src/auth/mod.rs new file mode 100644 index 0000000..6da0d2a --- /dev/null +++ b/src/auth/mod.rs @@ -0,0 +1,7 @@ +mod login; +mod open_id_discovery; +mod user_jwt_claim; + +pub use login::{LoginSuccess, TokenType}; +pub use open_id_discovery::OpenIdDiscovery; +pub use user_jwt_claim::UserJwtClaim; diff --git a/src/auth/open_id_discovery.rs b/src/auth/open_id_discovery.rs new file mode 100644 index 0000000..bf063f5 --- /dev/null +++ b/src/auth/open_id_discovery.rs @@ -0,0 +1,24 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct OpenIdDiscovery { + pub issuer: String, + pub authorization_endpoint: String, + pub token_endpoint: String, + pub userinfo_endpoint: String, + pub jwks_uri: String, + pub grant_types_supported: Vec, + pub response_types_supported: Vec, + pub response_modes_supported: Vec, + pub scopes_supported: Vec, + pub claims_supported: Vec, + pub id_token_signing_alg_values_supported: Vec, + pub code_challenge_methods_supported: Vec, + pub subject_types_supported: Vec, + pub token_endpoint_auth_methods_supported: Vec, + pub claims_parameter_supported: bool, + pub request_parameter_supported: bool, + pub request_uri_parameter_supported: bool, + pub authorization_response_iss_parameter_supported: bool, +} diff --git a/src/auth/user_jwt_claim.rs b/src/auth/user_jwt_claim.rs new file mode 100644 index 0000000..16c77ab --- /dev/null +++ b/src/auth/user_jwt_claim.rs @@ -0,0 +1,42 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub struct UserJwtClaim { + #[serde(rename = "Bakalari.AccountType")] + pub account_type: String, + #[serde(rename = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")] + pub xmlnameidentifier: Option, + #[serde(rename = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name")] + pub xmlname: Option, + #[serde(rename = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")] + pub xmlupn: Option, + #[serde(rename = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender")] + pub xmlgender: Option, + #[serde(rename = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth")] + pub xmldateofbirth: Option, + #[serde(rename = "Bakalari.UserType")] + pub user_type: String, + #[serde(rename = "Bakalari.SessionId")] + pub session_id: String, + #[serde(rename = "Bakalari.TimeStamp")] + pub time_stamp: String, + #[serde(rename = "Bakalari.PersonIdWithType")] + pub person_id_with_type: String, + #[serde(rename = "Bakalari.EvidNumber")] + pub evid_number: String, + #[serde(rename = "Bakalari.MachineName")] + pub machine_name: String, + pub sub: String, + pub name: String, + pub oi_prst: String, + pub oi_au_id: String, + pub client_id: String, + pub oi_tkn_id: String, + pub aud: String, + pub scope: String, + pub jti: String, + pub exp: i64, + pub iss: String, + pub iat: i64, +} diff --git a/src/lib.rs b/src/lib.rs index 7662e2a..dbaec2d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ mod absence; mod api_info; mod attachment; //campaign +mod auth; mod campaign; mod error; mod events; @@ -24,6 +25,7 @@ mod user; //TODOS pub use absence::{AbsenceDay, StudentAbsenceOverviewResponse, SubjectAbsence}; pub use api_info::ApiInfo; pub use attachment::AttachmentInfo; +pub use auth::*; pub use campaign::Campaign; pub use error::{Error, ModelState, StringArray}; pub use events::{Event, EventTime, EventType, Events}; diff --git a/src/user/modules.rs b/src/user/modules.rs index c995e59..cf33d53 100644 --- a/src/user/modules.rs +++ b/src/user/modules.rs @@ -3,47 +3,47 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "Module")] pub enum Module { - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Absence { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] AccessSystem { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Application { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Campaign { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Classbook { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Emergency { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Events { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Gdpr { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Homeworks { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Komens { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Marking { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Marks { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Payments { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Semester { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Subjects { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Substitutions { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Teaching { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Timetable { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] Unknown { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] UserAccount { rights: Vec }, - #[serde(rename_all="PascalCase")] + #[serde(rename_all = "PascalCase")] WebBased { rights: Vec }, } diff --git a/tracker.md b/tracker.md index a9fb0fe..1c2135a 100644 --- a/tracker.md +++ b/tracker.md @@ -5,6 +5,7 @@ - [ ] campaign error - [ ] class book - [x] events +- [x] auth - [ ] error - [x] gdpr - [x] homeworks