| 1023 | ] |
| 1024 | ) |
| 1025 | def create(self, request, *args, **kwargs): |
| 1026 | invitation_token = request.query_params.get("invitation_token", None) |
| 1027 | invitation = None |
| 1028 | |
| 1029 | serializer = self.get_serializer( |
| 1030 | data=request.data, context=self.get_serializer_context() |
| 1031 | ) |
| 1032 | serializer.is_valid(raise_exception=True) |
| 1033 | |
| 1034 | if invitation_token: |
| 1035 | invitation = validate_invitation( |
| 1036 | invitation_token, serializer.validated_data["email"] |
| 1037 | ) |
| 1038 | |
| 1039 | # Proceed with creating the user and membership |
| 1040 | user = User.objects.db_manager(MainRouter.admin_db).create_user( |
| 1041 | **serializer.validated_data |
| 1042 | ) |
| 1043 | tenant = ( |
| 1044 | invitation.tenant |
| 1045 | if invitation_token |
| 1046 | else Tenant.objects.using(MainRouter.admin_db).create( |
| 1047 | name=f"{user.email.split('@')[0]} default tenant" |
| 1048 | ) |
| 1049 | ) |
| 1050 | role = ( |
| 1051 | Membership.RoleChoices.MEMBER |
| 1052 | if invitation_token |
| 1053 | else Membership.RoleChoices.OWNER |
| 1054 | ) |
| 1055 | Membership.objects.using(MainRouter.admin_db).create( |
| 1056 | user=user, tenant=tenant, role=role |
| 1057 | ) |
| 1058 | if invitation: |
| 1059 | user_role = [] |
| 1060 | for role in invitation.roles.all(): |
| 1061 | user_role.append( |
| 1062 | UserRoleRelationship.objects.using(MainRouter.admin_db).create( |
| 1063 | user=user, role=role, tenant=invitation.tenant |
| 1064 | ) |
| 1065 | ) |
| 1066 | invitation.state = Invitation.State.ACCEPTED |
| 1067 | invitation.save(using=MainRouter.admin_db) |
| 1068 | else: |
| 1069 | role = Role.objects.using(MainRouter.admin_db).create( |
| 1070 | name="admin", |
| 1071 | tenant_id=tenant.id, |
| 1072 | manage_users=True, |
| 1073 | manage_account=True, |
| 1074 | manage_billing=True, |
| 1075 | manage_providers=True, |
| 1076 | manage_integrations=True, |
| 1077 | manage_scans=True, |
| 1078 | unlimited_visibility=True, |
| 1079 | ) |
| 1080 | UserRoleRelationship.objects.using(MainRouter.admin_db).create( |
| 1081 | user=user, |
| 1082 | role=role, |