def test_logout(self): """ Make sure that logging out works If the person is logged in, make sure the person gets logged out and is redirected properly. If the person is already logged out, return the user to the page before the user tried to log out. """ # Initialize url_test = url('person_index') # Add person meta.Session.add(model.Person(username, model.hashString(password), nickname, email)) meta.Session.commit() # Logging out should redirect back self.assert_(url_test in self.app.get(url('person_logout', targetURL=h.encodeURL(url_test)))) # Log in self.assert_('Login' in self.app.get(url('person_login', targetURL=h.encodeURL(url_test)))) self.assertEqual(simplejson.dumps({'isOk': 1}), self.app.post(url('person_login_'), dict(username=username, password=password)).body) # Logging out should redirect back self.assert_(url_test in self.app.get(url('person_logout', targetURL=h.encodeURL(url_test))))
def confirm(self, ticket): "Confirm changes" # Send feedback candidate = confirmPersonCandidate(ticket) # If the candidate exists, if candidate: messageCode = "updated" if candidate.person_id else "created" else: messageCode = "expired" # Return return redirect(url("person_login", targetURL=h.encodeURL("/"), messageCode=messageCode))
def logout(self, targetURL=h.encodeURL("/")): "Logout" # If the person is logged in, if h.isPerson(): del session["minutesOffset"] del session["personID"] del session["nickname"] del session["is_super"] session.save() # Redirect return redirect(url(h.decodeURL(targetURL)))
def test_login(self): """ Make sure that logging in works Ensure that the login page shows Ensure that bad credentials result in an error message Ensure that good credentials result in a proper redirect """ # Initialize url_test = url('person_update') # Assert that the login page shows and stores url self.assert_('Login' in self.app.get(url('person_login', targetURL=h.encodeURL(url_test)))) # Add person meta.Session.add(model.Person(username, model.hashString(password), nickname, email)) meta.Session.commit() # Log in using bad credentials self.assertEqual(simplejson.dumps({'rejection_count': 1, 'isOk': 0}), self.app.post(url('person_login_'), dict(username=username, password=password + 'x')).body) # Log in using good credentials self.assertEqual(simplejson.dumps({'isOk': 1}), self.app.post(url('person_login_'), dict(username=username, password=password)).body)
def update(self): "Show account update page" # Load personID = h.getPersonID() # If the person is not logged in, if not personID: # Return return redirect(url("person_login", targetURL=h.encodeURL("/"))) # Render c.isNew = False person = Session.query(model.Person).get(personID) # Return return formencode.htmlfill.render( render("/people/change.mako"), { "username": person.username, "nickname": person.nickname, "email": person.email, "email_sms": person.email_sms, }, )
def login(self, targetURL=h.encodeURL("/")): "Show login form" c.messageCode = request.GET.get("messageCode") c.targetURL = h.decodeURL(targetURL) c.recaptchaPublicKey = config.get("recaptcha.public", "") return render("/people/login.mako")
def test_update(self): """ Make sure that updating credentials works Make sure the update page only appears when the user is logged in Make sure the update form is filled with the user's credentials Make sure that update_ only works when the user is logged in Make sure that update confirmation works """ # Assert that we are redirected to the login page if the person is not logged in response = self.app.get(url('person_update')) self.assertEqual(urlparse.urlparse(response.response.location).path, url('person_login', targetURL=h.encodeURL('/'))) # Assert that we get rejected if we try to post without logging in self.assertEqual(simplejson.dumps({'isOk': 0}), self.app.post(url('person_update_')).body) # Add person meta.Session.add(model.Person(username, model.hashString(password), nickname, email, email_sms)) meta.Session.commit() # Log in self.app.post(url('person_login_'), dict(username=username, password=password)) # Assert that the update form is filled with the user's credentials responseBody = self.app.get(url('person_update')).body self.assert_(username in responseBody) self.assert_(nickname in responseBody) self.assert_(email in responseBody) self.assert_(email_sms in responseBody) # Update credentials newUsername = store.makeRandomString(16) newPassword = store.makeRandomAlphaNumericString(parameter.PASSWORD_LENGTH_AVERAGE) newNickname = unicode(store.makeRandomString(16)) newEmail = re.sub(r'.*@', store.makeRandomString(16) + '@', email) newEmailSMS = re.sub(r'.*@', store.makeRandomString(16) + '@', email) self.assertEqual(simplejson.dumps({'isOk': 1}), self.app.post(url('person_update_'), dict(username=newUsername, password=newPassword, nickname=newNickname, email=newEmail, email_sms=newEmailSMS)).body) # Make sure the credentials have not changed yet self.assertEqual(meta.Session.query(model.Person).filter_by(username=newUsername, password_hash=model.hashString(newPassword), nickname=newNickname, email=newEmail, email_sms=newEmailSMS).count(), 0) # Activate candidate self.app.get(url('person_confirm', ticket=meta.Session.query(model.PersonCandidate.ticket).filter_by(username=newUsername).first()[0])) # Make sure the credentials have changed self.assertEqual(meta.Session.query(model.Person).filter_by(username=newUsername, password_hash=model.hashString(newPassword), nickname=newNickname, email=newEmail, email_sms=newEmailSMS).count(), 1)