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))
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'), }
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()
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)
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
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"), }
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)
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)
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)))
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)))