Add some light logging to login process to see when licenses are created
This commit is contained in:
parent
ccdf916e83
commit
67ebcbcaa0
|
|
@ -1,11 +1,14 @@
|
|||
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'
|
||||
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):
|
||||
|
|
@ -15,6 +18,7 @@ def handle_user_and_verify_products(user_data, token):
|
|||
|
||||
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
|
||||
|
|
@ -22,14 +26,18 @@ def handle_user_and_verify_products(user_data, token):
|
|||
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.warn(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
|
||||
|
|
@ -37,15 +45,23 @@ def handle_user_and_verify_products(user_data, token):
|
|||
|
||||
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:
|
||||
license = License.objects.create_license_for_role(user, product['activated'], product['raw'],
|
||||
product['license']['edition'],
|
||||
product['order_id'], product['isbn'])
|
||||
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
|
||||
|
|
@ -59,4 +75,3 @@ def create_role_for_user(user, role_key):
|
|||
|
||||
if SchoolClass.objects.filter(users__in=[user]).count() == 0:
|
||||
SchoolClass.create_default_group_for_teacher(user)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,21 +8,25 @@ from django.utils import timezone
|
|||
from django.utils.translation import gettext_lazy as _
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import UserManager as DjangoUserManager
|
||||
from core.logger import get_logger
|
||||
|
||||
from users.licenses import get_license_dict
|
||||
|
||||
license_dict = get_license_dict()
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class RoleManager(models.Manager):
|
||||
use_in_migrations = True
|
||||
|
||||
TEACHER_KEY = 'teacher'
|
||||
STUDENT_KEY = 'student'
|
||||
PARENT_KEY = 'parent'
|
||||
TEACHER_KEY = "teacher"
|
||||
STUDENT_KEY = "student"
|
||||
PARENT_KEY = "parent"
|
||||
|
||||
DEFAULT_ROLES = {
|
||||
TEACHER_KEY: _(u'Lehrperson'),
|
||||
STUDENT_KEY: _(u'Schüler'),
|
||||
TEACHER_KEY: _("Lehrperson"),
|
||||
STUDENT_KEY: _("Schüler"),
|
||||
# PARENT_KEY: _(u'Aufsichtsperson'),
|
||||
# SCHOOL_ADMIN_KEY: _(u'Schuladministrator')
|
||||
}
|
||||
|
|
@ -44,7 +48,7 @@ class RoleManager(models.Manager):
|
|||
for key, value in self.DEFAULT_ROLES.items():
|
||||
role, created = self.get_or_create(name=value, key=key)
|
||||
|
||||
can_manage_school_class_content, = self._create_default_permissions()
|
||||
(can_manage_school_class_content,) = self._create_default_permissions()
|
||||
|
||||
if key == "teacher":
|
||||
role.role_permission.add(can_manage_school_class_content.id)
|
||||
|
|
@ -67,15 +71,17 @@ class RoleManager(models.Manager):
|
|||
# edit_own_comments = Permission.objects.get(content_type=content_type, codename="can_edit_own_comments")
|
||||
# delete_comments = Permission.objects.get(content_type=content_type, codename="can_delete_comments")
|
||||
# admin_school = Permission.objects.get(content_type=content_type, codename="can_admin_school")
|
||||
can_manage_school_class_content = Permission.objects.get(content_type=content_type,
|
||||
codename='can_manage_school_class_content')
|
||||
can_manage_school_class_content = Permission.objects.get(
|
||||
content_type=content_type, codename="can_manage_school_class_content"
|
||||
)
|
||||
|
||||
return can_manage_school_class_content,
|
||||
return (can_manage_school_class_content,)
|
||||
|
||||
|
||||
class UserRoleManager(models.Manager):
|
||||
def get_or_create_role_for_user(self, user, role_key):
|
||||
from users.models import Role
|
||||
|
||||
try:
|
||||
role = Role.objects.get(key=role_key)
|
||||
except Role.DoesNotExist:
|
||||
|
|
@ -94,7 +100,6 @@ class UserRoleManager(models.Manager):
|
|||
|
||||
|
||||
class UserManager(DjangoUserManager):
|
||||
|
||||
def _create_user_with_random_password_no_save(self, first_name, last_name, email):
|
||||
user, created = self.model.objects.get_or_create(email=email, username=email)
|
||||
user.first_name = first_name
|
||||
|
|
@ -105,20 +110,22 @@ class UserManager(DjangoUserManager):
|
|||
return user
|
||||
|
||||
def create_user_with_random_password(self, first_name, last_name, email):
|
||||
user = self._create_user_with_random_password_no_save(first_name, last_name, email)
|
||||
user = self._create_user_with_random_password_no_save(
|
||||
first_name, last_name, email
|
||||
)
|
||||
user.save()
|
||||
return user
|
||||
|
||||
def create_user_from_hep(self, user_data):
|
||||
try:
|
||||
user = self.model.objects.get(email=user_data['email'])
|
||||
user = self.model.objects.get(email=user_data["email"])
|
||||
user.set_unusable_password()
|
||||
except self.model.DoesNotExist:
|
||||
user = self._create_user_with_random_password_no_save(user_data['first_name'],
|
||||
user_data['last_name'],
|
||||
user_data['email'])
|
||||
user = self._create_user_with_random_password_no_save(
|
||||
user_data["first_name"], user_data["last_name"], user_data["email"]
|
||||
)
|
||||
|
||||
user.hep_id = user_data['id']
|
||||
user.hep_id = user_data["id"]
|
||||
user.save()
|
||||
|
||||
# todo: how to handle
|
||||
|
|
@ -128,36 +135,48 @@ class UserManager(DjangoUserManager):
|
|||
return user
|
||||
|
||||
def get_or_create_hep_user(self, user_data):
|
||||
|
||||
try:
|
||||
user = self.get(hep_id=user_data['id'])
|
||||
user = self.get(hep_id=user_data["id"])
|
||||
logger.info(f"Got user {user.id}")
|
||||
except self.model.DoesNotExist:
|
||||
user = self.create_user_from_hep(user_data)
|
||||
logger.info(f"Created user {user.id}")
|
||||
|
||||
return user
|
||||
|
||||
|
||||
class LicenseManager(models.Manager):
|
||||
def create_license_for_role(
|
||||
self, licensee, activation_date, raw, role, order_id, isbn
|
||||
):
|
||||
Role = apps.get_model("users", "Role")
|
||||
expiry_date = activation_date + timedelta(license_dict[isbn]["duration"])
|
||||
|
||||
def create_license_for_role(self, licensee, activation_date, raw, role, order_id, isbn):
|
||||
Role = apps.get_model('users', 'Role')
|
||||
expiry_date = activation_date + timedelta(license_dict[isbn]['duration'])
|
||||
|
||||
if role == 'teacher':
|
||||
if role == "teacher":
|
||||
user_role = Role.objects.get_default_teacher_role()
|
||||
else:
|
||||
user_role = Role.objects.get_default_student_role()
|
||||
|
||||
new_license = self._create_license_for_role(licensee, expiry_date, raw, user_role, order_id, isbn,
|
||||
activation_date)
|
||||
new_license = self._create_license_for_role(
|
||||
licensee, expiry_date, raw, user_role, order_id, isbn, activation_date
|
||||
)
|
||||
new_license.licensee.license_expiry_date = new_license.expire_date
|
||||
new_license.licensee.save()
|
||||
|
||||
return new_license
|
||||
|
||||
def _create_license_for_role(self, licensee, expiry_date, raw, role, order_id, isbn, activation_date):
|
||||
return self.create(licensee=licensee, expire_date=expiry_date, new_api_raw=raw, for_role=role, order_id=order_id,
|
||||
isbn=isbn, hep_created_at=activation_date)
|
||||
def _create_license_for_role(
|
||||
self, licensee, expiry_date, raw, role, order_id, isbn, activation_date
|
||||
):
|
||||
return self.create(
|
||||
licensee=licensee,
|
||||
expire_date=expiry_date,
|
||||
new_api_raw=raw,
|
||||
for_role=role,
|
||||
order_id=order_id,
|
||||
isbn=isbn,
|
||||
hep_created_at=activation_date,
|
||||
)
|
||||
|
||||
def get_active_license_for_user(self, user):
|
||||
licenses = self.filter(licensee=user, expire_date__gte=timezone.now()).order_by(
|
||||
|
|
@ -174,4 +193,3 @@ class LicenseManager(models.Manager):
|
|||
user.save()
|
||||
|
||||
return license
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue