Include organization id and type of enterprise plan in slice data

CURA-7717
This commit is contained in:
Kostas Karmas 2020-10-13 16:30:29 +02:00
parent 602e09e8af
commit ceda3e70bd
4 changed files with 35 additions and 6 deletions

View file

@ -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