Skip to content

Commit 9d09100

Browse files
committed
feat(backend): use api key for google books
Otherwise the project was getting rate limited.
1 parent b0ed55b commit 9d09100

File tree

7 files changed

+38
-13
lines changed

7 files changed

+38
-13
lines changed

.github/workflows/release.yml

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ jobs:
132132
APP_VERSION=${{ steps.required_args.outputs.APP_VERSION }}
133133
DEFAULT_TMDB_ACCESS_TOKEN=${{ secrets.DEFAULT_TMDB_ACCESS_TOKEN }}
134134
DEFAULT_MAL_CLIENT_ID=${{ secrets.DEFAULT_MAL_CLIENT_ID }}
135+
DEFAULT_GOOGLE_BOOKS_API_KEY=${{ secrets.DEFAULT_GOOGLE_BOOKS_API_KEY }}
135136
136137
upload-kodi-plugin:
137138
runs-on: ubuntu-20.04

Dockerfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,19 @@ ARG BUILD_PROFILE=release
3737
ARG APP_VERSION
3838
ARG DEFAULT_TMDB_ACCESS_TOKEN
3939
ARG DEFAULT_MAL_CLIENT_ID
40+
ARG DEFAULT_GOOGLE_BOOKS_API_KEY
4041
RUN test -n "$APP_VERSION" && \
4142
test -n "$DEFAULT_TMDB_ACCESS_TOKEN" && \
42-
test -n "$DEFAULT_MAL_CLIENT_ID"
43+
test -n "$DEFAULT_MAL_CLIENT_ID" && \
44+
test -n "$DEFAULT_GOOGLE_BOOKS_API_KEY"
4345
COPY --from=backend-planner /app/recipe.json recipe.json
4446
RUN cargo chef cook --profile $BUILD_PROFILE --recipe-path recipe.json
4547
COPY . .
4648
COPY --from=frontend-builder /app/apps/backend/templates ./apps/backend/templates
4749
RUN APP_VERSION=$APP_VERSION \
4850
DEFAULT_TMDB_ACCESS_TOKEN=$DEFAULT_TMDB_ACCESS_TOKEN \
4951
DEFAULT_MAL_CLIENT_ID=$DEFAULT_MAL_CLIENT_ID \
52+
DEFAULT_GOOGLE_BOOKS_API_KEY=$DEFAULT_GOOGLE_BOOKS_API_KEY \
5053
cargo build --profile ${BUILD_PROFILE} --bin ryot
5154
RUN cp -R /app/target/${BUILD_PROFILE}/ryot /app/ryot
5255

apps/backend/src/miscellaneous.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -3699,12 +3699,7 @@ impl MiscellaneousService {
36993699
}
37003700

37013701
pub async fn get_tmdb_non_media_service(&self) -> Result<NonMediaTmdbService> {
3702-
Ok(NonMediaTmdbService::new(
3703-
self.config.movies_and_shows.tmdb.access_token.clone(),
3704-
*self.timezone,
3705-
self.config.movies_and_shows.tmdb.locale.clone(),
3706-
)
3707-
.await)
3702+
Ok(NonMediaTmdbService::new(&self.config.movies_and_shows.tmdb, *self.timezone).await)
37083703
}
37093704

37103705
async fn get_non_metadata_provider(&self, source: MediaSource) -> Result<Provider> {

apps/backend/src/providers/google_books.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ use async_trait::async_trait;
33
use convert_case::{Case, Casing};
44
use database::{MediaLot, MediaSource};
55
use itertools::Itertools;
6-
use reqwest::Client;
6+
use reqwest::{
7+
header::{HeaderName, HeaderValue},
8+
Client,
9+
};
710
use rs_utils::convert_date_to_year;
811
use rust_decimal::Decimal;
912
use serde::{Deserialize, Serialize};
@@ -41,7 +44,13 @@ impl MediaProviderLanguages for GoogleBooksService {
4144

4245
impl GoogleBooksService {
4346
pub async fn new(config: &config::GoogleBooksConfig, page_limit: i32) -> Self {
44-
let client = get_base_http_client(URL, None);
47+
let client = get_base_http_client(
48+
URL,
49+
Some(vec![(
50+
HeaderName::from_static("x-goog-api-key"),
51+
HeaderValue::from_str(&config.api_key).unwrap(),
52+
)]),
53+
);
4554
Self {
4655
client,
4756
page_limit,

apps/backend/src/providers/tmdb.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -390,12 +390,12 @@ pub struct NonMediaTmdbService {
390390
}
391391

392392
impl NonMediaTmdbService {
393-
pub async fn new(access_token: String, timezone: chrono_tz::Tz, language: String) -> Self {
394-
let (client, settings) = get_client_config(URL, &access_token).await;
393+
pub async fn new(config: &config::TmdbConfig, timezone: chrono_tz::Tz) -> Self {
394+
let (client, settings) = get_client_config(URL, &config.access_token).await;
395395
Self {
396396
base: TmdbService {
397397
client,
398-
language,
398+
language: config.locale.clone(),
399399
settings,
400400
timezone,
401401
},

docs/includes/backend-config-schema.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ audio_books:
3232
books:
3333
# Settings related to Google Books.
3434
google_books:
35+
# The API key to be used for the Google Books API.
36+
# @envvar BOOKS_GOOGLE_BOOKS_API_KEY
37+
api_key: ""
38+
3539
# Whether to pass the raw query string to the search API.
3640
# @envvar BOOKS_GOOGLE_BOOKS_PASS_RAW_QUERY
3741
pass_raw_query: false

libs/config/src/lib.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ fn default_mal_client_id(_ctx: &()) -> Result<Option<String>, HandlerError> {
2323
Ok(Some(DEFAULT_MAL_CLIENT_ID.to_owned()))
2424
}
2525

26+
#[cfg(debug_assertions)]
27+
pub const DEFAULT_GOOGLE_BOOKS_API_KEY: &str =
28+
dotenvy_macro::dotenv!("DEFAULT_GOOGLE_BOOKS_API_KEY");
29+
#[cfg(not(debug_assertions))]
30+
pub const DEFAULT_GOOGLE_BOOKS_API_KEY: &str = env!("DEFAULT_GOOGLE_BOOKS_API_KEY");
31+
32+
fn default_google_books_api_key(_ctx: &()) -> Result<Option<String>, HandlerError> {
33+
Ok(Some(DEFAULT_GOOGLE_BOOKS_API_KEY.to_owned()))
34+
}
35+
2636
#[derive(Debug, Serialize, Deserialize, Clone, Config)]
2737
#[config(rename_all = "snake_case", env_prefix = "ANIME_AND_MANGA_MAL_")]
2838
pub struct MalConfig {
@@ -116,6 +126,9 @@ pub struct OpenlibraryConfig {
116126
#[derive(Debug, Serialize, Deserialize, Clone, Config)]
117127
#[config(rename_all = "snake_case", env_prefix = "BOOKS_GOOGLE_BOOKS_")]
118128
pub struct GoogleBooksConfig {
129+
/// The API key to be used for the Google Books API.
130+
#[setting(default = default_google_books_api_key)]
131+
pub api_key: String,
119132
/// Whether to pass the raw query string to the search API.
120133
pub pass_raw_query: bool,
121134
}
@@ -475,11 +488,11 @@ pub struct AppConfig {
475488
}
476489

477490
impl AppConfig {
478-
// TODO: Denote masked values via attribute
479491
pub fn masked_value(&self) -> Self {
480492
let gt = || "****".to_owned();
481493
let mut cl = self.clone();
482494
cl.anime_and_manga.mal.client_id = gt();
495+
cl.books.google_books.api_key = gt();
483496
cl.database.url = gt();
484497
cl.file_storage.s3_region = gt();
485498
cl.file_storage.s3_bucket_name = gt();

0 commit comments

Comments
 (0)