Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions paper-bin/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
extern crate paper;

use paper::{configuration::Configuration, model::APIConfiguration, model::API};
use paper::{configuration::Configuration, model::API};

#[macro_use]
extern crate clap;
Expand All @@ -14,10 +14,10 @@ async fn main() {
let mut configuration = Configuration {
username: None,
password: None,
api_configuration: APIConfiguration {
api: API::HamburgPublic,
base_url: "https://www.buecherhallen.de".to_string(),
catalog_url: "https://www.buecherhallen.de".to_string(),
api_configuration: API::Opc4v2_13Vzg6 {
base_url: "https://lbssbb.gbv.de".to_string(),
catalog_url: "https://lbssbb.gbv.de".to_string(),
user_query_key: "1000".to_string(),
},
};

Expand Down
11 changes: 8 additions & 3 deletions paper/src/authenticators/opac_authenticator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,18 @@ pub(crate) struct OpacAuthenticator {

impl OpacAuthenticator {
pub(crate) async fn authenticate(&self, client: &Client) -> Result<bool, PaperError> {
println!("`OpacAuthenticator::authenticate`");
let username = self.configuration.username.clone().unwrap();
let password = self.configuration.password.clone().unwrap();
let login_url = self.configuration.login_url();
let login_url = self.configuration.api_configuration.login_url().unwrap();
let user_query_key = self
.configuration
.api_configuration
.user_query_key()
.unwrap();
let html_string = client
.post(login_url)
.query(&[
("USR", "1022"),
("USR", user_query_key.as_str()),
("BES", "1"),
("LAN", "DU"),
("username", username.as_str()),
Expand All @@ -25,6 +29,7 @@ impl OpacAuthenticator {
.await?
.text()
.await?;

let scraper = Opc4v2_13Vzg6AccountScraper {
configuration: self.configuration.clone(),
};
Expand Down
6 changes: 3 additions & 3 deletions paper/src/authenticators/public_hamburg_authenticator.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use super::{LoginResult, RawLoansPage};
use crate::configuration::Configuration;
use crate::error::PaperError;
use crate::model::Loans;
use crate::scrapers::public_hamburg::LoansScraper;
use crate::token_scraper::TokenScraper;
use crate::{configuration::Configuration};
use reqwest::{
header::{HeaderMap, HeaderValue},
Client,
Expand Down Expand Up @@ -69,7 +69,7 @@ impl PublicHamburgAuthenticator {
client: &Client,
) -> Result<Loans, PaperError> {
let token_scraper = TokenScraper {
api: self.configuration.api_configuration.api.clone(),
api: self.configuration.api_configuration.clone(),
};

let token = token_scraper.get_request_token(&client).await?;
Expand All @@ -90,7 +90,7 @@ impl PublicHamburgAuthenticator {
client: &Client,
) -> Result<String, PaperError> {
let token_scraper = TokenScraper {
api: self.configuration.api_configuration.api.clone(),
api: self.configuration.api_configuration.clone(),
};

let request_token = token_scraper.get_request_token(&client).await?;
Expand Down
4 changes: 2 additions & 2 deletions paper/src/authenticators/scrape_authenticator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ impl Authenticator {
}

async fn verify_credentials(&self) -> Result<ValidationStatus, PaperError> {
match self.configuration.api_configuration.api {
match self.configuration.api_configuration {
crate::model::API::HamburgPublic => {
let authenticator = PublicHamburgAuthenticator {
configuration: self.configuration.clone(),
Expand All @@ -30,7 +30,7 @@ impl Authenticator {
},
};
}
crate::model::API::Opc4v2_13Vzg6 => {
crate::model::API::Opc4v2_13Vzg6 { .. } => {
let opac_authenticator = OpacAuthenticator {
configuration: self.configuration.clone(),
};
Expand Down
30 changes: 6 additions & 24 deletions paper/src/configuration.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,10 @@
use crate::model::APIConfiguration;
use crate::model::API;

#[derive(Debug, uniffi::Record, Clone)]
pub struct Configuration {
pub username: Option<String>,
pub password: Option<String>,
pub api_configuration: APIConfiguration,
}

impl Configuration {
pub fn login_url(&self) -> String {
format!("{}/LBS_WEB/login", self.api_configuration.base_url)
}

pub fn base_url(&self) -> String {
self.api_configuration.base_url.clone()
}

pub fn session_url(&self) -> String {
//https://kataloge.hh.gbv.de/LBS_WEB/borrower/loans.htm
format!(
"{}/LBS_WEB/borrower/loans.htm",
self.api_configuration.base_url
)
}
pub api_configuration: API,
}

#[cfg(test)]
Expand All @@ -33,18 +15,18 @@ mod tests {

#[test]
fn test_login_url() {
let api_config = APIConfiguration {
api: API::Opc4v2_13Vzg6,
let api_config = API::Opc4v2_13Vzg6 {
base_url: String::from("https://example.com"),
catalog_url: String::from("https://example.com"),
user_query_key: String::from("1022"),
};
let config = Configuration {
username: Some(String::from("user")),
password: Some(String::from("pass")),
api_configuration: api_config,
};

let expected_url = "https://example.com/LBS_WEB/login";
assert_eq!(config.login_url(), expected_url);
assert_eq!(config.username, Some(String::from("user")));
assert_eq!(config.password, Some(String::from("pass")));
}
}
14 changes: 5 additions & 9 deletions paper/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::configuration::Configuration;
use crate::model::{Account, SearchResultList, SearchResultListItem};

extern crate indicatif;
use crate::scrapers::public_hamburg::HamburgPublicSearchScraper;
use crate::scrapers::SearchScraper;
use console::{style, Term};
use dialoguer::{theme::ColorfulTheme, Input, Select};
use indicatif::ProgressBar;
Expand Down Expand Up @@ -43,7 +43,7 @@ impl Paper {
.build()
.unwrap();
let account = scraper
.public_hamburg_fetch_on_current_runtime(&client)
.opc4v2_13vzg6_fetch_on_current_runtime(&client)
.await
.unwrap();

Expand Down Expand Up @@ -102,7 +102,7 @@ impl Paper {
.interact_text()
.unwrap();

let search = HamburgPublicSearchScraper {};
let search = SearchScraper::new(self.configuration.api_configuration.clone());

match search.search(&input, None).await {
Ok(result) => Self::print_search_result(result),
Expand Down Expand Up @@ -161,19 +161,15 @@ impl Paper {
#[cfg(test)]
mod tests {

use model::{APIConfiguration, API};
use model::API;

use super::*;
#[test]
fn test_with_config() {
let config = Configuration {
username: Some("abc".to_string()),
password: Some("123".to_string()),
api_configuration: APIConfiguration {
api: API::HamburgPublic,
base_url: "https://www.buecherhallen.de".to_string(),
catalog_url: "https://catalog.buecherhallen.de".to_string(),
},
api_configuration: API::HamburgPublic,
};
let paper = Paper::with_config(config);
assert_eq!(paper.configuration.username, Some("abc".to_string()));
Expand Down
85 changes: 83 additions & 2 deletions paper/src/model/api.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,86 @@
#[derive(uniffi::Enum, Debug, Clone)]
#[derive(uniffi::Enum, Clone, Debug, PartialEq)]
pub enum API {
HamburgPublic,
Opc4v2_13Vzg6,
Opc4v2_13Vzg6 {
base_url: String,
catalog_url: String,
user_query_key: String,
},
}

impl API {
pub fn base_url(&self) -> String {
match self {
API::HamburgPublic => "https://www.buecherhallen.de".to_string(),
API::Opc4v2_13Vzg6 { base_url, .. } => base_url.clone(),
}
}

pub fn catalog_url(&self) -> String {
match self {
API::HamburgPublic => "https://buecherhallen.de".to_string(),
API::Opc4v2_13Vzg6 { catalog_url, .. } => catalog_url.clone(),
}
}

pub fn login_url(&self) -> Option<String> {
match self {
API::HamburgPublic => None,
API::Opc4v2_13Vzg6 { .. } => Some(format!("{}/LBS_WEB/login", self.base_url().clone())),
}
}

pub fn session_url(&self) -> Option<String> {
//https://kataloge.hh.gbv.de/LBS_WEB/borrower/loans.htm
match self {
API::HamburgPublic => None,
API::Opc4v2_13Vzg6 { .. } => Some(format!(
"{}/LBS_WEB/borrower/loans.htm",
self.base_url().clone()
)),
}
}

pub fn user_query_key(&self) -> Option<String> {
match self {
API::HamburgPublic => None,
API::Opc4v2_13Vzg6 { user_query_key, .. } => Some(user_query_key.clone()),
}
}
}

#[cfg(test)]
mod tests {
use crate::model::API;

#[test]
fn test_login_url() {
let api_config = API::Opc4v2_13Vzg6 {
base_url: String::from("https://example.com"),
catalog_url: String::from("https://example.com"),
user_query_key: String::from("1000"),
};

let expected_url = "https://example.com/LBS_WEB/login";
assert_eq!(api_config.login_url(), Some(expected_url.to_string()));
}

#[test]
fn test_user_query_key() {
let api_config = API::Opc4v2_13Vzg6 {
base_url: String::from("https://example.com"),
catalog_url: String::from("https://example.com"),
user_query_key: String::from("1000"),
};

let expected_key = "1000";
assert_eq!(api_config.user_query_key(), Some(expected_key.to_string()));
}

#[test]
fn test_user_query_key_none() {
let api_config = API::HamburgPublic;

assert_eq!(api_config.user_query_key(), None);
}
}
8 changes: 0 additions & 8 deletions paper/src/model/api_configuration.rs

This file was deleted.

11 changes: 11 additions & 0 deletions paper/src/model/library.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use super::API;

#[derive(Debug, Clone, PartialEq, uniffi::Record)]
pub struct Library {
pub identifier: String,
pub name: String,
pub subtitle: String,
pub api: API,
pub enabled_for_search: bool,
pub enabled_for_login: bool,
}
Loading