Exemple #1
0
    def _on_request_token_more(self, authorize_url, callback_uri, response, app_name):
        """
        :param authorize_url:
        :param callback_uri:
        :param response:
        :return:
        """
        if not response:
            logging.warning('Could not get OAuth request token.')
            abort(500)
        elif response.status_code < 200 or response.status_code >= 300:
            logging.warning('Invalid OAuth response (%d): %s',
                response.status_code, response.content)
            abort(500)

        request_token = _oauth_parse_responsex(response.content)
        data = '|'.join([request_token['key'], request_token['secret']])
        self.set_cookie('_oauth_request_token', data)
        args = dict(
            application_name=self._OAUTH_APP_NAME,
            oauth_callback=self.request.url,
            oauth_consumer_key=self._netflix_consumer_key(),
            oauth_token=request_token['key']
            )
        if callback_uri:
            args['oauth_callback'] = urlparse.urljoin(
                self.request.url, callback_uri)

        return redirect(authorize_url + '?' + urllib.urlencode(args))
Exemple #2
0
    def __init__(self, app, request):
        self.app = app
        self.request = request

        area_name = self.get_area_name()
        if area_name not in ('docs', 'www'):
            # TODO instead of 404, redirect to a page to create the area,
            # if the are doesn't exist.
            # For now, only 404 is allowed.
            abort(404)

        self.area = Area.get_by_key_name(area_name)
        if self.area is None:
            self.area = Area.get_or_insert(key_name=area_name, name=area_name)

        # Get sitename from config or use host minus port as default
        # sitename.
        sitename = self.request.host.rsplit(':', 1)[0]

        # Add some common stuff to context.
        self.context = self.request.context = {
            'area':           self.area,
            'current_url':    self.request.url,
            'sitename':       get_config('moe', 'sitename', sitename),
            'analytics_code': get_config('moe', 'analytics_code', None),
            'dev':            get_config('tipfy', 'dev'),
            'apps_installed': get_config('tipfy', 'apps_installed'),
        }
Exemple #3
0
    def _on_auth(self, user):
        if not user:
            abort(403)

        auth_id = 'google|%s' % user.pop('email', '')
        self.auth_login_with_third_party(auth_id, remember=True)
        return self._on_auth_redirect()
Exemple #4
0
def _admin_required(handler):
    """Implementation for admin_required and AdminRequiredMiddleware."""
    if not handler.auth_session:
        return handler.redirect(handler.auth_login_url())

    if not handler.auth_is_admin:
        abort(403)
Exemple #5
0
def get_by_id_or_404(model, id, parent=None):
    """Returns a model instance fetched by id or raises a 404 Not Found error.

    Example usage:

    .. code-block:: python

       from tipfy import RequestHandler
       from tipfy.ext.db import get_by_id_or_404
       from mymodels import Contact

       class EditContactHandler(RequestHandler):
           def get(self, **kwargs):
               contact = get_by_id_or_404(Contact, kwargs['contact_id'])

               # ... continue processing contact ...

    This function derives from `Kay <http://code.google.com/p/kay-framework/>`_.

    :param model:
        A ``db.Model`` class to load an entity.
    :param id:
        An id from a ``db.Key`` (an integer).
    :param parent:
        The parent entity for the requested entities, as a Model
        instance or Key instance, or None (the default) if the requested
        entities do not have a parent.
    :returns:
        A ``db.Model`` instance.
    """
    obj = model.get_by_id(id, parent=parent)
    if obj:
        return obj

    abort(404)
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)


        # try user name, fallback to uid.
        uid = str(user.get('uid', ''))
        username = user.get('username', None)
        if not username:
            username = uid
        
        _user = {}
        _user['uid'] = uid
        _user['name'] = user.get('name')
        _user['access_token'] = user.get('access_token')
        _user['expires_seconds'] = user.get('expires_seconds')
        _user['first_name'] = user.get('first_name')
        _user['last_name'] = user.get('last_name')
        _user['username'] = user.get('username')
        _user['profile_url'] = user.get('link')
        #_user['friend_ids'] = user['friend_ids']
        #_user[''] = user['']

        kwargs = _user

        auth_id = 'facebook|%s' % uid

        logging.info('attempting 3rd party login') 
        self.auth_login_with_third_party(auth_id=auth_id, remember=True, **kwargs)
        
        redirect = self._on_auth_redirect(override_continue=True)
        logging.info('_on_auth redirecting to: %s' % redirect.headers['Location']) 
        return redirect
Exemple #7
0
    def __init__(self, app, request):
        self.app = app
        self.request = request

        # Alias.
        self.current_user = self.auth_current_user

        area_name = self.get_area_name()
        if area_name not in ("docs", "www"):
            # TODO instead of 404, redirect to a page to create the area,
            # if the are doesn't exist.
            # For now, only 404 is allowed.
            abort(404)

        self.area = Area.get_by_key_name(area_name)
        if self.area is None:
            self.area = Area.get_or_insert(key_name=area_name, name=area_name)

        # Get sitename from config or use host minus port as default
        # sitename.
        sitename = self.request.host.rsplit(":", 1)[0]

        # Add some common stuff to context.
        self.context = self.request.context = {
            "area": self.area,
            "current_url": self.request.url,
            "sitename": get_config("moe", "sitename", sitename),
            "analytics_code": get_config("moe", "analytics_code", None),
            "dev": get_config("tipfy", "dev"),
            "apps_installed": get_config("tipfy", "apps_installed"),
        }
Exemple #8
0
def get_by_id_or_404(model, id, parent=None):
    """Returns a model instance fetched by id or raises a 404 Not Found error.

    Example usage:

    .. code-block:: python

       from tipfy import RequestHandler
       from tipfy.ext.db import get_by_id_or_404
       from mymodels import Contact

       class EditContactHandler(RequestHandler):
           def get(self, **kwargs):
               contact = get_by_id_or_404(Contact, kwargs['contact_id'])

               # ... continue processing contact ...

    This function derives from `Kay <http://code.google.com/p/kay-framework/>`_.

    :param model:
        A ``db.Model`` class to load an entity.
    :param id:
        An id from a ``db.Key`` (an integer).
    :param parent:
        The parent entity for the requested entities, as a Model
        instance or Key instance, or None (the default) if the requested
        entities do not have a parent.
    :returns:
        A ``db.Model`` instance.
    """
    obj = model.get_by_id(id, parent=parent)
    if obj:
        return obj

    abort(404)
Exemple #9
0
    def _on_auth(self, user):
        if not user:
            abort(403)

        auth_id = 'twitter|%s' % user.pop('username', '')
        self.auth_login_with_third_party(auth_id, remember=True,
            access_token=user.get('access_token'))
        return self._on_auth_redirect()
    def _on_auth(self, user=None):
        
        logging.info('User == '+str(user))
        
        logging.debug('OnAuth: Beginning.')
            
        session = self.request.args.get('session', False)
        
        logging.debug('OnAuth: Session = '+str(session))
        
        if session is False:
            abort(403)
        
        else:
            session_obj = json.loads(session)
            
            logging.debug('OnAuth: Decoded session object follows...')
            logging.debug('OnAuth: '+str(session_obj))
            
            u = memcache.get(str(session_obj['session_key']))

            if u is None:
                u = FacebookUser.get_by_key_name(str(session_obj['uid']))
                logging.debug('OnAuth: u 1st round = '+str(u))

            if u is None:
                u = FacebookUser(key_name=str(session_obj['uid']), uid=str(session_obj['uid'])).put()
                logging.debug('OnAuth: u 2nd round = '+str(u))
                
                
            logging.debug('OnAuth: u 3rd round = '+str(u))
            
            logging.debug('OnAuth: UID = '+str(session_obj['uid']))
            logging.debug('OnAuth: KEY = '+str(session_obj['session_key']))
                
            memcache.set(str(session_obj['uid']), u, time=3600)
            
            success_get = self.request.args.get('pledgeSuccess', False)
            
            if isinstance(u, db.Key):
                u_key_val = str(u)
            elif isinstance(u, db.Model):
                u_key_val = str(u.key())
            
            
            page_content_vars = {
            
                #'invites_form':EmailInvites(self.request),
                'pledge_form':PledgeLanding(self.request),                
                'fb_app_id':config.config['tipfy.ext.auth.facebook']['api_key'],
                'u_key':u_key_val,
                'pledgeSuccess':success_get,
                'debug':True,
                'dev':{'getvars':self.request.args.items(multi=True),'postvars':self.request.form.items(multi=True)}
            
            }
            
            return render_response('microsite.html', **page_content_vars)
Exemple #11
0
 def _on_auth(self, user):
     if not user:
         abort(403)
     
     username = user.pop('username', None)
     if not username:
         username = user.pop('uid', '')
     
     auth_id = 'facebook|%s' % username
     self.auth_login_with_third_party(auth_id, remember=True, session_key=user.get('session_key'))
     return self._on_auth_redirect()
    def post(self):

        action = self.request.form.get('action', False)
        if action  == False:
            abort(400)
            return Response('<b>No form action specified</b>')
            
        else:
            
            if action == 'submit':

                form = SendTextForm(self.request)

                ## Grab form values
                dest_list = form.dest_list.data
                message = form.message.data

                dest_list = db.Key(dest_list)
                
                memcache.delete('sms-send-list')
                memcache.set('sms-send-list', db.get(dest_list))

                deferred.defer(split_and_add_sms_tasks, dest_list, message)

            elif action == 'send':
                
                dest_number = self.request.form.get('number', False)
                message = self.request.form.get('message', False)
            
                account = twilio.Account(ACCOUNT_SID, ACCOUNT_TOKEN)
        
                d = {
                    'From' : CALLER_ID,
                    'To' : dest_number,
                    'Body' : message,
                }
                try:
                    response = account.request('/%s/Accounts/%s/SMS/Messages.json' % \
                                              (API_VERSION, ACCOUNT_SID), 'POST', d)
                                  
                    response_obj = json.loads(response)
        
                    logging.info('TW Response: '+str(response))
                    logging.info('SMS send successful.')
        
                    return Response('<b>A-OK (Send Successful)</b>')
                except Exception, e:
                    logging.error('Exception encountered.')
                    raise e                
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)

        # try user name, fallback to uid.
        username = user.pop('username', None)
        id = user.get('uid', '')
        if not username:
            username = id

        auth_id = 'facebook|%s' % id
        self.auth_login_with_third_party(auth_id, remember=True,
            session_key=user.get('session_key'))
        return self._on_auth_redirect()
    def get(self, type):

        try:
            type_o = getattr(models, type)

            type_q = type_o().all()
            if self.request.args.get('offset', False):
                p_link = True
                if int(self.request.args.get('offset')) < 26:
                    p_offset = 0
                else:
                    p_offset = int(self.request.args.get('offset')) - 25
                    
                type_q.offset(int(self.request.args.get('offset')))
            else:
                p_link = False
                p_offset = 0
            
            type_r = type_q.fetch(26)
            if len(type_r) > 25:
                n_link = True
                if self.request.args.get('offset', False):
                    n_offset = len(type_r)+self.request.args.get('offset')
                else:
                    n_offset = len(type_r)
            else:
                n_link = False
                n_offset = 0

            return self.render('admin/crud-list.html', type=type, records=type_r, previous_link=p_link, previous_offset=p_offset, next_link=n_link, next_offset=n_offset)
                
            
        except ImportError, e:
            return abort(404)
Exemple #15
0
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)

        # try user name, fallback to uid.
        username = user.pop('username', None)
        id = user.get('uid', '')
        if not username:
            username = id

        auth_id = 'facebook|%s' % id
        self.auth_login_with_third_party(auth_id,
                                         remember=True,
                                         session_key=user.get('session_key'))
        return self._on_auth_redirect()
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)

        # try user name, fallback to uid.
        uid = str(user.get('uid', ''))
        username = user.get('username', None)
        if not username:
            username = uid
            
        kwargs = user

        auth_id = 'facebook|%s' % uid
        logging.debug('auth_id is ' + auth_id + ' uid is ' + uid)
        self.auth_login_with_third_party(auth_id=auth_id, remember=True, **kwargs)
        return self._on_auth_redirect()
Exemple #17
0
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)

        # try user name, fallback to uid.
        uid = str(user.get('uid', ''))
        username = user.get('username', None)
        if not username:
            username = uid

        kwargs = user

        auth_id = 'facebook|%s' % uid
        logging.debug('auth_id is ' + auth_id + ' uid is ' + uid)
        self.auth_login_with_third_party(auth_id=auth_id,
                                         remember=True,
                                         **kwargs)
        return self._on_auth_redirect()
def get_fb_session(request):
    
    session = request.args.get('session', None)

    if session is not None:
        session_obj = json.loads(session)
                
        u = memcache.get(str(session_obj['session_key']))

        if u is None:
            u = FacebookUser.get_by_key_name(str(session_obj['uid']))

            if u is None:
                u = FacebookUser(key_name=str(session_obj['uid']), uid=str(session_obj['uid']), app_installed=installed).put()
            
            memcache.set(str(session_obj['uid']), u, time=3600)
        
        return session_obj, u

    else:
        abort(403)
    def _on_auth(self, user):
        """
        """
        if not user:
            abort(403)

        # try user name, fallback to uid.
        uid = str(user.get('uid', ''))
        username = user.get('username', None)
        if not username:
            username = uid
            
        kwargs = user

        auth_id = 'facebook|%s' % uid

        logging.info('attempting 3rd party login') 
        self.auth_login_with_third_party(auth_id=auth_id, remember=True, **kwargs)
        redirect =  self._on_auth_redirect(override_continue=True)
        
        logging.info('_on_auth redirecting to: %s' % redirect.headers['Location']) 
        return redirect
    def post(self):
        
        logging.info('Beginning new Pledge POST...')
        
        """ Submit and process submitted pledges. """
        form = PledgeLanding(self.request)
        try:
            logging.debug('Beginning validation...')


            if form.validate():

                logging.debug('Validation passed.')

                u_key = str(form.u_key.data).strip('=')
                u_fbid = str(form.u_fbid.data).strip('=')
                action = str(form.u_action.data)
                u_next_action = str(form.u_nextAction.data)
                u_prev_action = str(form.u_prevAction.data)
                firstname = str(form.firstname.data)
                lastname = str(form.lastname.data)
                email = str(form.email.data)
                phone = str(form.phone.data)
                message = str(form.message.data)
                
                logging.info('Submitted form POST data follows...')
                
                logging.info('action = '+action)
                logging.info('next = '+u_next_action)
                logging.info('prev = '+u_prev_action)
                logging.info('key = '+u_key)
                logging.info('firstname = '+firstname)
                logging.info('lastname = '+lastname)
                logging.info('email = '+email)
                logging.info('phone = '+phone)
                logging.info('message = '+message)                                                                                
        
        
                if action is not False:
                    
                    logging.debug('Action valid.')
            
                    if u_key is not False:
                        
                        ## Use Key or FBID, whichever exists
                        if u_key == '' or u_key is None:
                            if u_fbid == '' or u_key is None:
                                abort(400)
                                logging.error('Request failed because both fbid and key are missing.')
                                return Response('<b>Must provide FBID or U_KEY.')
                            else:
                                logging.info('Using FBID to identify user.')
                                u = FacebookUser.get_by_key_name(u_fbid)
                        else:
                            logging.info('Using KEY to identify user.')
                            u = db.get(db.Key(u_key))
                        
                        logging.info('User record: '+str(u))
                        
                        u.firstname = firstname
                        u.lastname = lastname
                        u.email = email
                        u.phone = phone
                        u.has_pledged = True
        
                        p = Pledge(u, user=u, personal_message=message)
                                
                        db.put([u, p])
                        
                        logging.debug('Put pledge and updated user.')
                
                        if u_next_action is not False:
                            
                            logging.debug('Redirecting to next action...')
                            return redirect(u_next_action)

                    else:
                        logging.error('Couldn\'t retrieve key. Exiting 404.')
                        abort(404)
                       
                else:
                    logging.error('Missing action. Exiting 400.')
                    abort(400)

        except ValidationError, e:
            logging.error('Form validation failed. Redirecting with error text.')
            self.redirect(self.request.headers.get('referrer')+'&validationError=true&error='+urllib2.urlencode(str(e.message)))
Exemple #21
0
    This function derives from `Kay <http://code.google.com/p/kay-framework/>`_.

    :param key:
        An encoded ``db.Key`` (a string).
    :returns:
        A ``db.Model`` instance.
    """
    try:
        obj = db.get(key)
        if obj:
            return obj
    except db.BadKeyError, e:
        # Falling through to raise the NotFound.
        pass

    abort(404)


def get_by_id_or_404(model, id, parent=None):
    """Returns a model instance fetched by id or raises a 404 Not Found error.

    Example usage:

    .. code-block:: python

       from tipfy import RequestHandler
       from tipfy.ext.db import get_by_id_or_404
       from mymodels import Contact

       class EditContactHandler(RequestHandler):
           def get(self, **kwargs):
    def post(self):
        
        logging.info('Beginning new outgoing email POST...')
        
        form = EmailInvites(self.request)
        try:
            logging.debug('Beginning validation...')


            if form.validate():

                logging.debug('Validation passed.')

                u_key = str(form.u_key.data).strip('=')
                u_fbid = str(form.u_fbid.data).strip('=')
                message = str(form.message.data)
                email_1 = str(form.email_1.data)
                email_2 = str(form.email_2.data)
                email_3 = str(form.email_3.data)
                email_4 = str(form.email_4.data)
                email_5 = str(form.email_5.data)
                
                logging.info('Submitted form POST data follows...')
                
                logging.info('key = '+u_key)
                logging.info('email 1 = '+email_1)
                logging.info('email 2 = '+email_2)
                logging.info('email 3 = '+email_3)
                logging.info('email 4 = '+email_4)
                logging.info('email 5 = '+email_5)
                logging.info('message = '+message)
                
                emails = [email_1, email_2, email_3, email_4, email_5]
            
                if u_key is not False:
                    
                    ## Use Key or FBID, whichever exists
                    if u_key == '' or u_key is None:
                        if u_fbid == '' or u_key is None:
                            abort(400)
                            logging.error('Request failed because both fbid and key are missing.')
                            return Response('<b>Must provide FBID or U_KEY.')
                        else:
                            logging.info('Using FBID to identify user.')
                            u = FacebookUser.get_by_key_name(u_fbid)
                    else:
                        logging.info('Using KEY to identify user.')
                        u = db.get(db.Key(u_key))
                    
                    logging.info('User record: '+str(u))

                    if message == '' or message is None:
                        message = 'Sign up for YVR today! (DEVTEST)'
                    
                    tickets = []

                    for email in emails:
                        if mail.is_email_valid(email):
                            tickets.append(OutboundEmail(user=u, to_email=email, subject='(DEV) YV Outbound Email', message=message))
                            

                    keys = db.put(tickets)

                    tasks = []
                    for item in keys:
                        t = taskqueue.Task(url='/_api/mail/send', params={'ticket':str(item)}).add(queue_name='outbound-mail')
            
                
                else:
                    logging.error('Couldn\'t retrieve key. Exiting 404.')
                    abort(404)
                   

        except ValidationError, e:
            logging.error('Form validation failed. Redirecting with error text.')
            self.redirect(self.request.headers.get('referrer')+'&validationError=true&error='+urllib2.urlencode(str(e.message)))
Exemple #23
0
    This function derives from `Kay <http://code.google.com/p/kay-framework/>`_.

    :param key:
        An encoded ``db.Key`` (a string).
    :returns:
        A ``db.Model`` instance.
    """
    try:
        obj = db.get(key)
        if obj:
            return obj
    except db.BadKeyError, e:
        # Falling through to raise the NotFound.
        pass

    abort(404)


def get_by_id_or_404(model, id, parent=None):
    """Returns a model instance fetched by id or raises a 404 Not Found error.

    Example usage:

    .. code-block:: python

       from tipfy import RequestHandler
       from tipfy.ext.db import get_by_id_or_404
       from mymodels import Contact

       class EditContactHandler(RequestHandler):
           def get(self, **kwargs):