Exemple #1
0
 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)
Exemple #2
0
 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)
Exemple #3
0
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
Exemple #4
0
    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())
Exemple #5
0
    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)
Exemple #6
0
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} 
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
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,}