Example #1
0
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower() + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(username=validated_username).count()

        if username_check == 0 and len(validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username, self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        if settings.EMAIL_ENABLED:
            user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()
        user_profile = models.UserProfile()
        user_profile.user = user
        user_profile.save()

        if 'is_worker' in self.validated_data or self.validated_data['is_worker']:
            worker = models.Worker()
            worker.profile = user_profile
            worker.alias = username
            worker.save()

        if 'is_requester' in self.validated_data or self.validated_data['is_requester']:
            requester = models.Requester()
            requester.profile = user_profile
            requester.alias = username
            requester.save()

        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') + username).hexdigest()
            registration_model = models.RegistrationModel()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email_sendgrid(email=user.email, host=self.context['request'].get_host(),
                                           activation_key=activation_key)
            registration_model.save()
        return user
Example #2
0
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower(
        ) + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(
            username=validated_username).count()

        if username_check == 0 and len(
                validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']
                       ) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username,
                                        self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        if settings.EMAIL_ENABLED:
            user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()
        user_profile = models.UserProfile()
        user_profile.user = user
        user_profile.save()

        if self.validated_data.get('is_requester', False):
            requester = models.Requester()
            requester.profile = user_profile
            requester.alias = username
            requester.save()
            '''
                For experimental phase only, to be removed later.
                {begin experiment}
            '''
            try:
                if self.initial_data.get('experiment_fields', False):
                    requester_experiment = experimental_models.RequesterExperiment(
                    )
                    requester_experiment.requester = requester
                    requester_experiment.has_prototype = self.initial_data[
                        'experiment_fields'].get('has_prototype', True)
                    requester_experiment.has_boomerang = self.initial_data[
                        'experiment_fields'].get('has_boomerang', True)
                    requester_experiment.pool = self.initial_data[
                        'experiment_fields'].get('pool', 0)
                    requester_experiment.save()
                else:
                    experimental_models.WorkerExperiment.objects.create(
                        requester=requester)
            except Exception as e:
                pass  # it's ok to fail silently here
            '''
                {end experiment}
            '''

        has_profile_info = self.validated_data.get(
            'is_requester', False) or self.validated_data.get(
                'is_worker', False)

        if self.validated_data.get('is_worker', False) or not has_profile_info:
            worker = models.Worker()
            worker.profile = user_profile
            worker.alias = username
            worker.save()
            '''
                For experimental phase only, to be removed later.
                {begin experiment}
            '''
            try:
                if self.initial_data.get('experiment_fields', False):
                    worker_experiment = experimental_models.WorkerExperiment()
                    worker_experiment.worker = worker
                    worker_experiment.has_prototype = self.initial_data[
                        'experiment_fields'].get('has_prototype', True)
                    worker_experiment.sorting_type = self.initial_data[
                        'experiment_fields'].get('sorting_type', 1)
                    worker_experiment.is_subject_to_cascade= self.initial_data['experiment_fields']\
                        .get('is_subject_to_cascade', True)
                    worker_experiment.pool = self.initial_data[
                        'experiment_fields'].get('pool', 0)
                    worker_experiment.save()
                else:
                    experimental_models.WorkerExperiment.objects.create(
                        worker=worker)
            except Exception as e:
                pass  # it's ok to fail silently here
            '''
                {end experiment}
            '''
        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(
                random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') +
                                          username).hexdigest()
            registration_model = models.RegistrationModel()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email_sendgrid(
                email=user.email,
                host=self.context['request'].get_host(),
                activation_key=activation_key)
            registration_model.save()
        return user
Example #3
0
    def create(self, **kwargs):
        print "in serial create"
        username = ''

        validated_username = self.validated_data['first_name'].lower(
        ) + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(
            username=validated_username).count()

        if username_check == 0 and len(
                validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']
                       ) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]
        print "in serial create - uname val done"
        user = User.objects.create_user(username,
                                        self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        # if settings.EMAIL_ENABLED:
        user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()

        user_profile = models.UserProfile.objects.create(user=user,
                                                         is_worker=False,
                                                         is_requester=False,
                                                         handle=username)
        profile_data = {
            'location': self.initial_data.get('location', {}),
            'birthday': self.initial_data.get('birthday', None),
            'user': {}
        }
        user_profile_serializer = UserProfileSerializer(instance=user_profile,
                                                        data=profile_data,
                                                        partial=True)

        if user_profile_serializer.is_valid():
            user_profile = user_profile_serializer.update()

        update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE,
                            'is_worker', 0)
        update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE,
                            'is_requester', 0)
        # update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE, 'birthday_year',
        #                     user_profile.birthday.year)

        models.UserPreferences.objects.create(user=user)

        # if self.validated_data.get('is_requester', True):
        #     user_profile.is_requester = True
        #     user_profile.save()
        #     requester_financial_account = models.FinancialAccount()
        #     requester_financial_account.owner = user
        #     requester_financial_account.type = models.FinancialAccount.TYPE_REQUESTER
        #     requester_financial_account.save()
        #
        # has_profile_info = self.validated_data.get('is_requester', False) or self.validated_data.get('is_worker',
        #                                                                                              False)

        # if self.validated_data.get('is_worker', True) or not has_profile_info:
        #     user_profile.is_worker = True
        #     user_profile.save()
        #     worker_financial_account = models.FinancialAccount()
        #     worker_financial_account.owner = user
        #     worker_financial_account.type = models.FinancialAccount.TYPE_WORKER
        #     worker_financial_account.save()

        ################Bir Commented out to discourse#############
        if settings.EMAIL_ENABLED:
            print "in EMAIL_ENABLED"
            salt = hashlib.sha1(str(
                random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') +
                                          username).hexdigest()
            registration_model = models.UserRegistration()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email(email=user.email,
                                  host=self.context['request'].get_host(),
                                  activation_key=activation_key)
            registration_model.save()

        # if settings.DISCOURSE_BASE_URL and settings.DISCOURSE_API_KEY:
        #     try:
        #         client = DiscourseClient(
        #             settings.DISCOURSE_BASE_URL,
        #             api_username='******',
        #             api_key=settings.DISCOURSE_API_KEY)

        #         client.create_user(name=user.get_full_name(),
        #                            username=user.profile.handle,
        #                            email=user.email,
        #                            password=self.initial_data.get('password1'),
        #                            active=True,
        #                            approved=True)
        # except Exception:
        #     print("Failed to create Discourse user!")

        return user
Example #4
0
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower() + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(username=validated_username).count()

        if username_check == 0 and len(validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username, self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        if settings.EMAIL_ENABLED:
            user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()
        user_profile = models.UserProfile()
        user_profile.user = user
        user_profile.save()
        user_financial_account = models.FinancialAccount()
        user_financial_account.owner = user_profile
        user_financial_account.type = 'general'
        user_financial_account.save()

        if self.validated_data.get('is_requester', True):
            requester = models.Requester()
            requester.profile = user_profile
            requester.alias = username
            requester.save()
            requester_financial_account = models.FinancialAccount()
            requester_financial_account.owner = user_profile
            requester_financial_account.type = 'requester'
            requester_financial_account.save()

        has_profile_info = self.validated_data.get('is_requester', False) or self.validated_data.get('is_worker',
                                                                                                     False)

        if self.validated_data.get('is_worker', False) or not has_profile_info:
            worker = models.Worker()
            worker.profile = user_profile
            worker.alias = username
            worker.save()
            worker_financial_account = models.FinancialAccount()
            worker_financial_account.owner = user_profile
            worker_financial_account.type = 'worker'
            worker_financial_account.save()

        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') + username).hexdigest()
            registration_model = models.RegistrationModel()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email(email=user.email, host=self.context['request'].get_host(),
                                  activation_key=activation_key)
            registration_model.save()
        return user
Example #5
0
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower() + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(username=validated_username).count()

        if username_check == 0 and len(validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username, self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        if settings.EMAIL_ENABLED:
            user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()
        user_profile = models.UserProfile()
        user_profile.user = user
        user_profile.save()

        if self.validated_data.get('is_requester', False):
            requester = models.Requester()
            requester.profile = user_profile
            requester.alias = username
            requester.save()
            '''
                For experimental phase only, to be removed later.
                {begin experiment}
            '''
            try:
                if self.initial_data.get('experiment_fields', False):
                    requester_experiment = experimental_models.RequesterExperiment()
                    requester_experiment.requester = requester
                    requester_experiment.has_prototype = self.initial_data['experiment_fields'].get('has_prototype', True)
                    requester_experiment.has_boomerang  = self.initial_data['experiment_fields'].get('has_boomerang', True)
                    requester_experiment.pool = self.initial_data['experiment_fields'].get('pool', 0)
                    requester_experiment.save()
                else:
                    experimental_models.WorkerExperiment.objects.create(requester=requester)
            except Exception as e:
                pass # it's ok to fail silently here

            '''
                {end experiment}
            '''
            
        has_profile_info = self.validated_data.get('is_requester', False) or self.validated_data.get('is_worker', False)

        if self.validated_data.get('is_worker', False) or not has_profile_info:
            worker = models.Worker()
            worker.profile = user_profile
            worker.alias = username
            worker.save()
            '''
                For experimental phase only, to be removed later.
                {begin experiment}
            '''
            try:
                if self.initial_data.get('experiment_fields', False):
                    worker_experiment = experimental_models.WorkerExperiment()
                    worker_experiment.worker = worker
                    worker_experiment.has_prototype = self.initial_data['experiment_fields'].get('has_prototype', True)
                    worker_experiment.sorting_type  = self.initial_data['experiment_fields'].get('sorting_type', 1)
                    worker_experiment.is_subject_to_cascade= self.initial_data['experiment_fields']\
                        .get('is_subject_to_cascade', True)
                    worker_experiment.pool = self.initial_data['experiment_fields'].get('pool', 0)
                    worker_experiment.save()
                else:
                    experimental_models.WorkerExperiment.objects.create(worker=worker)
            except Exception as e:
                pass # it's ok to fail silently here

            '''
                {end experiment}
            '''
        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') + username).hexdigest()
            registration_model = models.RegistrationModel()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email_sendgrid(email=user.email, host=self.context['request'].get_host(),
                                           activation_key=activation_key)
            registration_model.save()
        return user
Example #6
0
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower() + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(username=validated_username).count()

        if username_check == 0 and len(validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username, self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        if settings.EMAIL_ENABLED:
            user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()

        user_profile = models.UserProfile()
        user_profile.user = user
        user_profile.save()

        user_profile_serializer = UserProfileSerializer(instance=user_profile,
                                                        data={'location': self.initial_data['location'], 'user': {}},
                                                        partial=True)
        if user_profile_serializer.is_valid():
            user_profile_serializer.update()

        user_preferences = models.UserPreferences()
        user_preferences.user = user
        user_preferences.save()

        # user_financial_account = models.FinancialAccount()
        # user_financial_account.owner = user
        # user_financial_account.type = 'general'
        # user_financial_account.save()

        if self.validated_data.get('is_requester', True):
            user_profile.is_requester = True
            user_profile.save()
            requester_financial_account = models.FinancialAccount()
            requester_financial_account.owner = user
            requester_financial_account.type = models.FinancialAccount.TYPE_REQUESTER
            requester_financial_account.save()

        has_profile_info = self.validated_data.get('is_requester', False) or self.validated_data.get('is_worker',
                                                                                                     False)

        if self.validated_data.get('is_worker', True) or not has_profile_info:
            user_profile.is_worker = True
            user_profile.save()
            worker_financial_account = models.FinancialAccount()
            worker_financial_account.owner = user
            worker_financial_account.type = models.FinancialAccount.TYPE_WORKER
            worker_financial_account.save()

        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') + username).hexdigest()
            registration_model = models.UserRegistration()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email(email=user.email, host=self.context['request'].get_host(),
                                  activation_key=activation_key)
            registration_model.save()
        return user
    def create(self, **kwargs):
        username = ''

        validated_username = self.validated_data['first_name'].lower() + '.' + self.validated_data['last_name'].lower()
        username_check = User.objects.filter(username=validated_username).count()

        if username_check == 0 and len(validated_username) <= settings.USERNAME_MAX_LENGTH:
            username = validated_username
        else:
            username = get_next_unique_id(User, 'username', validated_username)
            if len(username) > settings.USERNAME_MAX_LENGTH:
                if len(self.validated_data['email']) <= settings.USERNAME_MAX_LENGTH:
                    username = self.validated_data['email']
                else:
                    username = uuid.uuid4().hex[:settings.USERNAME_MAX_LENGTH]

        user = User.objects.create_user(username, self.validated_data.get('email'),
                                        self.initial_data.get('password1'))

        # if settings.EMAIL_ENABLED:
        user.is_active = 0
        user.first_name = self.validated_data['first_name']
        user.last_name = self.validated_data['last_name']
        user.save()

        user_profile = models.UserProfile.objects.create(user=user, is_worker=False, is_requester=False,
                                                         handle=username)
        profile_data = {
            'location': self.initial_data.get('location', {}),
            'birthday': self.initial_data.get('birthday', None),
            'user': {}
        }
        user_profile_serializer = UserProfileSerializer(instance=user_profile, data=profile_data, partial=True)

        if user_profile_serializer.is_valid():
            user_profile = user_profile_serializer.update()

        update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE, 'is_worker', 0)
        update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE, 'is_requester', 0)
        # update_worker_cache([user.id], constants.ACTION_UPDATE_PROFILE, 'birthday_year',
        #                     user_profile.birthday.year)

        models.UserPreferences.objects.create(user=user)

        # if self.validated_data.get('is_requester', True):
        #     user_profile.is_requester = True
        #     user_profile.save()
        #     requester_financial_account = models.FinancialAccount()
        #     requester_financial_account.owner = user
        #     requester_financial_account.type = models.FinancialAccount.TYPE_REQUESTER
        #     requester_financial_account.save()
        #
        # has_profile_info = self.validated_data.get('is_requester', False) or self.validated_data.get('is_worker',
        #                                                                                              False)

        # if self.validated_data.get('is_worker', True) or not has_profile_info:
        #     user_profile.is_worker = True
        #     user_profile.save()
        #     worker_financial_account = models.FinancialAccount()
        #     worker_financial_account.owner = user
        #     worker_financial_account.type = models.FinancialAccount.TYPE_WORKER
        #     worker_financial_account.save()

        if settings.EMAIL_ENABLED:
            salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
            if isinstance(username, str):
                username = username.encode('utf-8')
            activation_key = hashlib.sha1(salt.encode('utf-8') + username).hexdigest()
            registration_model = models.UserRegistration()
            registration_model.user = User.objects.get(id=user.id)
            registration_model.activation_key = activation_key
            send_activation_email(email=user.email, host=self.context['request'].get_host(),
                                  activation_key=activation_key)
            registration_model.save()

        if settings.DISCOURSE_BASE_URL and settings.DISCOURSE_API_KEY:
            try:
                client = DiscourseClient(
                    settings.DISCOURSE_BASE_URL,
                    api_username='******',
                    api_key=settings.DISCOURSE_API_KEY)

                client.create_user(name=user.get_full_name(),
                                   username=user.profile.handle,
                                   email=user.email,
                                   password=self.initial_data.get('password1'),
                                   active=True,
                                   approved=True)
            except Exception:
                print("Failed to create Discourse user!")

        return user