diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index e825afd2a9..d0c582180d 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -1,11 +1,11 @@
-# Copyright (c) 2019 Ultimaker B.V.
+# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from datetime import datetime
import json
import random
from hashlib import sha512
from base64 import b64encode
-from typing import Optional
+from typing import Optional, Any, Dict, Tuple
import requests
@@ -16,6 +16,7 @@ from cura.OAuth2.Models import AuthenticationResponse, UserProfile, OAuth2Settin
catalog = i18nCatalog("cura")
TOKEN_TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S"
+
class AuthorizationHelpers:
"""Class containing several helpers to deal with the authorization flow."""
@@ -121,10 +122,12 @@ class AuthorizationHelpers:
if not user_data or not isinstance(user_data, dict):
Logger.log("w", "Could not parse user data from token: %s", user_data)
return None
+ enterprise_info = self.extractEnterpriseSubscriptionInformation(user_data)
return UserProfile(
user_id = user_data["user_id"],
username = user_data["username"],
- profile_image_url = user_data.get("profile_image_url", "")
+ profile_image_url = user_data.get("profile_image_url", ""),
+ **enterprise_info
)
@staticmethod
@@ -147,3 +150,22 @@ class AuthorizationHelpers:
encoded = sha512(verification_code.encode()).digest()
return b64encode(encoded, altchars = b"_-").decode()
+
+ @staticmethod
+ def extractEnterpriseSubscriptionInformation(user_data: Dict[str, Any]) -> Dict[str, Any]:
+ """
+ Extracts information related to the enterprise subscription of the account.
+
+ :param user_data: Dictionary containing the unencoded user_data received by the JWT
+ :returns: enterprise_info: Dictionary containing information related to enterprise subscriptions
+ """
+ enterprise_info = {}
+ subscriptions = user_data.get("subscriptions", [])
+ enterprise_subscription = {}
+ for subscription in subscriptions:
+ if subscription.get("type_id", "") == "customer.enterprise":
+ enterprise_subscription = subscription
+ break
+ enterprise_info["enterprise_plan"] = enterprise_subscription.get("plan_id", "")
+ enterprise_info["organization_id"] = user_data.get("organization", {}).get("organization_id", "")
+ return enterprise_info
diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py
index 93b44e8057..d227053126 100644
--- a/cura/OAuth2/Models.py
+++ b/cura/OAuth2/Models.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 Ultimaker B.V.
+# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, Dict, Any
@@ -27,6 +27,8 @@ class UserProfile(BaseModel):
user_id = None # type: Optional[str]
username = None # type: Optional[str]
profile_image_url = None # type: Optional[str]
+ enterprise_plan = None # type: Optional[str]
+ organization_id = None # type: Optional[str]
class AuthenticationResponse(BaseModel):
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
index 284389064c..4957f2f1d3 100755
--- a/plugins/SliceInfoPlugin/SliceInfo.py
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import json
@@ -116,6 +116,7 @@ class SliceInfo(QObject, Extension):
machine_manager = self._application.getMachineManager()
print_information = self._application.getPrintInformation()
+ user_profile = self._application.getCuraAPI().account.userProfile
global_stack = machine_manager.activeMachine
@@ -124,6 +125,8 @@ class SliceInfo(QObject, Extension):
data["schema_version"] = 0
data["cura_version"] = self._application.getVersion()
data["cura_build_type"] = ApplicationMetadata.CuraBuildType
+ data["enterprise_plan"] = user_profile.get("enterprise_plan", "") if user_profile else ""
+ data["organization_id"] = user_profile.get("organization_id", "") if user_profile else ""
active_mode = self._application.getPreferences().getValue("cura/active_mode")
if active_mode == 0:
diff --git a/plugins/SliceInfoPlugin/example_data.html b/plugins/SliceInfoPlugin/example_data.html
index 103eb55a6a..5dd63b4c9c 100644
--- a/plugins/SliceInfoPlugin/example_data.html
+++ b/plugins/SliceInfoPlugin/example_data.html
@@ -6,7 +6,9 @@
Machine Type: Ultimaker S5
Intent Profile: Default
Quality Profile: Fast
- Using Custom Settings: No
+ Using Custom Settings: No
+ Enterprise Plan: Essentials
+ Organization ID: Ultimaker B.V.