def parse_indiegogo_csv_and_sanitise_usernames(filepath): try: with open(filepath, newline='') as csvfile: backer_data_reader = csv.reader(csvfile, delimiter=',') header_row = next(backer_data_reader) name_col, email_col, username_col, badge_keyword_col = get_column_numbers_for_indiegogo(header_row) for row in backer_data_reader: name = row[name_col] email = row[email_col] username = sanitise_username(row[username_col]) badge_keyword = row[badge_keyword_col] if badge_keyword: badge = Badge.objects.get(keyword=badge_keyword) else: badge = None UserInvite = get_user_invite_model() if username is None or username == '0' or username is '': print('Username was empty for:', name) username = get_temporary_username(email) print('Using generated random username @', username) print(username, email) update_invite(name=name, email=email, username=username, badge=badge) except IOError as e: print('Unable to read file') raise e
def check_can_create_invite(user, nickname): if user.invite_count == 0: raise ValidationError(_('You have no invites left')) UserInvite = get_user_invite_model() if UserInvite.objects.filter(invited_by=user, nickname=nickname).exists(): raise ValidationError('Nickname already in use')
def on_valid_request_data(self, data): email = data.get('email') password = data.get('password') is_of_legal_age = data.get('is_of_legal_age') name = data.get('name') avatar = data.get('avatar') token = data.get('token') User = get_user_model() UserInvite = get_user_invite_model() user_invite = UserInvite.get_invite_for_token(token=token) username = user_invite.username if not user_invite.username: username = User.get_temporary_username(email) with transaction.atomic(): new_user = User.create_user(username=username, email=email, password=password, name=name, avatar=avatar, is_of_legal_age=is_of_legal_age, badge=user_invite.badge) user_invite.created_user = new_user user_invite.save() user_auth_token = new_user.auth_token return Response({ 'token': user_auth_token.key, 'username': new_user.username }, status=status.HTTP_201_CREATED)
def parse_conflicts_csv(filepath): # Hack: Since username is unique, we populate name field with username during # parsing of this csv so we can import all records. # This is a one time operation before launch. try: with open(filepath, newline='') as csvfile: backer_data_reader = csv.reader(csvfile, delimiter=',') header_row = next(backer_data_reader) name_col, email_col = get_column_numbers_for_conflicts_csv( header_row) for row in backer_data_reader: email = row[email_col] username = row[name_col] UserInvite = get_user_invite_model() if username is None or username is '0' or username is '': print('Username was empty for:', username) continue invited_user = UserInvite.create_invite(name=username, email=email, username=None) invited_user.save() except IOError as e: print('Unable to read file') raise e
def post(self, request): serializer = RegisterTokenSerializer(data=request.data) serializer.is_valid(raise_exception=True) validated_data = serializer.validated_data token = validated_data.get('token') UserInvite = get_user_invite_model() # raises error if invalid #UserInvite.check_token_is_valid(token=token) return ApiMessageResponse(_('Token valid'), status=status.HTTP_202_ACCEPTED)
def update_invite(email, name=None, username=None, badge=None): UserInvite = get_user_invite_model() invites = UserInvite.objects.filter(email=email) if len(invites) == 2: invite = invites.filter(username=username).first() if invite is None: invite = invites.last() else: invite = invites.first() invite.username = username invite.save() print('New username is: ', invite.username) return invite
def create_invite(cls, email=None, name=None, username=None, badge=None, nickname=None, invited_by=None): UserInvite = get_user_invite_model() invite = UserInvite.objects.create(nickname=nickname, name=name, email=email, username=username, badge=badge, invited_by=invited_by) invite.token = invite.generate_token() invite.save() return invite
def handle(self, *args, **options): UserInvite = get_user_invite_model() name = options.get('name', None) email = options.get('email', None) username = options.get('username', None) badge_keyword = options.get('badge', None) badge = None if badge_keyword: Badge = get_badge_model() badge = Badge.objects.get(keyword=badge_keyword) user_invite = UserInvite.create_invite(name=name, email=email, username=username, badge=badge) logger.info('Invite created. Invite Token: ' + user_invite.token)
def on_valid_request_data(self, data): email = data.get('email') phone_number = data.get('phone_number') password = data.get('password') is_of_legal_age = data.get('is_of_legal_age') are_guidelines_accepted = data.get('are_guidelines_accepted') name = data.get('name') username = data.get('username') avatar = data.get('avatar') token = data.get('token') User = get_user_model() UserInvite = get_user_invite_model() # user_invite = UserInvite.get_invite_for_token(token=token) if not username: username = "******" # user_invite.username # if not username and not user_invite.username: # username = User.get_temporary_username(email) with transaction.atomic(): new_user = User.create_user( username=username, email=email, phone_number=phone_number, password=password, name=name, avatar=avatar, is_of_legal_age=is_of_legal_age, are_guidelines_accepted=are_guidelines_accepted) # user_invite.created_user = new_user # user_invite.save() user_auth_token = new_user.auth_token return Response( { 'token': user_auth_token.key, 'username': new_user.username }, status=status.HTTP_201_CREATED)
def check_is_creator_of_invite_with_id(user, invite_id): UserInvite = get_user_invite_model() if not UserInvite.objects.filter(id=invite_id, invited_by=user).exists(): raise ValidationError(_('Invite was not created by you'))
def check_if_invite_is_not_used(user, invite_id): UserInvite = get_user_invite_model() invite = UserInvite.objects.get(id=invite_id) if invite.created_user: raise ValidationError( _('Invite is already used and cannot be deleted'))
def check_can_send_email_invite_to_invite_id(user, invite_id, email): check_is_creator_of_invite_with_id(user=user, invite_id=invite_id) UserInvite = get_user_invite_model() invite = UserInvite.objects.get(id=invite_id) if invite.email == email: raise ValidationError(_('Invite email already sent to this address'))