use OpenPypeRegistry to set, get and remove ftrack credentials

This commit is contained in:
iLLiCiTiT 2021-04-08 12:58:45 +02:00
parent 5a7d19337c
commit 153160f85d

View file

@ -1,21 +1,16 @@
import os import os
import json
import ftrack_api import ftrack_api
import appdirs
import getpass
try: try:
from urllib.parse import urlparse from urllib.parse import urlparse
except ImportError: except ImportError:
from urlparse import urlparse from urlparse import urlparse
CONFIG_PATH = os.path.normpath(appdirs.user_data_dir("pype-app", "pype")) from openpype.lib import OpenPypeSettingsRegistry
CREDENTIALS_FILE_NAME = "ftrack_cred.json"
CREDENTIALS_PATH = os.path.join(CONFIG_PATH, CREDENTIALS_FILE_NAME)
CREDENTIALS_FOLDER = os.path.dirname(CREDENTIALS_PATH)
if not os.path.isdir(CREDENTIALS_FOLDER): USERNAME_KEY = "username"
os.makedirs(CREDENTIALS_FOLDER) API_KEY_KEY = "api_key"
def get_ftrack_hostname(ftrack_server=None): def get_ftrack_hostname(ftrack_server=None):
@ -34,84 +29,49 @@ def _get_ftrack_secure_key(hostname):
def get_credentials(ftrack_server=None): def get_credentials(ftrack_server=None):
credentials = {}
if not os.path.exists(CREDENTIALS_PATH):
with open(CREDENTIALS_PATH, "w") as file:
file.write(json.dumps(credentials))
file.close()
return credentials
with open(CREDENTIALS_PATH, "r") as file:
content = file.read()
hostname = get_ftrack_hostname(ftrack_server) hostname = get_ftrack_hostname(ftrack_server)
secure_key = _get_ftrack_secure_key(hostname)
content_json = json.loads(content or "{}") registry = OpenPypeSettingsRegistry(secure_key)
credentials = content_json.get(hostname) or {} return {
USERNAME_KEY: registry.get_secure_item(USERNAME_KEY, None),
return credentials API_KEY_KEY: registry.get_secure_item(API_KEY_KEY, None)
def save_credentials(ft_user, ft_api_key, ftrack_server=None):
hostname = get_ftrack_hostname(ftrack_server)
with open(CREDENTIALS_PATH, "r") as file:
content = file.read()
content_json = json.loads(content or "{}")
content_json[hostname] = {
"username": ft_user,
"api_key": ft_api_key
} }
# Deprecated keys
if "username" in content_json:
content_json.pop("username")
if "apiKey" in content_json:
content_json.pop("apiKey")
with open(CREDENTIALS_PATH, "w") as file:
file.write(json.dumps(content_json, indent=4))
def clear_credentials(ft_user=None, ftrack_server=None):
if not ft_user:
ft_user = os.environ.get("FTRACK_API_USER")
if not ft_user:
return
def save_credentials(username, api_key, ftrack_server=None):
hostname = get_ftrack_hostname(ftrack_server) hostname = get_ftrack_hostname(ftrack_server)
with open(CREDENTIALS_PATH, "r") as file: secure_key = _get_ftrack_secure_key(hostname)
content = file.read()
content_json = json.loads(content or "{}") registry = OpenPypeSettingsRegistry(secure_key)
if hostname not in content_json: registry.set_secure_item(USERNAME_KEY, username)
content_json[hostname] = {} registry.set_secure_item(API_KEY_KEY, api_key)
content_json.pop(hostname, None)
with open(CREDENTIALS_PATH, "w") as file:
file.write(json.dumps(content_json))
def check_credentials(ft_user, ft_api_key, ftrack_server=None): def clear_credentials(ftrack_server=None):
hostname = get_ftrack_hostname(ftrack_server)
secure_key = _get_ftrack_secure_key(hostname)
registry = OpenPypeSettingsRegistry(secure_key)
registry.delete_secure_item(USERNAME_KEY)
registry.delete_secure_item(API_KEY_KEY)
def check_credentials(username, api_key, ftrack_server=None):
if not ftrack_server: if not ftrack_server:
ftrack_server = os.environ["FTRACK_SERVER"] ftrack_server = os.environ["FTRACK_SERVER"]
if not ft_user or not ft_api_key: if not username or not api_key:
return False return False
try: try:
session = ftrack_api.Session( session = ftrack_api.Session(
server_url=ftrack_server, server_url=ftrack_server,
api_key=ft_api_key, api_key=api_key,
api_user=ft_user api_user=username
) )
session.close() session.close()
except Exception: except Exception:
return False return False
return True return True