From 0f91acd983d5b67695a5e4ce3acbaf1099a30e5b Mon Sep 17 00:00:00 2001 From: Marc Herschel Date: Fri, 3 Apr 2020 22:51:01 +0200 Subject: [PATCH] 1.3.7 <=> TVDB_API_KEY variable added; TVDB_AUTH_STRING deprecated --- CHANGELOG.md | 5 +++ README.md | 15 ++++++--- VERSION | 2 +- build.gradle | 2 +- img/unraidv3.PNG | Bin 36364 -> 34277 bytes src/main/java/updatetool/Main.java | 9 +++--- src/main/java/updatetool/common/TvdbApi.java | 10 +++--- .../imdb/ImdbDockerImplementation.java | 29 ++++++++++-------- .../java/updatetool/imdb/ImdbPipeline.java | 9 +++--- src/main/resources/VERSION | 2 +- 10 files changed, 47 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cdef9b..e968217 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.7 + - Deprecated environment variable TVDB_AUTH_STRING as TVDB API only requires the API Key + - TVDB_AUTH_STRING can still be used, the API Key will be extracted automatically + - New variable TVDB_API_KEY introduced which only takes the TVDB API Key + ## 1.3.6 - Asynchronous resolvement => faster HTTP processing with APIs - If TMDB capability exists (TMDB API key set) the tool will also go after movie libraries with the TMDB agent (com.plexapp.agents.themoviedb) diff --git a/README.md b/README.md index b84d482..4a8914c 100644 --- a/README.md +++ b/README.md @@ -48,10 +48,17 @@ Docker is on [dockerhub](https://hub.docker.com/r/mynttt/updatetool) | [UnRaid i Name | Description :-------------------------:|:-------------------------:| TMDB_API_KEY|Enables TMDB Movie/Series library processing -TVDB_AUTH_STRING|Enables TVDB Series library processing +TVDB_API_KEY|Enables TVDB Series library processing IGNORE_LIBS|Ignore libraries with certain IDs ([more here](#Ignore-libraries-from-being-updated)) CAPABILITIES|Custom flags for the tool ([more here](#supply-custom-capability-flags)) +Deprecated variables can still be used although their usage is discouraged. + +### Deprecated Environment Variables +Name | Description | Deprecation +:-------------------------:|:-------------------------:|:-------------------------:| +TVDB_AUTH_STRING|Enables TVDB Series library processing|API Key is enough for this tool to work + ## To run your docker: ```bash @@ -76,7 +83,7 @@ docker run -dit -e RUN_EVERY_N_HOURS=12 \ docker run -dit -e RUN_EVERY_N_HOURS=12 \ -e TMDB_API_KEY=yourkey \ - -e TVDB_AUTH_STRING="tvdbusername;tvdbuserid;tvdbapikey" \ + -e TVDB_API_KEY=tvdbapikey \ -v "/mnt/data/Plex Media Server":/plexdata \ -v "/mnt/data/imdpupdaterconfig":/config \ mynttt/updatetool @@ -92,7 +99,7 @@ docker run -dit -e TMDB_API_KEY=yourkey \ # Three items are required to auth with TVDB username, userkey, apikey # Supply these as semicolon seperated values. Example: username;DAWIDK9CJKWFJAWKF;e33914feabd52e8192011b0ce6c8 - -e TVDB_AUTH_STRING="tvdbusername;tvdbuserkey;tvdbapikey" \ + -e TVDB_API_KEY=tvdbapikey \ # The plex data root (that contains Plug-ins, Metadata, ... # https://support.plex.tv/articles/202915258-where-is-the-plex-media-server-data-directory-located/ -v "/mnt/data/Plex Media Server":/plexdata \ @@ -101,7 +108,7 @@ docker run -dit mynttt/updatetool ``` -[TVDB User Key](https://thetvdb.com/dashboard/account/editinfo) - [TVDB API Key](https://thetvdb.com/dashboard/account/apikey) +[TVDB API Key](https://thetvdb.com/dashboard/account/apikey) *"/mnt/data/Plex Media Server" and "/mnt/data/imdpupdaterconfig" are just sample paths! Set your own paths there or it will probably not work!* diff --git a/VERSION b/VERSION index 6f96ed0..8ed486a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.6 \ No newline at end of file +1.3.7 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9acf83a..5fb00e9 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'eclipse' } -version = '1.3.6' +version = '1.3.7' sourceCompatibility = '11' new File(projectDir, "VERSION").text = version; diff --git a/img/unraidv3.PNG b/img/unraidv3.PNG index f3c5b63c771fc829d953c3a3b82bbc85da5ece49..e9ce9931a5f634e9ba579039d53c912fd0bf5ca5 100644 GIT binary patch literal 34277 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 diff --git a/src/main/java/updatetool/Main.java b/src/main/java/updatetool/Main.java index 18bfe89..c617e3c 100644 --- a/src/main/java/updatetool/Main.java +++ b/src/main/java/updatetool/Main.java @@ -49,8 +49,7 @@ public enum Implementations { "PLEX_DATA_DIR: Used for the data directory of plex", "The following environment variables are optional and enhance the tool in certain ways.", "(Optional) TMDB_API_KEY: Used to convert TMDB matched items to IMDB items. The fallback will only be available if this is set.", - "(Optional) TVDB_AUTH_STRING: Used to auth with the TVDB API. Must be entered as a ';' seperated string of username, userid, apikey", - " Example: username;DAWIDK9CJKWFJAWKF;e33914feabd52e8192011b0ce6c8", + "(Optional) TVDB_API_KEY: Used to auth with the TVDB API.", "(Optional) IGNORE_LIBS: Ignore libraries from being touched by this tool by supplying a set of library ids as a semicolon ';' seperated string.", " Example: Ignoring 1 => IGNORE_LIBS=1 | Ignoring 1, 2, 3 => IGNORE_LIBS=1;2;3", "(Optional) CAPABILITIES: Specify special settings for the tool. Must be entered as a ';' seperated string.", @@ -172,10 +171,10 @@ public static void testApiTmdb(String apikeyTmdb) throws Exception { genericApiTest(api); } - public static void testApiTvdb(String[] credentials) { - Logger.info("Testing TVDB API authorization: username={} | userkey={} | apikey={}", credentials[0], credentials[1], credentials[2]); + public static void testApiTvdb(String key) { + Logger.info("Testing TVDB API authorization: apikey={}", key); try { - new TvdbApi(credentials); + new TvdbApi(key); } catch(ApiCallFailedException e) { Logger.error("API Test failed: " + e.getMessage()); Logger.error("Keys available under: https://thetvdb.com/"); diff --git a/src/main/java/updatetool/common/TvdbApi.java b/src/main/java/updatetool/common/TvdbApi.java index 2a6bb3e..2eaf04e 100644 --- a/src/main/java/updatetool/common/TvdbApi.java +++ b/src/main/java/updatetool/common/TvdbApi.java @@ -38,20 +38,18 @@ public String getImdbId() { } } - public TvdbApi(String[] credentials) throws ApiCallFailedException { + public TvdbApi(String key) throws ApiCallFailedException { super(); - authToken = "Bearer " + auth(credentials); + authToken = "Bearer " + auth(key); } private class Token { String token; }; - private String auth(String[] credentials) throws ApiCallFailedException { + private String auth(String key) throws ApiCallFailedException { try { var response = send( postJson(BASE_URL + "/login", gson.toJson(Map.of( - "username", credentials[0], - "userkey", credentials[1], - "apikey", credentials[2]) + "apikey", key) )) ); if(response.statusCode() != 200) { diff --git a/src/main/java/updatetool/imdb/ImdbDockerImplementation.java b/src/main/java/updatetool/imdb/ImdbDockerImplementation.java index defae75..242788a 100644 --- a/src/main/java/updatetool/imdb/ImdbDockerImplementation.java +++ b/src/main/java/updatetool/imdb/ImdbDockerImplementation.java @@ -38,16 +38,14 @@ public class ImdbDockerImplementation implements Implementation { private static final Set IGNORE_LIBRARIES = new HashSet<>(); public int RUN_EVERY_N_HOUR = 12; - private String apikeyTmdb; - - //Format: ;; for ENV - private String[] apiauthTvdb; + private String apikeyTmdb, apiauthTvdb; private Path plexdata; @Override public void invoke(String[] args) throws Exception { apikeyTmdb = System.getenv("TMDB_API_KEY"); - String tvdbAuth = System.getenv("TVDB_AUTH_STRING"); + String tvdbAuthLegacy = System.getenv("TVDB_AUTH_STRING"); + String tvdbApiKey = System.getenv("TVDB_API_KEY"); String data = System.getenv("PLEX_DATA_DIR"); String ignore = System.getenv("IGNORE_LIBS"); String capabilitiesEnv = System.getenv("CAPABILITIES"); @@ -112,19 +110,24 @@ public void invoke(String[] args) throws Exception { Logger.info("TMDB API key enabled TMDB <=> IMDB matching. Will process TMDB backed Movie and TV Series libraries and TMDB orphans."); } - if(tvdbAuth == null || tvdbAuth.isBlank()) { - Logger.info("No TVDB API authorization string detected. Will process TVDB backed TV Series libraries."); - capabilities.remove(Capabilities.TVDB); - } else { - String[] info = tvdbAuth.split(";"); + if(tvdbAuthLegacy != null && !tvdbAuthLegacy.isBlank()) { + Logger.warn("Don't use legacy environment variable TVDB_AUTH_STRING. Use TVDB_API_KEY instead by only providing the TVDB API key."); + String[] info = tvdbAuthLegacy.split(";"); if(info.length == 3) { - Main.testApiTvdb(info); - apiauthTvdb = info; - Logger.info("TVDB API authorization enabled IMDB rating update for TV Series with the TVDB agent."); + tvdbApiKey = info[2]; } else { Logger.error("Invalid TVDB API authorization string given. Must contain 3 items seperated by a ';'. Will ignore TV Series with the TVDB agent."); } } + + if(tvdbApiKey == null || tvdbApiKey.isBlank()) { + Logger.info("No TVDB API authorization string detected. Will process TVDB backed TV Series libraries."); + capabilities.remove(Capabilities.TVDB); + } else { + Main.testApiTvdb(tvdbApiKey); + apiauthTvdb = tvdbApiKey; + Logger.info("TVDB API authorization enabled IMDB rating update for TV Series with the TVDB agent."); + } if(args.length >= 2) { RUN_EVERY_N_HOUR = parseCommandInt(args[1], i -> i > 0, "Invalid parameter for: RUN_EVERY_N_HOUR (must be number and > 0)"); diff --git a/src/main/java/updatetool/imdb/ImdbPipeline.java b/src/main/java/updatetool/imdb/ImdbPipeline.java index eea7c1f..603b1c9 100644 --- a/src/main/java/updatetool/imdb/ImdbPipeline.java +++ b/src/main/java/updatetool/imdb/ImdbPipeline.java @@ -64,13 +64,12 @@ public class ImdbPipeline extends Pipeline { public static class ImdbPipelineConfiguration { private final EnumSet capabilities; - public final String tmdbApiKey, dbLocation; - public final String[] apiauthTvdb; + public final String tmdbApiKey, tvdbApiKey, dbLocation; public final Path metadataRoot; - public ImdbPipelineConfiguration(String tmdbApiKey, String[] apiauthTvdb, Path metadataRoot, String dbLocation, EnumSet capabilities) { + public ImdbPipelineConfiguration(String tmdbApiKey, String tvdbApiKey, Path metadataRoot, String dbLocation, EnumSet capabilities) { this.tmdbApiKey = tmdbApiKey; - this.apiauthTvdb = apiauthTvdb; + this.tvdbApiKey = tvdbApiKey; this.metadataRoot = metadataRoot; this.dbLocation = dbLocation; this.capabilities = capabilities; @@ -93,7 +92,7 @@ public ImdbPipeline(ImdbLibraryMetadata metadata, ExecutorService service, Map