def test_send_epistle_by_id(self): #@TODO: as this test illustrates, we should make a "send_epistle" function in queries u1 = queries.create_user(username = '******', password='******') u2 = queries.create_user(username = '******', password='******') ep = Epistle(u1.id, u2.id, u'test epistle', subject = u'a simple test') self.dbsession.add(ep) self.dbsession.flush() epd = queries.get_epistle_by_recipient_id(u1.id)[0] self.assertEqual(ep.id, epd.id)
def test_create_user(self, username = None): if not username: username = '******' u = queries.create_user(username = username, password = username,) res = self.dbsession.query(User).filter(User.name == username).first() self.assertEqual(res.id, u.id) self.assertEqual(res.name, u.name)
def create_local_user(fb_info, local_username, request = None): u = queries.create_user(origination='facebook', remote_object=fb_info, username=local_username) if request: profile_picture = request.session['u_fbgraph'].get_connections(fb_info['id'], "picture") up = queries.add_user_picture("{0}-fbprofile.jpg".format(fb_info['id']), fb_info['id'], request.registry.settings['user.picture_upload_directory'], profile_picture) u.picture = up dbsession.add(u) return u
def test_domain_parse(self): title = 'test' description = 'test' #@TODO: we should make this accept a fake user id in test mode at least # so that we don't have huge cascading failures if create_user is broken user = queries.create_user(username='******', password='******') sub = Submission(title, description, 'http://google.com', user.id) self.assertEqual('google.com', sub.get_domain_name()) sub = Submission(title, description, 'http://googlewww.com', user.id) self.assertEqual('googlewww.com', sub.get_domain_name()) sub = Submission(title, description, 'https://google.com', user.id) self.assertEqual('google.com', sub.get_domain_name())
def test_create_submission(self): #@TODO: another function that should be split out of the view for easy repitition. # if the view code changes substantially, this test will not keep up user = queries.create_user(username = '******', password = '******') url = 'http://google.com' title = 'test' description = 'test' if url != '' and url is not None: url = queries.strip_all_html(url) if not re.match(r'http[s]*:\/\/', url): url = 'http://' + url else: # set to None so that NULL goes into the database url = None sub = Submission(title, description, url, user.id) self.dbsession.add(sub) self.dbsession.flush() s = queries.get_story_by_id(sub.id) self.assertEqual(s.id, sub.id)
def complete_auth(request, auth_toks): # create a twython object with our request-specific tokens # these tokens are used only to learn if the user accepted our request # for permissions. tmp_twit = Twython(twitter_token = request.registry.settings['twitter.app_key'], twitter_secret = request.registry.settings['twitter.app_secret'], oauth_token = auth_toks['oauth_token'], oauth_token_secret = auth_toks['oauth_token_secret']) final_toks = tmp_twit.get_authorized_tokens() # create a session-permanent twython object containing the permanent tokens for this user. # this object must be used to read any data from the user's account. u_twit = Twython(twitter_token = request.registry.settings['twitter.app_key'], twitter_secret = request.registry.settings['twitter.app_secret'], oauth_token = final_toks['oauth_token'], oauth_token_secret = final_toks['oauth_token_secret']) request.session['u_twit'] = u_twit username = "******".format(final_toks['oauth_token']) screen_name = final_toks['screen_name'] # check if user already exists; if not, please create try: u = queries.get_user_by_name(username) #@TODO: add something to ensure we are in sync with the twitter profile picture # unless specifically overridden by the user except sqlalchemy.orm.exc.NoResultFound: u = queries.create_user(origination='twitter', username=username, remote_object=final_toks) import urllib2 image_data = urllib2.urlopen("http://api.twitter.com/1/users/profile_image/{0}.json".format(screen_name)) orig_filename = "{0}-twitter-pic.png".format(screen_name) up_dir = request.registry.settings['user.picture_upload_directory'] u.picture = queries.add_user_picture(orig_filename, str(u.id)[:7], up_dir, image_data) dbsession.add(u) return {'final_toks': final_toks, 'u': u}
def test_find_by_id_user(self): # depends on functional test_create_user u = queries.create_user(username = '******', password='******') res = queries.find_by_id(u.id) self.assertEqual(res.id, u.id) self.assertEqual(res.name, u.name)
def test_get_user_by_name(self): u = queries.create_user(username = '******', password='******') res = queries.get_user_by_name(u.name) self.assertEqual(u.id, res.id)
def login(request): #@FIXME: this uses a request handling method with success with which I was experimenting # it is not used elsewhere and is a pain to read and write # success = False causes a page to stop drawing and "error out" # some error conditions therefore don't set success to false because it's more convenient # to draw the rest of the page. # # someone should adapt this to be less success-centric and read less branchy. s = request.session success = True # check for facebook login, provided by Facebook's JS SDK try: fb_cookie = fb.extract_from_cookie(request) try: u = queries.get_user_by_name(fb_cookie['local_username']) except sqlalchemy.orm.exc.NoResultFound: u = fb.create_local_user(fb_cookie['info'], fb_cookie['local_username'], request = request) try: queries.login_user(request, u, None, bypass_password = True) except LoginAdapterExc: pass except LoginAdapterExc: pass if 'logout' in request.session['safe_params']: if 'logged_in' in s: del s['logged_in'] del s['users.id'] if 'u_fbgraph' in s: del s['u_fbgraph'] del s['u_fbinfo'] if 'u_twit' in s: del s['u_twit'] s['message'] = "You have been logged out, thanks." success = True else: s['message'] = "You are not logged in." success = True else: logged_in = False if 'logged_in' in s: s['message'] = "You are already logged in." logged_in = True else: if 'message' not in s: if 'last_login_status' in s: s['message'] = s['last_login_status'] del s['last_login_status'] else: s['message'] = "Please log in." p = request.session['safe_post'] prm = request.session['safe_params'] username = None if 'username' in prm: username = queries.strip_all_html(prm['username']) if p: dbsession = DBSession() if request.session['safe_get']['act'] == 'register': if logged_in: try: u = queries.get_user_by_id(s['users.id']) if u.temporary: queries.create_user(temp_to_perm = True, extant_id = s['users.id'], username = username, password = p['password'], origination = 'site') s['message'] = "Your anonymous profile has been converted, thanks." else: s['message'] = "You can't register while you're logged in." except sqlalchemy.exc.IntegrityError: s['message'] = "This username is already registered, sorry." dbsession.rollback() else: try: queries.create_user(username = username, password = p['password'], origination = 'site') s['message'] = "Successfully registered." success = True except sqlalchemy.exc.IntegrityError: s['message'] = "This username is already registered, sorry." success = False dbsession.rollback() elif request.session['safe_get']['act'] == 'update_pw': if p['new_password'] != p['new_password_confirm']: s['message'] = 'New password doesn\'t match confirmation, please try again.' else: u = queries.get_user_by_id(s['users.id']) if u.verify_pw(p['old_password']): u.password = u.hash_pw(p['new_password']) dbsession.add(u) s['message'] = 'Password updated.' success = True else: s['message'] = 'Old password invalid.' else: try: u = queries.get_user_by_name(username) try: queries.login_user(request, u, p['password']) s['message'] = "Good, logged in" success = True return HTTPFound(request.route_url('post')) except LoginAdapterExc: s['message'] = "Incorrect password." success = False except sqlalchemy.orm.exc.NoResultFound: s['message'] = "Sorry, I don't know you." success = False return {'success': success,}