# -*- coding: utf-8 -*- # # ITerativ GmbH # http://www.iterativ.ch/ # # Copyright (c) 2020 ITerativ GmbH. All rights reserved. # # Created on 30.01.20 # @author: chrigu from django.conf import settings from core.hep_client import HepClient, HepClientException from core.models import AdminData from registration.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' def handle_user_and_verify_products(user_data): hep_client = HepClient() try: user = User.objects.get(hep_id=user_data['id']) except User.DoesNotExist: user = User.objects.create_user_from_hep(user_data) # todo check if email has changed, any impact on our system? try: if not hep_client.is_email_verified(user_data): return user, EMAIL_NOT_VERIFIED except HepClientException: return user, UNKNOWN_ERROR try: license = License.objects.get(licensee=user) # Todo how handle invalid license? Cron Job? How to select correct license? Save all licenses? History? except License.DoesNotExist: license, error_msg = check_and_create_licenses(hep_client, user) if error_msg: return user, error_msg create_role_for_user(user, license.for_role.key) if not license.is_valid(): return user, NO_VALID_LICENSE return user, None def check_and_create_licenses(hep_client, user): try: admin_token = AdminData.objects.get_admin_token() product = hep_client.myskillbox_product_for_customer(admin_token, user.hep_id) except HepClientException: return None, UNKNOWN_ERROR if product: license = License.objects.create_license_for_role(user, product['activated'], product['raw'], product['edition']) # todo handle no license case else: return None, NO_VALID_LICENSE return license, None def create_role_for_user(user, role_key): UserRole.objects.create_role_for_user(user, role_key) if role_key == Role.objects.TEACHER_KEY: SchoolClass.create_default_group_for_teacher(user)