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()
Beispiel #3
0
 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
Beispiel #5
0
 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()