def oauth_new_user(request, name): from film20.utils.utils import direct_to_template logger.info("registering new %s user", name) reg_data = request.session.get('oauth_reg_data') access_token = reg_data['access_token'] user_info = reg_data['user_info'] next = reg_data['next'] or '/' service = OAuthService.get_by_name(name) if request.POST: form = SSORegistrationForm(request.POST, request=request) if form.is_valid(): user = form.save() service.set_access_token(user, access_token, user_info['user_id']) try: Avatar.create_from_url(user, user_info['avatar_url']) except Exception, e: logger.warning(e) user = authenticate(service=service, user_id=user_info['user_id']) if user: auth_login_and_stats(request, user) logger.info("%s user (%s) authenticated and logged in, redirecting to %r", name, user, next) return new_user_registered_redirect(request, next) logger.error("Can't login to new created user %s" % user) assert False, "Can't login to new created user %s" % user else: logger.warning("invalid sso form: %s", form.errors)
def fb_register_user(request): from film20.account.views import get_next, new_user_registered_redirect from film20.account.forms import SSORegistrationForm reg_data = request.session.get('facebook_reg_data') if not reg_data: return HttpResponse("No reg data", status=400) user_details = reg_data['user_details'] access_token = reg_data['access_token'] fb_user = FBUser.create_or_update(user_details) user_details['avatar_url'] = fb_user.picture_url('large') uid = user_details['uid'] next = get_next(request) if request.POST: form = SSORegistrationForm(request.POST, request=request) if form.is_valid(): user = form.save() assoc = FBAssociation(user=user, fb_uid=uid, is_new=True, is_from_facebook=True, access_token=access_token) assoc.save() try: Avatar.create_from_url(user, user_details['avatar_url']) except Exception, e: logger.debug(e) user = authenticate(fb_uid=uid) login(request, user) return new_user_registered_redirect(request, next)
def get_signup_form( self ): user_details = self.user_details initial = dict( username=user_details.get('username', user_details.get('name')), email=user_details.get('email'), ) return SSORegistrationForm( initial=initial, request=self.request )
def fb_register_user(request, details): from film20.account.views import get_next, new_user_registered_redirect from film20.account.forms import SSORegistrationForm user_details = pickle.loads(base64.decodestring(details)) uid = user_details['uid'] next = get_next(request) if request.POST: form = SSORegistrationForm(request.POST, request=request) if form.is_valid(): user = form.save() assoc = FBAssociation(user=user, fb_uid=uid, is_new=True, is_from_facebook=True) assoc.save() try: Avatar.create_from_url(user, user_details['avatar_url']) except Exception, e: logger.debug(e) user = authenticate(user_id=user.id, fb_uid=uid) login(request, user) return new_user_registered_redirect(request, next)
def openid_new_user(request): next = get_next(request) if request.method == 'POST': form = SSORegistrationForm(request.POST, request=request) if form.is_valid(): from django_openidauth.models import associate_openid from django.contrib.auth import load_backend new_user = form.save() associate_openid( new_user, request.openid ) backend = load_backend('django.contrib.auth.backends.ModelBackend') new_user.backend = '%s.%s' % ( backend.__module__, backend.__class__.__name__ ) auth_login(request, new_user) return new_user_registered_redirect(request, next or '/') else: initial = dict( next=next, ) form = SSORegistrationForm(initial=initial, request=request) return direct_to_template(request, "account/sso_registration.html", { 'form':form, })
def register(request, success_url='/accounts/register/complete/', template_name='openid_register.html', already_registered_url='/'): """ Allows a new user to register an account. A customised variation of the view of the same name from django-registration. Context:: form The registration form Template:: registration/registration_form.html (or template_name argument) """ if request.method == 'POST': form = SSORegistrationForm(request.POST) if form.is_valid(): new_user = form.save() associate_openid( new_user, request.openid ) next = form.cleaned_data['next'] print 'next',next # Unfortunately we have to annotate the user with the # 'django.contrib.auth.backends.ModelBackend' backend, or stuff breaks backend = load_backend('django.contrib.auth.backends.ModelBackend') new_user.backend = '%s.%s' % ( backend.__module__, backend.__class__.__name__ ) log_user_in(request, new_user) return HttpResponseRedirect(next or success_url) else: if request.user.is_authenticated(): return HttpResponseRedirect( already_registered_url ) form = SSORegistrationForm(initial={'next':request.GET.get('next','')}) return render_to_response(template_name, { 'form': form }, context_instance=RequestContext(request))
def post( self, request, *args, **kw ): user_details = self.user_details is_signup = 'signup' in request.POST tmp_user = request.unique_user if is_signup: self.form = SSORegistrationForm(self.request.POST, request=self.request) self.signup_form = self.form self.login_form = self.get_login_form() else: self.form = LoginForm( self.request.POST ) self.login_form = self.form self.signup_form = self.get_signup_form() context = self.get_context_data(*args, **kw) if self.form.is_valid(): if is_signup: user = self.form.save() else: user = self.form.user fb_user = FBUser.create_or_update(user_details) FBAssociation.objects.create( fb_uid = fb_user.id, fb_user = fb_user, user = user) user = auth.authenticate(fb_uid=fb_user.id) auth.login(self.request, user) participation = ContestParticipation.objects.get(contest=self.contest, fb_user=fb_user) participation.user = user participation.save() if not is_signup and tmp_user and tmp_user.username.startswith('fb-'): # user logged in, remove temporary user tmp_user.delete() return http.HttpResponseRedirect(reverse(self.on_success_view)) return self.render_to_response(context)
user = None is_new = not bool(user) if user: # check if user associated with email from fb has association already try: assoc = FBAssociation.objects.get(user=user) return user except FBAssociation.DoesNotExist, e: pass if not user: if username: data = dict(username=username, email=email) form = SSORegistrationForm(data, request=request) if not form.is_valid(): raise AutoCreateException('invalid registration data: %r' % form.errors) user = form.save() else: username = user_details.get('username') or user_details.get( 'name', '') username = username and clean_username(username) try_cnt = 0 while try_cnt < 100: data = dict( username=username + (try_cnt and str(try_cnt) or ""),
if user: auth_login_and_stats(request, user) logger.info("%s user (%s) authenticated and logged in, redirecting to %r", name, user, next) return new_user_registered_redirect(request, next) logger.error("Can't login to new created user %s" % user) assert False, "Can't login to new created user %s" % user else: logger.warning("invalid sso form: %s", form.errors) else: logger.debug(user_info) initial = dict( next=next, username=user_info.get('username'), email=user_info.get('email'), ) form = SSORegistrationForm(initial=initial, request=request) return direct_to_template(request, "account/sso_registration.html", { 'form':form, 'user_info':user_info, }) def openid_new_user(request): next = get_next(request) if request.method == 'POST': form = SSORegistrationForm(request.POST, request=request) if form.is_valid(): from django_openidauth.models import associate_openid from django.contrib.auth import load_backend new_user = form.save() associate_openid( new_user, request.openid )
user = None is_new = not bool(user) if user: # check if user associated with email from fb has association already try: assoc = FBAssociation.objects.get(user=user) return user except FBAssociation.DoesNotExist, e: pass if not user: if username: data = dict(username=username, email=email) form = SSORegistrationForm(data, request=request) if not form.is_valid(): raise AutoCreateException('invalid registration data: %r' % form.errors) user = form.save() else: username = user_details.get('username') or user_details.get('name', '') username = username and clean_username(username) try_cnt = 0 while try_cnt < 100: data = dict( username=username + (try_cnt and str(try_cnt) or ""), email=email, )