darkwing/server/services/browser_profile_services/config/
passwords.rsuse std::collections::HashMap;
use serde::{Deserialize, Serialize};
use super::{consts::WEBSITE_URLS, FromStartRequest, Navigator, Screen};
use crate::{
database::browser_profile::MainWebsite,
server::{
dtos::{
browser_profile_dto::BrowserProfileFullData, start_dto::StartRequest,
},
error::Error,
},
};
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct Password {
pub(super) username: String,
pub(super) password: String,
}
pub type Passwords = HashMap<String, Password>;
impl From<(String, String)> for Password {
fn from((login, password): (String, String)) -> Self {
Password {
username: login,
password,
}
}
}
impl FromStartRequest<Option<Passwords>> for Option<Passwords> {
fn from_start_request(
bp: &BrowserProfileFullData,
_request: &StartRequest,
_navigator: &Navigator,
_screen: &Screen,
_token: &str,
) -> Result<Self, Error> {
assert_all_websites_are_present();
match (bp.login.clone(), bp.password.clone()) {
(Some(login), Some(password)) => match WEBSITE_URLS.get(&bp.main_website)
{
Some(url) => {
let mut map = HashMap::new();
map.insert(url.to_string(), (login, password).into());
Ok(Some(map))
}
None => Ok(None),
},
_ => Ok(None),
}
}
}
fn assert_all_websites_are_present() {
#[cfg(any(debug_assertions, test))]
{
let mut contains = true;
let all_websites = MainWebsite::all().into_iter();
for website in all_websites {
contains &= WEBSITE_URLS.contains_key(&website);
}
assert!(contains);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_assert_all_websites_are_present() {
assert_all_websites_are_present();
}
}