1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
pub mod browser;
pub mod chromium;
pub mod firefox;
#[cfg(target_os = "macos")]
pub mod safari;

pub use browser::{cookies::LeetCodeCookies, Browser};
pub use chromium::{ChromiumBuilder, ChromiumGetter};
pub use firefox::{FirefoxBuilder, FirefoxGetter};
use miette::Result;

cfg_if::cfg_if!(
    if #[cfg(target_os = "macos")] {
        pub use safari::{SafariBuilder, SafariGetter};
    }
);

/// get csrf and session
///
/// * `borwser`: firefox, librewolf, edge, chrome
pub async fn get_cookie<T>(browser: T, host: &str) -> Result<LeetCodeCookies>
where
    T: Into<Browser> + Clone,
{
    let res = match browser.clone().into() {
        Browser::Firefox | Browser::Librewolf => {
            let getter = FirefoxBuilder::new(browser.into())
                .build()
                .await?;
            getter
                .get_session_csrf(host)
                .await?
        },

        #[cfg(target_os = "macos")]
        Browser::Safari => {
            let getter = safari::items::cookie::CookiesGetter::build::<&str>(None).await?;
            getter.get_session_csrf(host)
        },

        chromium => {
            let getter = ChromiumBuilder::new(chromium)
                .build()
                .await?;
            getter
                .get_cookies_session_csrf(host)
                .await?
        },
    };

    Ok(res)
}