def do_c(self, request, token = ''): if not token: # TODO: show a form where they can paste in their token? raise Http404 token = token.rstrip('/').encode('utf8') try: value = signed.unsign(token, key = ( self.confirm_link_secret or settings.SECRET_KEY ) + self.confirm_link_salt) except signed.BadSignature: return self.show_message( request, self.invalid_token_message, self.invalid_token_message + ': ' + token ) # Only line change compared with django-openid user_id = value user = self.lookup_user_by_id(user_id) if not user: # Maybe the user was deleted? return self.show_error(request, self.r_user_not_found_message) # Check user is NOT active but IS in the correct group if self.user_is_unconfirmed(user): # Confirm them try: user = User.view('%s/users_by_username' % User._meta.app_label, key=user.username, include_docs=True).first() except ResourceNotFound: user = None if user: self.mark_user_confirmed(user) self.log_in_user(request, user) return self.on_registration_complete(request) else: return self.show_error(request, self.c_already_confirmed_message)
def lookup_openid(self, request, identity_url): openid = UserOpenidAssociation.view('%s/openid_view' % UserOpenidAssociation._meta.app_label, key=identity_url, include_docs=True).first() if openid: return User.view('%s/users_by_username' % User._meta.app_label, reduce=False, key=openid['user_id'], include_docs=True).all()
def clean_email(self): email = self.cleaned_data.get('email', '') try: email_count = User.view('%s/users_by_email' % User._meta.app_label, key = email).count() except ResourceNotFound: email_count = 0 if self.no_duplicate_emails and email_count > 0: raise forms.ValidationError, self.duplicate_email_error return email
def user_is_unconfirmed(self, user): count = 0 try: count = User.view('%s/users_by_username' % User._meta.app_label, key=user.username, include_docs=True).count() except ResourceNotFound: return False if count: return True return False
def do_profile(self, request): if request.method == "GET": user_data = Person.view("world/by_user_id", key=request.user.id, include_docs=True).first() if user_data: form = PersonForm(data=user_data.to_json()) ctx_dict = {"form": form} if form.data.get("photo", None): photo = urlparse.urljoin(settings.MEDIA_URL, "site_media/%s" % form.data["photo"]) ctx_dict.update({"photo": photo}) else: ctx_dict = {"form": PersonForm(initial={"email": request.user.email})} return render(request, "person/edit_profile.html", ctx_dict) user_data = request.POST.copy() # Stuff the user id and full name # The full name is stored now to prevent HTTP requests later user_data["user_id"] = request.user.id user_data["email"] = request.user.email user = User.view( "%s/users_by_username" % User._meta.app_label, key=request.user.username, include_docs=True ).first() user_data["full_name"] = user.get_full_name() vf = PersonForm(user_data, request.FILES) if vf.is_valid(): # Let's handle the image first. if vf.cleaned_data.get("photo"): photo_name = request.FILES["photo"].name base_upload_path = os.path.basename(os.path.abspath(settings.PROFILE_PIC_UPLOAD_PATH)) upload_path = os.path.join(settings.PROFILE_PIC_UPLOAD_PATH, request.user.id) if not os.path.exists(upload_path): os.mkdir(upload_path) img_file = open(os.path.join(upload_path, photo_name), "w") img_file.write(request.FILES["photo"].read()) relative_dir = os.path.join(base_upload_path, os.path.basename(upload_path)) vf.cleaned_data.update({"photo": os.path.join(relative_dir, os.path.basename(img_file.name))}) img_file.close() data = Person.view("world/by_user_id", key=request.user.id, include_docs=True).first() if not data: data = Person() for (field, val) in vf.cleaned_data.items(): setattr(data, field, val) data.save() return render( request, "person/edit_profile.html", { "form": PersonForm(vf.cleaned_data), "photo": vf.cleaned_data.get("photo"), "message": ugettext("Successfully saved the data."), }, ) return render( request, "person/edit_profile.html", {"form": vf, "message": ugettext("Please correct the errors on the page")}, )
def suggest_nickname(self, nickname): "Return a suggested nickname that has not yet been taken" if not nickname: return '' original_nickname = nickname suffix = None username_exists = True while username_exists: try: username_exists = User.view('%s/users_by_username' % User._meta.app_label, key=nickname, include_docs=True).count() except ResourceNotFound: username_exists = False if not username_exists: break if suffix is None: suffix = 1 else: suffix += 1 nickname = original_nickname + str(suffix) return nickname
def lookup_user_by_username(self, username): return User.view('%s/users_by_username' % User._meta.app_label, reduce=False, key=username, include_docs=True).first()
def lookup_users_by_email(self, email): return User.view('%s/users_by_email' % User._meta.app_label, key=email, include_docs=True).first()