changed muster authentication

This commit is contained in:
Ondrej Samohel 2019-10-04 17:42:59 +02:00
parent 8f75f714e2
commit c65af56048
No known key found for this signature in database
GPG key ID: 8A29C663C672C2B7
4 changed files with 47 additions and 63 deletions

View file

@ -4,6 +4,7 @@ from Qt import QtWidgets
import os
import json
from .widget_login import MusterLogin
from avalon.vendor import requests
class MusterModule:
@ -70,13 +71,39 @@ class MusterModule:
return credentials
def save_credentials(self, username, password):
def get_auth_token(self, username, password):
"""
Authenticate user with Muster and get authToken from server.
"""
MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL")
if not MUSTER_REST_URL:
raise AttributeError("Muster REST API url not set")
params = {
'username': username,
'password': password
}
api_entry = '/api/login'
response = requests.post(
MUSTER_REST_URL + api_entry, params=params)
if response.status_code != 200:
self.log.error(
'Cannot log into Muster: {}'.format(response.status_code))
raise Exception('Cannot login into Muster.')
try:
token = response.json()['ResponseData']['authToken']
except ValueError as e:
self.log.error('Invalid response from Muster server {}'.format(e))
raise Exception('Invalid response from Muster while logging in.')
self.save_credentials(token)
def save_credentials(self, token):
"""
Save credentials to JSON file
"""
data = {
'username': username,
'password': password
'token': token
}
file = open(self.cred_path, 'w')

View file

@ -134,7 +134,7 @@ class MusterLogin(QtWidgets.QWidget):
self._close_widget()
def save_credentials(self, username, password):
self.parent_widget.save_credentials(username, password)
self.parent_widget.get_auth_token(username, password)
def closeEvent(self, event):
event.ignore()

View file

@ -55,14 +55,12 @@ class CreateRenderGlobals(avalon.maya.Creator):
else:
self.log.info(">>> Loading Muster credentials ...")
self._load_credentials()
self.log.info(">>> Logging in Muster ...")
self.log.info(">>> Getting pools ...")
try:
self._authenticate()
pools = self._get_muster_pools()
except requests.exceptions.ConnectionError:
self.log.error("Cannot connect to Muster API endpoint.")
raise RuntimeError("Cannot connect to {}".format(muster_url))
self.log.info(">>> Getting pools ...")
pools = self._get_muster_pools()
pool_names = []
for pool in pools:
self.log.info(" - pool: {}".format(pool['name']))
@ -105,6 +103,10 @@ class CreateRenderGlobals(avalon.maya.Creator):
"""
Load Muster credentials from file and set `MUSTER_USER`,
`MUSTER_PASSWORD`, `MUSTER_REST_URL` is loaded from presets.
.. todo::
Show login dialog if access token is invalid or missing.
"""
app_dir = os.path.normpath(
appdirs.user_data_dir('pype-app', 'pype')
@ -113,37 +115,14 @@ class CreateRenderGlobals(avalon.maya.Creator):
fpath = os.path.join(app_dir, file_name)
file = open(fpath, 'r')
muster_json = json.load(file)
self.MUSTER_USER = muster_json.get('username', None)
self.MUSTER_PASSWORD = muster_json.get('password', None)
self._token = muster_json.get('token', None)
if not self._token:
raise RuntimeError("Invalid access token for Muster")
file.close()
self.MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL")
if not self.MUSTER_REST_URL:
raise AttributeError("Muster REST API url not set")
def _authenticate(self):
"""
Authenticate user with Muster and get authToken from server.
"""
params = {
'username': self.MUSTER_USER,
'password': self.MUSTER_PASSWORD
}
api_entry = '/api/login'
response = requests.post(
self.MUSTER_REST_URL + api_entry, params=params)
if response.status_code != 200:
self.log.error(
'Cannot log into Muster: {}'.format(response.status_code))
raise Exception('Cannot login into Muster.')
try:
self._token = response.json()['ResponseData']['authToken']
except ValueError as e:
self.log.error('Invalid response from Muster server {}'.format(e))
raise Exception('Invalid response from Muster while logging in.')
return self._token
def _get_muster_pools(self):
"""
Get render pools from muster

View file

@ -141,13 +141,15 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin):
icon = "satellite-dish"
_token = None
_user = None
_password = None
def _load_credentials(self):
"""
Load Muster credentials from file and set `MUSTER_USER`,
`MUSTER_PASSWORD`, `MUSTER_REST_URL` is loaded from presets.
.. todo::
Show login dialog if access token is invalid or missing.
"""
app_dir = os.path.normpath(
appdirs.user_data_dir('pype-app', 'pype')
@ -156,37 +158,14 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin):
fpath = os.path.join(app_dir, file_name)
file = open(fpath, 'r')
muster_json = json.load(file)
self.MUSTER_USER = muster_json.get('username', None)
self.MUSTER_PASSWORD = muster_json.get('password', None)
self._token = muster_json.get('token', None)
if not self._token:
raise RuntimeError("Invalid access token for Muster")
file.close()
self.MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL")
if not self.MUSTER_REST_URL:
raise AttributeError("Muster REST API url not set")
def _authenticate(self):
"""
Authenticate user with Muster and get authToken from server.
"""
params = {
'username': self.MUSTER_USER,
'password': self.MUSTER_PASSWORD
}
api_entry = '/api/login'
response = requests.post(
self.MUSTER_REST_URL + api_entry, params=params)
if response.status_code != 200:
self.log.error(
'Cannot log into Muster: {}'.format(response.status_code))
raise Exception('Cannot login into Muster.')
try:
self._token = response.json()['ResponseData']['authToken']
except ValueError as e:
self.log.error('Invalid response from Muster server {}'.format(e))
raise Exception('Invalid response from Muster while logging in.')
return self._token
def _get_templates(self):
"""
Get Muster templates from server.
@ -273,7 +252,6 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin):
raise RuntimeError("MUSTER_REST_URL not set")
self._load_credentials()
self._authenticate()
# self._get_templates()
context = instance.context