def student_login(request): """ Allows user to login :param request: any request :return: a page to login OR redirect to dashboard if valid login credentials """ form = StudentLoginForm() if request.method == 'POST': form = StudentLoginForm(request.POST) if form.is_valid(): # 'authenticate' not used because it fails, but since this succeeds I don't understand why it fails. # LM 11/6/14 username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = User.objects.get(username=username, password=password) user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) fan = FanPage.objects.get(fan=user) change_current_role(request, RoleController.ENTITY_FAN, fan.id) return HttpResponseRedirect('/challenges/students') return render(request, 'spuddercern/pages/login.html', {'form': form})
def accounts_activate_role(request, entity_type, entity_id): role = RoleController.GetRoleForEntityTypeAndID( entity_type, entity_id, RoleBase.RoleWrapperByEntityType(entity_type)) change_current_role(request, entity_type, entity_id) next_url = request.GET.get('next', None) if next_url is None: next_url = role.home_page_path return redirect(next_url or '/users')
def migrate_from_amazon(request): """ Helps student migrate from account using Amazon Login :param request: any request :return: a form to migrate account (similar to registration) or a redirect to CERN dashboard """ form = StudentMigrateForm() if request.method == 'POST': form = StudentMigrateForm(request.POST) if form.is_valid(): email = (form.cleaned_data.get('email_address') or "").strip().lower() password = form.cleaned_data.get('password') try: stu = form.student except AttributeError: user = User.objects.get(username=email) else: user = stu.user user.username = email user.password = password user.save() messages.success(request, "<h4><i class='fa fa-check'></i> Your password has been updated.</h4>") for s in Student.objects.filter(user=user): s.migrated = True # Can't use a get_or_create bc don't know required field "username" try: fan = FanPage.objects.get(fan=user) except FanPage.DoesNotExist: stu = Student.objects.filter(user=user)[0] username = "******" % (user_name(user), "Head " if stu.isHead else "", stu.school.name) fan = FanPage(fan=user, username=username) fan.save() # create fan role role_controller = RoleController(user) fan_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN) ) change_current_role(request, RoleController.ENTITY_FAN, fan.id) user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) return HttpResponseRedirect('/challenges/students') return render(request, 'spuddercern/pages/migrate_from_amazon.html', {'form': form})
def register_club(request): initial_data = dict(request.GET.iteritems()) if request.current_role.entity_type == RoleController.ENTITY_FAN: initial_data['state'] = request.current_role.entity.state form = RegisterCreateClubForm(initial=initial_data) if request.method == 'POST': form = RegisterCreateClubForm(data=request.POST) if form.is_valid(): data = form.cleaned_data name = data.get('name') at_name = data.get('at_name') sport = data.get('sport') description = data.get('description') state = data.get('state') address = data.get('address') club = Club(name=name, address=address, description=description, state=state) club.save() club_admin = ClubAdministrator(club=club, admin=request.user) club_admin.save() change_current_role(request, RoleController.ENTITY_CLUB_ADMIN, club_admin.id) team = TeamPage(name=name, at_name=at_name, free_text=description, state=state, sport=sport) team.save() team_admin = TeamAdministrator( entity_type=request.current_role.entity_type, entity_id=request.current_role.entity.id, team_page=team) team_admin.save() tca = TeamClubAssociation(team_page=team, club=club) tca.save() following_tag = FanFollowingEntityTag( fan=request.current_role.entity, tag=at_name, entity_id=team.id, entity_type=EntityController.ENTITY_TEAM) following_tag.save() start_following(request.current_role, EntityController.ENTITY_TEAM, team.id) return redirect('/club/dashboard?message=just_registered') return render(request, 'spudderspuds/challenges/pages/register_create_club.html', {'form': form})
def _state_engine_process_login(request, challenge, engine, state, template_data): response = None next_state = _StateEngineStates.NOTICE if engine == "pledge-only": next_state = _StateEngineStates.PLEDGE if request.current_role: state = next_state else: form = ChallengesSigninForm(initial=request.GET) if request.method == "POST": form = ChallengesSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) request.current_role = change_current_role(request) state = next_state response = redirect('/challenges/%s/%s/%s' % (challenge.id, engine, state)) template_data['form'] = form if state == _StateEngineStates.LOGIN: response = render( request, 'spudderspuds/challenges/pages_ajax/signin.html', template_data) return response, state
def fan_signin(request): if request.current_role: return redirect(request.current_role.home_page_path) template_data = {} form = FanSigninForm(initial=request.GET) if request.method == "POST": form = FanSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) fan = FanPage.objects.filter(fan=user)[0] role = change_current_role(request) is_signin_claiming_spud( request, fan, form.cleaned_data.get('twitter', None), form.cleaned_data.get('spud_id', None)) redirect_to = request.session.pop('redirect_after_auth', role.home_page_path) return redirect(redirect_to) template_data["form"] = form return render_to_response( 'spudderspuds/pages/user_signin.html', template_data, context_instance=RequestContext(request))
def _add_current_role(self, request): current_role = None if request.user and request.user.is_authenticated(): role_controller = RoleController(request.user) current_role = request.session.get('current_role', None) if not current_role: one_ane_only_role = select_most_appropriate_user_role(role_controller) if one_ane_only_role: current_role = { 'entity_type': one_ane_only_role.entity_type, 'entity_id': one_ane_only_role.entity.id} if current_role: change_current_role(request, current_role['entity_type'], current_role['entity_id']) current_role = role_controller.role_by_entity_type_and_entity_id( current_role['entity_type'], current_role['entity_id'], RoleBase.RoleWrapperByEntityType(current_role['entity_type'])) request.current_role = current_role
def register_club(request): initial_data = dict(request.GET.iteritems()) if request.current_role.entity_type == RoleController.ENTITY_FAN: initial_data['state'] = request.current_role.entity.state form = RegisterCreateClubForm(initial=initial_data) if request.method == 'POST': form = RegisterCreateClubForm(data=request.POST) if form.is_valid(): data = form.cleaned_data name = data.get('name') at_name = data.get('at_name') sport = data.get('sport') description = data.get('description') state = data.get('state') address = data.get('address') club = Club(name=name, address=address, description=description, state=state) club.save() club_admin = ClubAdministrator(club=club, admin=request.user) club_admin.save() change_current_role(request, RoleController.ENTITY_CLUB_ADMIN, club_admin.id) team = TeamPage(name=name, at_name=at_name, free_text=description, state=state, sport=sport) team.save() team_admin = TeamAdministrator( entity_type=request.current_role.entity_type, entity_id=request.current_role.entity.id, team_page=team) team_admin.save() tca = TeamClubAssociation(team_page=team, club=club) tca.save() following_tag = FanFollowingEntityTag( fan=request.current_role.entity, tag=at_name, entity_id=team.id, entity_type=EntityController.ENTITY_TEAM) following_tag.save() start_following(request.current_role, EntityController.ENTITY_TEAM, team.id) return redirect('/club/dashboard?message=just_registered') return render( request, 'spudderspuds/challenges/pages/register_create_club.html', {'form': form})
def _add_current_role(self, request): current_role = None if request.user and request.user.is_authenticated(): role_controller = RoleController(request.user) current_role = request.session.get('current_role', None) if not current_role: one_ane_only_role = select_most_appropriate_user_role( role_controller) if one_ane_only_role: current_role = { 'entity_type': one_ane_only_role.entity_type, 'entity_id': one_ane_only_role.entity.id } if current_role: change_current_role(request, current_role['entity_type'], current_role['entity_id']) current_role = role_controller.role_by_entity_type_and_entity_id( current_role['entity_type'], current_role['entity_id'], RoleBase.RoleWrapperByEntityType( current_role['entity_type'])) request.current_role = current_role
def signin(request): form = ChallengesSigninForm(initial=request.GET) if request.method == "POST": form = ChallengesSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) role = change_current_role(request) redirect_url = form.cleaned_data.get('next') or role.home_page_path return redirect(redirect_url) return render(request, 'spudderspuds/challenges/pages/signin.html', {'form': form})
def create_and_activate_fan_role(request, user): # get or create fan role fan, created = FanPage.objects.get_or_create(fan=user) fan.save() # set new users to follow [email protected] fan if feature_is_enabled('all_fans_auto_follow_main_spudder_fan') and created: main_account = User.objects.get( email=settings.MAIN_SPUDDER_FAN_ACCOUNT_EMAIL) main_fan = FanPage.objects.get(fan=main_account) current_entity = RoleController.GetRoleForEntityTypeAndID( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)) start_following(current_entity, RoleController.ENTITY_FAN, main_fan.id) # activate role role_controller = RoleController(user) role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)) change_current_role(request, RoleController.ENTITY_FAN, fan.id) return RoleFan(fan)
def create_and_activate_fan_role(request, user): # get or create fan role fan, created = FanPage.objects.get_or_create(fan=user) fan.save() # set new users to follow [email protected] fan if feature_is_enabled('all_fans_auto_follow_main_spudder_fan') and created: main_account = User.objects.get(email=settings.MAIN_SPUDDER_FAN_ACCOUNT_EMAIL) main_fan = FanPage.objects.get(fan=main_account) current_entity = RoleController.GetRoleForEntityTypeAndID( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)) start_following(current_entity, RoleController.ENTITY_FAN, main_fan.id) # activate role role_controller = RoleController(user) role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)) change_current_role(request, RoleController.ENTITY_FAN, fan.id) return RoleFan(fan)
def signin(request): form = ChallengesSigninForm(initial=request.GET) if request.method == "POST": form = ChallengesSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) role = change_current_role(request) redirect_url = form.cleaned_data.get('next') or role.home_page_path return redirect(redirect_url) return render( request, 'spudderspuds/challenges/pages/signin.html', {'form': form})
def _state_engine_process_login(request, challenge, engine, state, template_data): response = None next_state = _StateEngineStates.NOTICE if engine == "pledge-only": next_state = _StateEngineStates.PLEDGE if request.current_role: state = next_state else: form = ChallengesSigninForm(initial=request.GET) if request.method == "POST": form = ChallengesSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) request.current_role = change_current_role(request) state = next_state response = redirect('/challenges/%s/%s/%s' % (challenge.id, engine, state)) template_data['form'] = form if state == _StateEngineStates.LOGIN: response = render(request, 'spudderspuds/challenges/pages_ajax/signin.html', template_data) return response, state
def fan_signin(request): if request.current_role: return redirect(request.current_role.home_page_path) template_data = {} form = FanSigninForm(initial=request.GET) if request.method == "POST": form = FanSigninForm(request.POST) if form.is_valid(): username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = authenticate(username=username, password=password) login(request, user) fan = FanPage.objects.filter(fan=user)[0] role = change_current_role(request) is_signin_claiming_spud(request, fan, form.cleaned_data.get('twitter', None), form.cleaned_data.get('spud_id', None)) redirect_to = request.session.pop('redirect_after_auth', role.home_page_path) return redirect(redirect_to) template_data["form"] = form return render_to_response('spudderspuds/pages/user_signin.html', template_data, context_instance=RequestContext(request))
def fan_register(request): # Should the current_role be here? should_be_here, response = should_current_role_be_here(request) if not should_be_here: return response # Extract an invitation if there is one invitation = extract_invitation_from_request(request) template_data = {'tab': request.GET.get('tab', 'fan')} form = FanRegisterForm(initial=request.GET) club_form = RegisterClubWithFanForm() if request.method == "POST": is_valid = True tab = request.POST.get('tab') template_data['tab'] = tab if tab == 'org': club_form = RegisterClubWithFanForm(request.POST) is_valid = club_form.is_valid() form = FanRegisterForm(request.POST) if is_valid and form.is_valid(): # Get the form data username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') state = form.cleaned_data.get('state') # Create the auth.User user = User.objects.create_user(username, username, password) user.save() user.spudder_user.mark_password_as_done() # Create the Fan fan_role = create_and_activate_fan_role(request, user) request.current_role = fan_role fan_page = fan_role.entity fan_page.state = state at_name = create_at_name_from_email_address(username) fan_page.username = at_name fan_page.save() # Login the user login(request, authenticate(username=username, password=password)) is_signin_claiming_spud( request, fan_role.entity, form.cleaned_data.get('twitter', None), form.cleaned_data.get('spud_id', None)) if invitation: if invitation.invitation_type == Invitation.REGISTER_AND_ADMINISTRATE_TEAM_INVITATION: team_admin = TeamAdministrator(entity_type=fan_role.entity_type, entity_id=fan_role.entity.id) team_admin.team_page_id = invitation.target_entity_id team_admin.save() invitation.status = Invitation.ACCEPTED_STATUS invitation.save() elif invitation.invitation_type == Invitation.AFFILIATE_INVITE_CLUB_ADMINISTRATOR: fan_role.entity.affiliate = Affiliate.objects.get(name=invitation.extras['affiliate_name']) return HttpResponseRedirect('/spudderaffiliates/invitation/%s/create_club' % invitation.id) return redirect('/fan/follow?origin=invitation') if tab == 'org': # Get the form data club_name = club_form.cleaned_data.get('name') # Create the club club = Club(name=club_name, state=state) club.save() # Create the club admin club_admin = ClubAdministrator(club=club, admin=user) club_admin.save() club_admin_role = change_current_role(request, RoleController.ENTITY_CLUB_ADMIN, club_admin.id) request.current_role = club_admin_role EventController.RegisterEvent(request, EventController.CLUB_REGISTERED) return redirect(request.current_role.home_page_path) template_data["form"] = form template_data['club_form'] = club_form return render(request, 'spudderspuds/pages/user_register.html', template_data)
def migrate_from_amazon(request): """ Helps student migrate from account using Amazon Login :param request: any request :return: a form to migrate account (similar to registration) or a redirect to CERN dashboard """ form = StudentMigrateForm() if request.method == 'POST': form = StudentMigrateForm(request.POST) if form.is_valid(): email = (form.cleaned_data.get('email_address') or "").strip().lower() password = form.cleaned_data.get('password') try: stu = form.student except AttributeError: user = User.objects.get(username=email) else: user = stu.user user.username = email user.password = password user.save() messages.success( request, "<h4><i class='fa fa-check'></i> Your password has been updated.</h4>" ) for s in Student.objects.filter(user=user): s.migrated = True # Can't use a get_or_create bc don't know required field "username" try: fan = FanPage.objects.get(fan=user) except FanPage.DoesNotExist: stu = Student.objects.filter(user=user)[0] username = "******" % (user_name( user), "Head " if stu.isHead else "", stu.school.name) fan = FanPage(fan=user, username=username) fan.save() # create fan role role_controller = RoleController(user) fan_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType( RoleController.ENTITY_FAN)) change_current_role(request, RoleController.ENTITY_FAN, fan.id) user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) return HttpResponseRedirect('/challenges/students') return render(request, 'spuddercern/pages/migrate_from_amazon.html', {'form': form})
def fan_register(request): # Should the current_role be here? should_be_here, response = should_current_role_be_here(request) if not should_be_here: return response # Extract an invitation if there is one invitation = extract_invitation_from_request(request) template_data = {'tab': request.GET.get('tab', 'fan')} form = FanRegisterForm(initial=request.GET) club_form = RegisterClubWithFanForm() if request.method == "POST": is_valid = True tab = request.POST.get('tab') template_data['tab'] = tab if tab == 'org': club_form = RegisterClubWithFanForm(request.POST) is_valid = club_form.is_valid() form = FanRegisterForm(request.POST) if is_valid and form.is_valid(): # Get the form data username = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') state = form.cleaned_data.get('state') # Create the auth.User user = User.objects.create_user(username, username, password) user.save() user.spudder_user.mark_password_as_done() # Create the Fan fan_role = create_and_activate_fan_role(request, user) request.current_role = fan_role fan_page = fan_role.entity fan_page.state = state at_name = create_at_name_from_email_address(username) fan_page.username = at_name fan_page.save() # Login the user login(request, authenticate(username=username, password=password)) is_signin_claiming_spud(request, fan_role.entity, form.cleaned_data.get('twitter', None), form.cleaned_data.get('spud_id', None)) if invitation: if invitation.invitation_type == Invitation.REGISTER_AND_ADMINISTRATE_TEAM_INVITATION: team_admin = TeamAdministrator( entity_type=fan_role.entity_type, entity_id=fan_role.entity.id) team_admin.team_page_id = invitation.target_entity_id team_admin.save() invitation.status = Invitation.ACCEPTED_STATUS invitation.save() elif invitation.invitation_type == Invitation.AFFILIATE_INVITE_CLUB_ADMINISTRATOR: fan_role.entity.affiliate = Affiliate.objects.get( name=invitation.extras['affiliate_name']) return HttpResponseRedirect( '/spudderaffiliates/invitation/%s/create_club' % invitation.id) return redirect('/fan/follow?origin=invitation') if tab == 'org': # Get the form data club_name = club_form.cleaned_data.get('name') # Create the club club = Club(name=club_name, state=state) club.save() # Create the club admin club_admin = ClubAdministrator(club=club, admin=user) club_admin.save() club_admin_role = change_current_role( request, RoleController.ENTITY_CLUB_ADMIN, club_admin.id) request.current_role = club_admin_role EventController.RegisterEvent(request, EventController.CLUB_REGISTERED) return redirect(request.current_role.home_page_path) template_data["form"] = form template_data['club_form'] = club_form return render(request, 'spudderspuds/pages/user_register.html', template_data)
def register_school(request, school_id, referral_id=None): """ Renders the signup page for a new student at a certain school :param request: request to render page :param school_id: the ID of the school which the student will register with :param referral_id: an optional param which indicates a referral by another student :return: a simple register form (email + password) """ try: school = School.objects.get(id=school_id) except ObjectDoesNotExist: return HttpResponseRedirect('/cern/register/') else: referrer = None if referral_id: try: referrer = Student.objects.get(id=referral_id) except ObjectDoesNotExist: referral_id = None form = StudentRegistrationForm() if request.method == 'POST': form = StudentRegistrationForm(request.POST) if form.is_valid(): # Create and login user email = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = User(username=email, email=email, password=password) user.save() # Create student stu = Student(school=school, referred_id=referral_id, user=user) if school.num_students() == 0: stu.isHead = True stu.save() signed_up(stu) if referral_id: referrer = Student.objects.get(id=referral_id) recruited_new_student(referrer, school) # Create fan for user username = "******" % (user_name( user), "Head " if stu.isHead else "", stu.school.name) fan = FanPage(fan=user, username=username) fan.save() user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) role_controller = RoleController(user) # create the student role student_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_STUDENT, stu.id, RoleBase.RoleWrapperByEntityType( RoleController.ENTITY_STUDENT)) # create fan role fan_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType( RoleController.ENTITY_FAN)) # activate highest priority role (fan) change_current_role(request) return HttpResponseRedirect('/challenges/students') return render( request, 'spuddercern/pages/register_login.html', { 'school': school, 'referrer': referrer, 'form': form, 'base_url': settings.SPUDMART_BASE_URL })
def register_school(request, school_id, referral_id=None): """ Renders the signup page for a new student at a certain school :param request: request to render page :param school_id: the ID of the school which the student will register with :param referral_id: an optional param which indicates a referral by another student :return: a simple register form (email + password) """ try: school = School.objects.get(id=school_id) except ObjectDoesNotExist: return HttpResponseRedirect('/cern/register/') else: referrer = None if referral_id: try: referrer = Student.objects.get(id=referral_id) except ObjectDoesNotExist: referral_id = None form = StudentRegistrationForm() if request.method == 'POST': form = StudentRegistrationForm(request.POST) if form.is_valid(): # Create and login user email = form.cleaned_data.get('email_address') password = form.cleaned_data.get('password') user = User(username=email, email=email, password=password) user.save() # Create student stu = Student(school=school, referred_id=referral_id, user=user) if school.num_students() == 0: stu.isHead = True stu.save() signed_up(stu) if referral_id: referrer = Student.objects.get(id=referral_id) recruited_new_student(referrer, school) # Create fan for user username = "******" % (user_name(user), "Head " if stu.isHead else "", stu.school.name) fan = FanPage(fan=user, username=username) fan.save() user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) role_controller = RoleController(user) # create the student role student_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_STUDENT, stu.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_STUDENT) ) # create fan role fan_role = role_controller.role_by_entity_type_and_entity_id( RoleController.ENTITY_FAN, fan.id, RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN) ) # activate highest priority role (fan) change_current_role(request) return HttpResponseRedirect('/challenges/students') return render(request, 'spuddercern/pages/register_login.html', { 'school': school, 'referrer': referrer, 'form': form, 'base_url': settings.SPUDMART_BASE_URL })