diff --git a/HISTORY.rst b/HISTORY.rst index c90c5ba..dbb5011 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,12 @@ History ------- +11.1.0 (2022-11-11) +++++++++++++++++++ + +- Support for api key vault cmd config + + 11.0.8 (2022-08-23) ++++++++++++++++++ diff --git a/README.md b/README.md index c420287..e4e17ff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [WakaTime][wakatime] is an open source Sublime Text plugin for metrics, insights, and time tracking automatically generated from your programming activity. - ## Installation 1. Install [Package Control](https://packagecontrol.io/installation). @@ -19,12 +18,10 @@ 6. Use Sublime and your coding activity will be displayed on your [WakaTime dashboard](https://wakatime.com). - ## Screen Shots ![Project Overview](https://wakatime.com/static/img/ScreenShots/Screen-Shot-2016-03-21.png) - ## Unresponsive Plugin Warning In Sublime Text 2, if you get a warning message: @@ -35,7 +32,6 @@ To fix this, go to `Preferences → Settings - User` then add the following sett `"detect_slow_plugins": false` - ## Troubleshooting First, turn on debug mode in your `WakaTime.sublime-settings` file. diff --git a/WakaTime.py b/WakaTime.py index ff754dd..c6f1679 100644 --- a/WakaTime.py +++ b/WakaTime.py @@ -186,6 +186,7 @@ class ApiKey(object): self._key = key return self._key + configs = None try: configs = parseConfigFile(CONFIG_FILE) if configs: @@ -197,8 +198,38 @@ class ApiKey(object): except: pass + key = self.api_key_from_vault_cmd(configs) + if key: + self._key = key + return self._key + return self._key + def api_key_from_vault_cmd(self, configs): + vault_cmd = SETTINGS.get('api_key_vault_cmd') + if not vault_cmd and configs: + try: + if configs.has_option('settings', 'api_key_vault_cmd'): + vault_cmd = configs.get('settings', 'api_key_vault_cmd') + except: + pass + + if not vault_cmd or not vault_cmd.strip(): + return None + + try: + process = Popen(vault_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + stdout, stderr = process.communicate() + retcode = process.poll() + if retcode: + log(ERROR, 'Vault command error ({retcode}): {stderr}'.format(retcode=retcode, stderr=u(stderr))) + return None + return stdout.strip() or None + except: + log(ERROR, traceback.format_exc()) + + return None + def write(self, key): global SETTINGS self._key = key