skillbox/server/users/user_signup_login_handler.py

79 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2020 ITerativ GmbH. All rights reserved.
#
# Created on 30.01.20
# @author: chrigu <christian.cueni@iterativ.ch>
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)