def execute(self, args): self._prepare(args) from django.contrib.auth.models import User from django_openid_auth.models import UserOpenID # Django took over logging and we need it back self.reset_logger(args, True) try: user = User.objects.get(username=args.username) except User.DoesNotExist: # We can only give up at that point, the user must exist. self.logger.error('Error: No such user [{}]'.format(args.username)) sys.exit(self.SYS_ERROR.NO_SUCH_WEB_ADMIN_USER) claimed_id = getattr(args, 'claimed-id') try: user_open_id = UserOpenID.objects.get(user=user) except UserOpenID.DoesNotExist: user_open_id = UserOpenID() user_open_id.user = user user_open_id.claimed_id = claimed_id user_open_id.display_id = claimed_id # Same value for display_id user_open_id.save() self._ok(args)
def confirm_openid(request, openid_id): session = {'id': request.session.session_key} current_url = settings.SITE_URL + request.path oidutil.log = openid_logging openid_consumer = consumer.Consumer(session, DjangoOpenIDStore()) if request.method == 'POST': info = openid_consumer.complete(request.POST, current_url) else: info = openid_consumer.complete(request.GET, current_url) if info.status == consumer.FAILURE: return render_to_response('account/openid_confirmationfailed.html', {'message': info.message}, context_instance=RequestContext(request)) elif info.status == consumer.CANCEL: return render_to_response('account/openid_confirmationfailed.html', {'message': '(cancelled by user)'}, context_instance=RequestContext(request)) elif info.status != consumer.SUCCESS: return render_to_response('account/openid_confirmationfailed.html', {'message': '(unknown verification error)'}, context_instance=RequestContext(request)) try: unconfirmed = UnconfirmedOpenId.objects.get(id=openid_id, user=request.user) except UnconfirmedOpenId.DoesNotExist: return render_to_response( 'account/openid_confirmationfailed.html', {'message': 'ID %s not found in the database.' % openid_id}, context_instance=RequestContext(request)) # TODO: check for a reasonable expiration time confirmed = ConfirmedOpenId() confirmed.user = unconfirmed.user confirmed.ip_address = request.META['REMOTE_ADDR'] confirmed.openid = unconfirmed.openid confirmed.save() unconfirmed.delete() # if there's a single image in this user's profile, assign it to the new email photos = confirmed.user.photos if photos.count() == 1: confirmed.set_photo(photos.get()) # Also allow user to login using this OpenID (if not taken already) if not UserOpenID.objects.filter(claimed_id=confirmed.openid).exists(): user_openid = UserOpenID() user_openid.user = request.user user_openid.claimed_id = confirmed.openid user_openid.display_id = confirmed.openid user_openid.save() return HttpResponseRedirect(reverse('libravatar.account.views.profile'))
def confirm_openid(request, openid_id): session = {'id': request.session.session_key} current_url = settings.SITE_URL + request.path oidutil.log = openid_logging openid_consumer = consumer.Consumer(session, DjangoOpenIDStore()) if request.method == 'POST': info = openid_consumer.complete(request.POST, current_url) else: info = openid_consumer.complete(request.GET, current_url) if info.status == consumer.FAILURE: return render_to_response('account/openid_confirmationfailed.html', {'message': info.message}, context_instance=RequestContext(request)) elif info.status == consumer.CANCEL: return render_to_response('account/openid_confirmationfailed.html', {'message': '(cancelled by user)'}, context_instance=RequestContext(request)) elif info.status != consumer.SUCCESS: return render_to_response('account/openid_confirmationfailed.html', {'message': '(unknown verification error)'}, context_instance=RequestContext(request)) try: unconfirmed = UnconfirmedOpenId.objects.get(id=openid_id, user=request.user) except UnconfirmedOpenId.DoesNotExist: return render_to_response('account/openid_confirmationfailed.html', {'message': 'ID %s not found in the database.' % openid_id}, context_instance=RequestContext(request)) # TODO: check for a reasonable expiration time confirmed = ConfirmedOpenId() confirmed.user = unconfirmed.user confirmed.ip_address = '0.0.0.0' confirmed.openid = unconfirmed.openid confirmed.save() unconfirmed.delete() # if there's a single image in this user's profile, assign it to the new email photos = confirmed.user.photos if photos.count() == 1: confirmed.set_photo(photos.get()) # Also allow user to login using this OpenID (if not taken already) if not UserOpenID.objects.filter(claimed_id=confirmed.openid).exists(): user_openid = UserOpenID() user_openid.user = request.user user_openid.claimed_id = confirmed.openid user_openid.display_id = confirmed.openid user_openid.save() return HttpResponseRedirect(reverse('libravatar.account.views.profile'))
def do_request(self, data, *args, **kwargs): # pylint: disable=unused-argument ''' Handle request, called by get() or post() ''' session = {'id': self.request.session.session_key} current_url = self.request.build_absolute_uri('/')[:-1] + \ self.request.path openid_consumer = consumer.Consumer(session, DjangoOpenIDStore()) info = openid_consumer.complete(data, current_url) if info.status == consumer.FAILURE: messages.error( self.request, _('Confirmation failed: "') + str(info.message) + '"') return HttpResponseRedirect(reverse_lazy('profile')) if info.status == consumer.CANCEL: messages.error(self.request, _('Cancelled by user')) return HttpResponseRedirect(reverse_lazy('profile')) if info.status != consumer.SUCCESS: messages.error(self.request, _('Unknown verification error')) return HttpResponseRedirect(reverse_lazy('profile')) try: unconfirmed = self.model.objects.get( # pylint: disable=no-member user=self.request.user, id=kwargs['openid_id']) except self.model.DoesNotExist: # pylint: disable=no-member messages.error(self.request, _('ID does not exist')) return HttpResponseRedirect(reverse_lazy('profile')) # TODO: Check for a reasonable expiration time confirmed = self.model_confirmed() confirmed.user = unconfirmed.user confirmed.ip_address = get_client_ip(self.request)[0] confirmed.openid = unconfirmed.openid confirmed.save() unconfirmed.delete() # If there is a single image in this user's profile # assign it to the new id if self.request.user.photo_set.count() == 1: confirmed.set_photo(self.request.user.photo_set.first()) # Also allow user to login using this OpenID (if not already taken) if not UserOpenID.objects.filter(claimed_id=confirmed.openid).exists(): # pylint: disable=no-member user_openid = UserOpenID() user_openid.user = self.request.user user_openid.claimed_id = confirmed.openid user_openid.display_id = confirmed.openid user_openid.save() return HttpResponseRedirect(reverse_lazy('profile'))