From 9d713f30cbd6063b05118a5b2ea0ae2a86952cae Mon Sep 17 00:00:00 2001 From: David Maisonave <47364845+David-Maisonave@users.noreply.github.com> Date: Sat, 17 Aug 2024 06:14:53 -0400 Subject: [PATCH] Added logic to pass API key to service automatically --- plugins/FileMonitor/README.md | 2 +- plugins/FileMonitor/StashPluginHelper.py | 8 +++++++- plugins/FileMonitor/filemonitor.py | 9 ++++++++- plugins/FileMonitor/filemonitor.yml | 2 +- plugins/FileMonitor/filemonitor_config.py | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/plugins/FileMonitor/README.md b/plugins/FileMonitor/README.md index 8ce36fe..3d1ecad 100644 --- a/plugins/FileMonitor/README.md +++ b/plugins/FileMonitor/README.md @@ -1,4 +1,4 @@ -# FileMonitor: Ver 0.8.4 (By David Maisonave) +# FileMonitor: Ver 0.8.5 (By David Maisonave) FileMonitor is a [Stash](https://github.com/stashapp/stash) plugin with the following two main features: - Updates Stash when any file changes occurs in the Stash library. - **Task Scheduler**: Runs scheduled task based on the scheduler configuration in **filemonitor_config.py**. diff --git a/plugins/FileMonitor/StashPluginHelper.py b/plugins/FileMonitor/StashPluginHelper.py index 109574f..c1b0600 100644 --- a/plugins/FileMonitor/StashPluginHelper.py +++ b/plugins/FileMonitor/StashPluginHelper.py @@ -41,6 +41,7 @@ class StashPluginHelper(StashInterface): FRAGMENT_SERVER = None STASHPATHSCONFIG = None STASH_PATHS = [] + API_KEY = None # printTo argument LOG_TO_FILE = 1 @@ -95,6 +96,7 @@ class StashPluginHelper(StashInterface): config = None, # From pluginName_config.py or pluginName_setting.py fragmentServer = None, stash_url = None, # Stash URL (endpoint URL) Example: http://localhost:9999 + apiKey = None, # API Key only needed when username and password set while running script via command line DebugTraceFieldName = "zzdebugTracing", DryRunFieldName = "zzdryRun", setStashLoggerAsPluginLogger = False): @@ -122,7 +124,6 @@ class StashPluginHelper(StashInterface): self.FRAGMENT_SERVER = {'Scheme': 'http', 'Host': '0.0.0.0', 'Port': '9999', 'SessionCookie': {'Name': 'session', 'Value': '', 'Path': '', 'Domain': '', 'Expires': '0001-01-01T00:00:00Z', 'RawExpires': '', 'MaxAge': 0, 'Secure': False, 'HttpOnly': False, 'SameSite': 0, 'Raw': '', 'Unparsed': None}, 'Dir': os.path.dirname(pathlib.Path(self.MAIN_SCRIPT_NAME).resolve().parent), 'PluginDir': pathlib.Path(self.MAIN_SCRIPT_NAME).resolve().parent} if debugTracing: self.DEBUG_TRACING = debugTracing - apiKey = "" if config: self.pluginConfig = config if 'apiKey' in self.pluginConfig and self.pluginConfig['apiKey'] != "": @@ -132,6 +133,9 @@ class StashPluginHelper(StashInterface): if DryRunFieldName in self.pluginConfig: self.DRY_RUN = self.pluginConfig[DryRunFieldName] + if apiKey and apiKey != "": + self.FRAGMENT_SERVER['ApiKey'] = apiKey + if len(sys.argv) > 1: RUNNING_IN_COMMAND_LINE_MODE = True if not debugTracing or not stash_url: @@ -181,6 +185,8 @@ class StashPluginHelper(StashInterface): self.DEBUG_TRACING = self.pluginSettings[DebugTraceFieldName] if DryRunFieldName in self.pluginSettings: self.DRY_RUN = self.pluginSettings[DryRunFieldName] + if 'apiKey' in self.STASH_CONFIGURATION: + self.API_KEY = self.STASH_CONFIGURATION['apiKey'] if self.DEBUG_TRACING: self.LOG_LEVEL = logging.DEBUG logging.basicConfig(level=self.LOG_LEVEL, format=logFormat, datefmt=dateFmt, handlers=[RFH]) diff --git a/plugins/FileMonitor/filemonitor.py b/plugins/FileMonitor/filemonitor.py index e23fbd4..2c9a1da 100644 --- a/plugins/FileMonitor/filemonitor.py +++ b/plugins/FileMonitor/filemonitor.py @@ -20,6 +20,7 @@ parser.add_argument('--trace', '-t', dest='trace', action='store_true', help='En parser.add_argument('--stop', '-s', dest='stop', action='store_true', help='Stop (kill) a running FileMonitor task.') parser.add_argument('--restart', '-r', dest='restart', action='store_true', help='Restart FileMonitor.') parser.add_argument('--silent', '--quit', '-q', dest='quit', action='store_true', help='Run in silent mode. No output to console or stderr. Use this when running from pythonw.exe') +parser.add_argument('--apikey', '-a', dest='apikey', type=str, help='API Key') parse_args = parser.parse_args() logToErrSet = 0 @@ -40,7 +41,8 @@ stash = StashPluginHelper( settings=settings, config=config, logToErrSet=logToErrSet, - logToNormSet=logToNormSet + logToNormSet=logToNormSet, + apiKey=parse_args.apikey ) stash.Status() stash.Log(f"\nStarting (__file__={__file__}) (stash.CALLED_AS_STASH_PLUGIN={stash.CALLED_AS_STASH_PLUGIN}) (stash.DEBUG_TRACING={stash.DEBUG_TRACING}) (stash.DRY_RUN={stash.DRY_RUN}) (stash.PLUGIN_TASK_NAME={stash.PLUGIN_TASK_NAME})************************************************") @@ -72,8 +74,11 @@ fileExtTypes = stash.pluginConfig['fileExtTypes'].split(",") if stash.pluginConf includePathChanges = stash.pluginConfig['includePathChanges'] if len(stash.pluginConfig['includePathChanges']) > 0 else stash.STASH_PATHS excludePathChanges = stash.pluginConfig['excludePathChanges'] + +stash.Trace(f"(apiKey={stash.API_KEY})") stash.Trace(f"(includePathChanges={includePathChanges})") + if stash.DRY_RUN: stash.Log("Dry run mode is enabled.") stash.Trace(f"(SCAN_MODIFIED={SCAN_MODIFIED}) (SCAN_ON_ANY_EVENT={SCAN_ON_ANY_EVENT}) (RECURSIVE={RECURSIVE})") @@ -533,6 +538,8 @@ def start_library_monitor_service(): pass stash.Trace("FileMonitor is not running, so it's safe to start it as a service.") args = [f"{pathlib.Path(__file__).resolve().parent}{os.sep}filemonitor.py", '--url', f"{stash.STASH_URL}"] + if stash.API_KEY: + args = args + ["-a", stash.API_KEY] stash.ExecutePythonScript(args) if parse_args.stop or parse_args.restart or stash.PLUGIN_TASK_NAME == "stop_library_monitor": diff --git a/plugins/FileMonitor/filemonitor.yml b/plugins/FileMonitor/filemonitor.yml index bd8d5b5..3d57d71 100644 --- a/plugins/FileMonitor/filemonitor.yml +++ b/plugins/FileMonitor/filemonitor.yml @@ -1,6 +1,6 @@ name: FileMonitor description: Monitors the Stash library folders, and updates Stash if any changes occurs in the Stash library paths. -version: 0.8.4 +version: 0.8.5 url: https://github.com/David-Maisonave/Axter-Stash/tree/main/plugins/FileMonitor settings: recursiveDisabled: diff --git a/plugins/FileMonitor/filemonitor_config.py b/plugins/FileMonitor/filemonitor_config.py index 4692c3a..b151caf 100644 --- a/plugins/FileMonitor/filemonitor_config.py +++ b/plugins/FileMonitor/filemonitor_config.py @@ -100,7 +100,7 @@ config = { # {"task" : "execute", "command" : "test_hello_world.bat", "args" : "--name David", "weekday" : "friday", "time" : "12:03"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'execute' result=??? ], - # ApiKey only needed when Stash credentials are set. + # ApiKey only needed when Stash credentials are set and while calling FileMonitor via command line. "apiKey" : "", # Example: "eyJabccideJIUfg1NigRInD345I6dfpXVCfd.eyJ1abcDEfGheHRlHJiJklMonPQ32FsVewtsfSIsImlhdCI6MTcyMzg2NzkwOH0.5bkHU6sfs3532dsryu1ki3iFBwnd_4AHs325yHljsPw" # Timeout in seconds. This is how often FileMonitor will check the scheduler and (in-plugin mode) check if another job (Task) is in the queue. "timeOut": 60,