78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
from core.logger import get_logger
|
|
from oauth.hep_client import HepClient, HepClientException
|
|
from users.models import License
|
|
from users.models import User, UserRole, Role, SchoolClass
|
|
|
|
|
|
EMAIL_NOT_VERIFIED = "email_not_verified"
|
|
UNKNOWN_ERROR = "unknown_error"
|
|
NO_VALID_LICENSE = "no_valid_license"
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
def handle_user_and_verify_products(user_data, token):
|
|
hep_client = HepClient()
|
|
|
|
user = User.objects.get_or_create_hep_user(user_data)
|
|
|
|
try:
|
|
if not hep_client.is_email_verified(user_data):
|
|
logger.info("email not verified")
|
|
return user, EMAIL_NOT_VERIFIED
|
|
except HepClientException:
|
|
return user, UNKNOWN_ERROR
|
|
|
|
license = License.objects.get_active_license_for_user(user)
|
|
|
|
if not license:
|
|
logger.info("license not found, trying to create")
|
|
license, error_msg = check_and_create_licenses(hep_client, user, token)
|
|
|
|
if error_msg:
|
|
logger.warning(error_msg)
|
|
return user, error_msg
|
|
|
|
logger.info("creating role")
|
|
create_role_for_user(user, license.for_role.key)
|
|
|
|
if license and not license.is_valid():
|
|
logger.info("license is not valid")
|
|
return user, NO_VALID_LICENSE
|
|
|
|
return user, None
|
|
|
|
|
|
def check_and_create_licenses(hep_client, user, token):
|
|
try:
|
|
logger.info("fetching products")
|
|
product = hep_client.active_myskillbox_product_for_customer(token_dict=token)
|
|
except HepClientException:
|
|
return None, UNKNOWN_ERROR
|
|
|
|
if product:
|
|
logger.info("product found, creating license")
|
|
license = License.objects.create_license_for_role(
|
|
user,
|
|
product["activated"],
|
|
product["raw"],
|
|
product["license"]["edition"],
|
|
product["order_id"],
|
|
product["isbn"],
|
|
)
|
|
else:
|
|
logger.info("no product found")
|
|
return None, NO_VALID_LICENSE
|
|
|
|
return license, None
|
|
|
|
|
|
def create_role_for_user(user, role_key):
|
|
UserRole.objects.get_or_create_role_for_user(user, role_key)
|
|
|
|
if role_key == Role.objects.STUDENT_KEY:
|
|
return
|
|
|
|
if SchoolClass.objects.filter(users__in=[user]).count() == 0:
|
|
SchoolClass.create_default_group_for_teacher(user)
|