Exemplo n.º 1
0
 def test_quoting(self):
     self.assert_strict_equal(urls.url_quote(u'\xf6\xe4\xfc'),
                              '%C3%B6%C3%A4%C3%BC')
     self.assert_strict_equal(urls.url_unquote(urls.url_quote(u'#%="\xf6')),
                              u'#%="\xf6')
     self.assert_strict_equal(urls.url_quote_plus('foo bar'), 'foo+bar')
     self.assert_strict_equal(urls.url_unquote_plus('foo+bar'), u'foo bar')
     self.assert_strict_equal(urls.url_quote_plus('foo+bar'), 'foo%2Bbar')
     self.assert_strict_equal(urls.url_unquote_plus('foo%2Bbar'),
                              u'foo+bar')
     self.assert_strict_equal(
         urls.url_encode({
             b'a': None,
             b'b': b'foo bar'
         }), 'b=foo+bar')
     self.assert_strict_equal(
         urls.url_encode({
             u'a': None,
             u'b': u'foo bar'
         }), 'b=foo+bar')
     self.assert_strict_equal(
         urls.url_fix(
             u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)'),
         'http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)')
     self.assert_strict_equal(urls.url_quote_plus(42), '42')
     self.assert_strict_equal(urls.url_quote(b'\xff'), '%FF')
Exemplo n.º 2
0
def handle_password_api():
    if not request.headers['Content-Type'] == 'application/json':
        return unsupported_media_type_api()

    payload = request.get_json()

    password = payload.get('password', None)

    if not password:
        return bad_request_api()

    time_period = payload.get('ttl', 'hour').lower()

    if not time_period in TIME_CONVERSION:
        return bad_request_api()

    ttl = TIME_CONVERSION[time_period]

    key = set_password(password, ttl)

    base_url = make_base_url()

    link_web = base_url + url_quote_plus(key)
    link_api = base_url + "api/" + url_quote_plus(key)

    data = {
        'web': link_web,
        'api': link_api,
    }

    return jsonify(data)
Exemplo n.º 3
0
def oracle_get():
	popular_words = oracle.popular_words(90)
	random.shuffle(popular_words)
	question = request.args.get("question")
	if question:
		show_cloud="block"
		answer = oracle.the_oracle_speaks(question)
		if answer.couplet['artist'].name['name_list'][0] == '':
			artist = answer.couplet['artist'].name['name_list'][1]
		else:
			artist = ' name_part_two '.join(answer.couplet['artist'].name['name_list']).strip()
		og_description="Asked the glitch oracle: '"+question+"' and am told '"+answer.couplet['couplet'][0]+answer.couplet['couplet'][1]+"'"
		page_title="The Glitch Oracle - Psychic Answers from the Infinite Glitch"
		meta_description="Asked the glitch oracle: '"+question+"' and am told '"+answer.couplet['couplet'][0]+answer.couplet['couplet'][1]+"'"
		# TODO: Turn every bit of this info into plain text, then make it possible to share these things.
		og_url="http://www.infiniteglitch.net/share_oracle/"+url_quote_plus(question)+"/"+url_quote_plus(answer.couplet['couplet'][0])+"/"+url_quote_plus(answer.couplet['couplet'][1])+"/"+url_quote_plus(artist)
	else:
		question = answer = ""
		show_cloud = "none"
		page_title="Ask The Glitch Oracle"
		og_description="Ask The Glitch Oracle"
		meta_description="Ask The Glitch Oracle"
		og_url="http://www.infiniteglitch.net/oracle"
	return render_template("oracle.html", page_title="Glitch Oracle", question=question, answer=answer,
							popular_words=popular_words,
							show_cloud=show_cloud, og_description=og_description, 
							meta_description=meta_description, og_url=og_url, url_quote_plus=url_quote_plus)
Exemplo n.º 4
0
    def stripe_form_generate_values(self, tx_values):
        self.ensure_one()

        base_url = self.get_base_url()
        stripe_session_data = {
            "payment_method_types[]":
            "card",
            "line_items[][amount]":
            int(tx_values["amount"] if tx_values["currency"].name in
                INT_CURRENCIES else float_round(tx_values["amount"] * 100, 2)),
            "line_items[][currency]":
            tx_values["currency"].name,
            "line_items[][quantity]":
            1,
            "line_items[][name]":
            tx_values["reference"],
            "client_reference_id":
            tx_values["reference"],
            "success_url":
            urls.url_join(base_url, StripeController._success_url) +
            "?reference=%s" % urls.url_quote_plus(tx_values["reference"]),
            "cancel_url":
            urls.url_join(base_url, StripeController._cancel_url) +
            "?reference=%s" % urls.url_quote_plus(tx_values["reference"]),
            "payment_intent_data[description]":
            tx_values["reference"],
            "customer_email":
            tx_values.get("partner_email")
            or tx_values.get("billing_partner_email"),
        }
        tx_values["session_id"] = self._create_stripe_session(
            stripe_session_data)

        return tx_values
Exemplo n.º 5
0
def mail_tag(env, mail, encode=None, **kwds):

    options = {
        'cc': None,
        'bcc': None,
        'subject': None,
        'body': None,
    }
    options.update(kwds)

    name = mail
    extras = []
    htmloptions = []
    for key, value in options.iteritems():
        if not value:
            continue
        elif 'cc' == key or 'bcc' == key:
            value = value.strip()
            if value:
                value = url_quote_plus(value)
                value = value.replace('+', '%20')
                value = value.replace('%40', '@')
                value = value.replace('%2C', ',')
                extras.append('%s=%s' % (key, value))
        elif 'body' == key or 'subject' == key:
            value = to_str(value).strip()
            if value:
                value = url_quote_plus(value)
                value = value.replace('+', '%20')
                extras.append('%s=%s' % (key, value))
        elif 'name' == key:
            name = value
        else:
            htmloptions.append('%s=%s' %
                               (jinja2.escape(key), jinja2.escape(value)))

    extras = '&'.join(extras)
    if extras:
        extras = '?' + extras
    htmloptions = ' '.join(htmloptions)

    if encode is None:
        result = '<a href="mailto:%s%s" %s>%s</a>' % (mail, extras,
                                                      htmloptions, name)

    else:
        mailto = obfuscate('mailto:%s' % mail)
        atag = '<a href="%s%s" %s>%s</a>' % (mailto, extras, htmloptions,
                                             obfuscate(name))
        if 'js' != encode:
            result = atag

        else:
            tmp = obfuscate('document.write(\'%s\');' % atag, js=True)
            result = '<script type="text/javascript">eval(unescape(\'%s\'));</script>' % tmp

    if env.autoescape:
        result = jinja2.Markup(result)
    return result
Exemplo n.º 6
0
def mail_tag(env, mail, encode=None, **kwds):
  
  options = {
    'cc':      None,
    'bcc':     None,
    'subject': None,
    'body':    None,
    }
  options.update(kwds)
  
  name = mail
  extras = []
  htmloptions = []
  for key, value in options.iteritems():
    if not value:
      continue
    elif 'cc' == key or 'bcc' == key:
      value = value.strip()
      if value:
        value = url_quote_plus(value)
        value = value.replace('+', '%20')
        value = value.replace('%40', '@')
        value = value.replace('%2C', ',')
        extras.append('%s=%s' % (key, value))
    elif 'body' == key or 'subject' == key:
      value = to_str(value).strip()
      if value:
        value = url_quote_plus(value)
        value = value.replace('+', '%20')
        extras.append('%s=%s' % (key, value))
    elif 'name' == key:
      name = value
    else:
      htmloptions.append('%s=%s' % (jinja2.escape(key), jinja2.escape(value)))
  
  extras = '&'.join(extras)
  if extras:
    extras = '?' + extras
  htmloptions = ' '.join(htmloptions)
  
  if encode is None:
    result = '<a href="mailto:%s%s" %s>%s</a>' % (mail, extras, htmloptions, name)
  
  else:
    mailto = obfuscate('mailto:%s' % mail)
    atag = '<a href="%s%s" %s>%s</a>' % (mailto, extras, htmloptions, obfuscate(name))
    if 'js' != encode:
      result = atag
    
    else:
      tmp = obfuscate('document.write(\'%s\');' % atag, js=True)
      result = '<script type="text/javascript">eval(unescape(\'%s\'));</script>' % tmp
  
  if env.autoescape:
    result = jinja2.Markup(result)
  return result
Exemplo n.º 7
0
 def test_quoting(self):
     self.assert_strict_equal(urls.url_quote(u'\xf6\xe4\xfc'), '%C3%B6%C3%A4%C3%BC')
     self.assert_strict_equal(urls.url_unquote(urls.url_quote(u'#%="\xf6')), u'#%="\xf6')
     self.assert_strict_equal(urls.url_quote_plus('foo bar'), 'foo+bar')
     self.assert_strict_equal(urls.url_unquote_plus('foo+bar'), u'foo bar')
     self.assert_strict_equal(urls.url_encode({b'a': None, b'b': b'foo bar'}), 'b=foo+bar')
     self.assert_strict_equal(urls.url_encode({u'a': None, u'b': u'foo bar'}), 'b=foo+bar')
     self.assert_strict_equal(urls.url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)'),
            'http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)')
     self.assert_strict_equal(urls.url_quote_plus(42), '42')
     self.assert_strict_equal(urls.url_quote(b'\xff'), '%FF')
Exemplo n.º 8
0
 def create_login_url(self, url):
   import os
   hostname = get_appid() + '.appspot.com'
   url = url_for("auth/login",
                 next=url_quote_plus(url),
                 original_host_url=url_quote_plus(local.request.host_url),
                 owned_domain_hack=True)
   if 'SERVER_SOFTWARE' in os.environ and \
         os.environ['SERVER_SOFTWARE'].startswith('Dev'):
     return url
   else:
     return "https://%s%s" % (hostname, url)
Exemplo n.º 9
0
 def create_login_url(self, url):
     import os
     hostname = get_appid() + '.appspot.com'
     url = url_for("auth/login",
                   next=url_quote_plus(url),
                   original_host_url=url_quote_plus(local.request.host_url),
                   owned_domain_hack=True)
     if 'SERVER_SOFTWARE' in os.environ and \
           os.environ['SERVER_SOFTWARE'].startswith('Dev'):
         return url
     else:
         return "https://%s%s" % (hostname, url)
Exemplo n.º 10
0
def mail_tag(env, mail, encode=None, **kwds):
  ### from symfony
  
  options = {
    'cc':      None,
    'bcc':     None,
    'subject': None,
    'body':    None,
    }
  options.update(kwds)
  
  name = mail
  extras = []
  htmloptions = []
  for key, value in options.iteritems():
    if not value:
      continue
    elif 'cc' == key or 'bcc' == key:
      value = value.strip()
      if value:
        value = url_quote_plus(value)
        value = value.replace('+', '%20')
        value = value.replace('%40', '@')
        value = value.replace('%2C', ',')
        extras.append('%s=%s' % (key, value))
    elif 'body' == key or 'subject' == key:
      value = to_str(value).strip()
      if value:
        value = url_quote_plus(value)
        value = value.replace('+', '%20')
        extras.append('%s=%s' % (key, value))
    elif 'name' == key:
      name = value
    else:
      htmloptions.append('%s=%s' % (jinja2.escape(key), jinja2.escape(value)))
  
  extras = ('?' + '&'.join(extras)) if extras else ''
  htmloptions = (' ' + ' '.join(htmloptions)) if htmloptions else ''
  
  if encode is None:
    e_mail = jinja2.escape(mail)
    e_name = jinja2.escape(name)
    result = '<a href="mailto:%s%s"%s>%s</a>' % (e_mail, extras, htmloptions, e_name)
  else:
    o_mail = obfuscate(env, 'mailto:%s' % mail)
    o_name = obfuscate(env, name)
    result = '<a href="%s%s"%s>%s</a>' % (o_mail, extras, htmloptions, o_name)
    if 'js' == encode:
      o_str = obfuscate(env, 'document.write(\'%s\');' % result, js=True)
      result = '<script type="text/javascript">eval(unescape(\'%s\'));</script>' % o_str
  
  return to_markup(env, result)
Exemplo n.º 11
0
def _url(req, action, id=None, errormsg=""):
	if id is not None and action == 'view' and len(errormsg) < 2:
		# I can do this because .htaccess has this line: 
		# RewriteRule ^([a-z0-9]+)$ /moerderspiel/view?id=$1 [R=302]
		return "%s%s" % (req.host_url, id)
	else:
		url = "%s%s" % (url_for('.index'), action)
		if id != None:
			url += '?id=' + id
		if len(errormsg) > 1 and id == None:
			url +=  '?msg=' + url_quote_plus(errormsg)
		elif len(errormsg) > 1:
			url +=  '&msg=' + url_quote_plus(errormsg)
		return url
Exemplo n.º 12
0
def _url(req, action, id=None, errormsg=""):
    if id is not None and action == 'view' and len(errormsg) < 2:
        # I can do this because .htaccess has this line:
        # RewriteRule ^([a-z0-9]+)$ /moerderspiel/view?id=$1 [R=302]
        return "%s%s" % (req.host_url, id)
    else:
        url = "%s%s" % (url_for('.index'), action)
        if id != None:
            url += '?id=' + id
        if len(errormsg) > 1 and id == None:
            url += '?msg=' + url_quote_plus(errormsg)
        elif len(errormsg) > 1:
            url += '&msg=' + url_quote_plus(errormsg)
        return url
Exemplo n.º 13
0
def test_quoting():
    strict_eq(urls.url_quote(u"\xf6\xe4\xfc"), "%C3%B6%C3%A4%C3%BC")
    strict_eq(urls.url_unquote(urls.url_quote(u'#%="\xf6')), u'#%="\xf6')
    strict_eq(urls.url_quote_plus("foo bar"), "foo+bar")
    strict_eq(urls.url_unquote_plus("foo+bar"), u"foo bar")
    strict_eq(urls.url_quote_plus("foo+bar"), "foo%2Bbar")
    strict_eq(urls.url_unquote_plus("foo%2Bbar"), u"foo+bar")
    strict_eq(urls.url_encode({b"a": None, b"b": b"foo bar"}), "b=foo+bar")
    strict_eq(urls.url_encode({u"a": None, u"b": u"foo bar"}), "b=foo+bar")
    strict_eq(
        urls.url_fix(u"http://de.wikipedia.org/wiki/Elf (Begriffsklärung)"),
        "http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)",
    )
    strict_eq(urls.url_quote_plus(42), "42")
    strict_eq(urls.url_quote(b"\xff"), "%FF")
Exemplo n.º 14
0
def test_quoting():
    assert urls.url_quote("\xf6\xe4\xfc") == "%C3%B6%C3%A4%C3%BC"
    assert urls.url_unquote(urls.url_quote('#%="\xf6')) == '#%="\xf6'
    assert urls.url_quote_plus("foo bar") == "foo+bar"
    assert urls.url_unquote_plus("foo+bar") == "foo bar"
    assert urls.url_quote_plus("foo+bar") == "foo%2Bbar"
    assert urls.url_unquote_plus("foo%2Bbar") == "foo+bar"
    assert urls.url_encode({b"a": None, b"b": b"foo bar"}) == "b=foo+bar"
    assert urls.url_encode({"a": None, "b": "foo bar"}) == "b=foo+bar"
    assert (
        urls.url_fix("http://de.wikipedia.org/wiki/Elf (Begriffsklärung)")
        == "http://de.wikipedia.org/wiki/Elf%20(Begriffskl%C3%A4rung)"
    )
    assert urls.url_quote_plus(42) == "42"
    assert urls.url_quote(b"\xff") == "%FF"
Exemplo n.º 15
0
    def serialize(self, expires=None):
        """Serialize the secure cookie into a string.

        If expires is provided, the session will be automatically invalidated
        after expiration when you unseralize it. This provides better
        protection against session cookie theft.

        :param expires: an optional expiration date for the cookie (a
                        :class:`datetime.datetime` object)
        """
        if self.secret_key is None:
            raise RuntimeError('no secret key defined')
        if expires:
            self['_expires'] = _date_to_unix(expires)
        result = []
        mac = hmac(self.secret_key, None, self.hash_method)
        for key, value in sorted(self.items()):
            result.append(('%s=%s' % (
                url_quote_plus(key),
                self.quote(value).decode('ascii')
            )).encode('ascii'))
            mac.update(b'|' + result[-1])
        return b'?'.join([
            base64.b64encode(mac.digest()).strip(),
            b'&'.join(result)
        ])
Exemplo n.º 16
0
def handle_password():
    try:
        r = requests.post('https://www.google.com/recaptcha/api/siteverify',
                          data={
                              'secret': SP_PRIVATE_KEY,
                              'response': request.form['g-recaptcha-response']
                          })
        google_response = json.loads(r.text)
        print('JSON: ', google_response)
    except:
        print("Error in captcha")
        google_response = ['exception error']
    if google_response['success']:
        ttl, password = clean_input()
        token = set_password(password, ttl)
        if NO_SSL:
            #        base_url = request.url_root
            base_url = "http://sendpass.ru/"
        else:
            base_url = STATIC_URL


#            base_url = request.url_root.replace("http://", "https://")
        if URL_PREFIX:
            base_url = base_url + URL_PREFIX.strip("/") + "/"
            link = base_url + url_quote_plus(token)
            return render_template('confirm.html', password_link=link)

    else:
        return render_template('set_password.html', password=password)
Exemplo n.º 17
0
    def validate_character(self, server_name, character_name):
        # Search for character
        character_name = character_name.encode('utf-8')
        url = self.lodestone_url + '/character/?q={}&worldname={}'.format(
            url_quote_plus(character_name), server_name)

        r = self.make_request(url=url)
        '''if not r:
            return None'''

        soup = bs4.BeautifulSoup(r.content, "html5lib")
        '''with open("data/searchsoup.txt", "a") as log_file:
            log_file.write(str(soup))
        log_file.close()'''

        if "Due to ongoing maintenance, this page is currently unavailable." in str(
                soup):
            return "lodestone is under maintainence. what did you do? what have you DONE????"

        for tag in soup.select('.entry'):
            char_name = tag.p.contents[0].encode('utf-8')
            if char_name.lower() == character_name.lower():
                return {
                    'lodestone_id': re.findall(r'(\d+)',
                                               str(tag.a['href']))[0],
                    'name': char_name,
                }

        return None
Exemplo n.º 18
0
def handle_password():
    token = []
    link = []

    ttl, password, duplicate = clean_input()
    for i in range(duplicate):
        token.append(set_password(password, ttl))

    if NO_SSL:
        if HOST_OVERRIDE:
            base_url = f'http://{HOST_OVERRIDE}/'
        else:
            base_url = request.url_root
    else:
        if HOST_OVERRIDE:
            base_url = f'https://{HOST_OVERRIDE}/'
        else:
            base_url = request.url_root.replace("http://", "https://")
    if URL_PREFIX:
        base_url = base_url + URL_PREFIX.strip("/") + "/"

    for i in range(duplicate):
        link.append(base_url + url_quote_plus(token[i]))

    if request.accept_mimetypes.accept_json and not request.accept_mimetypes.accept_html:
        return jsonify(link=link, ttl=ttl)
    else:
        return render_template('confirm.html', password_link=link)
Exemplo n.º 19
0
    def _get_canonical_url_localized(self, lang, canonical_params):
        """Returns the canonical URL for the current request with translatable
        elements appropriately translated in `lang`.

        If `request.endpoint` is not true, returns the current `path` instead.

        `url_quote_plus` is applied on the returned path.
        """
        self.ensure_one()
        if request.endpoint:
            router = request.httprequest.app.get_db_router(request.db).bind('')
            arguments = dict(request.endpoint_arguments)
            for key, val in list(arguments.items()):
                if isinstance(val, models.BaseModel):
                    if val.env.context.get('lang') != lang.code:
                        arguments[key] = val.with_context(lang=lang.code)
            path = router.build(request.endpoint, arguments)
        else:
            # The build method returns a quoted URL so convert in this case for consistency.
            path = urls.url_quote_plus(request.httprequest.path, safe='/')
        lang_path = ('/' +
                     lang.url_code) if lang != self.default_lang_id else ''
        canonical_query_string = '?%s' % urls.url_encode(
            canonical_params) if canonical_params else ''
        return self.get_base_url() + lang_path + path + canonical_query_string
Exemplo n.º 20
0
def handle_password():
    # ttl, password = clean_input() #edgarin
    time_period, password, email, message = clean_input()
    ttl = TIME_CONVERSION[time_period]
    timestamp = datetime.datetime.now().replace(microsecond=0).isoformat()
    contentObj = {
        'password': password,
        'email': email,
        'message': message,
        'timestamp': timestamp
    }  #edgarin
    expiration = get_expiry_date_formatted(time_period)

    # print(json.dumps(contentObj))
    token = set_password(json.dumps(contentObj), ttl)

    if NO_SSL:
        base_url = request.url_root
    else:
        base_url = request.url_root.replace("http://", "https://")
    link = base_url + url_quote_plus(token)
    async_send_mail('You set a secret', contentObj['email'],
                    get_secret_set_email_body(contentObj, time_period))

    return render_template('confirm.html',
                           password_link=link,
                           timestamp=timestamp.replace('T', ' '),
                           expiration=expiration)
Exemplo n.º 21
0
def admin_save():
    title = request.form.get('title', None)
    if not title:
        return redirect(url_for('admin_edit'))
    f = open('posts/' + urlsafe_b64encode(title), 'w')
    f.write(request.form.get('body', ''))
    f.close()
    return redirect(url_for('post', url=url_quote_plus(title)))
Exemplo n.º 22
0
 def create_login_url(self, next_url='/'):
   if hasattr(local.request, settings.MARKETPLACE_DOMAIN_NAME_KEY):
     # marketplace
     domain = getattr(local.request, settings.MARKETPLACE_DOMAIN_NAME_KEY)
     return create_marketplace_login_url(domain, next_url)
   return url_for('gaema/select_service',
                  targets='|'.join(self.valid_services),
                  next_url=url_quote_plus(next_url))
Exemplo n.º 23
0
 def test_quoting(self):
     assert urls.url_quote(u'\xf6\xe4\xfc') == '%C3%B6%C3%A4%C3%BC'
     assert urls.url_unquote(urls.url_quote(u'#%="\xf6')) == u'#%="\xf6'
     assert urls.url_quote_plus('foo bar') == 'foo+bar'
     assert urls.url_unquote_plus('foo+bar') == 'foo bar'
     assert urls.url_encode({'a': None, 'b': 'foo bar'}) == 'b=foo+bar'
     assert urls.url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)') == \
            'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'
Exemplo n.º 24
0
 def test_quoting(self):
     assert urls.url_quote(u'\xf6\xe4\xfc') == '%C3%B6%C3%A4%C3%BC'
     assert urls.url_unquote(urls.url_quote(u'#%="\xf6')) == u'#%="\xf6'
     assert urls.url_quote_plus('foo bar') == 'foo+bar'
     assert urls.url_unquote_plus('foo+bar') == 'foo bar'
     assert urls.url_encode({'a': None, 'b': 'foo bar'}) == 'b=foo+bar'
     assert urls.url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)') == \
            'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'
Exemplo n.º 25
0
def oracle_get():
    popular_words = oracle.popular_words(90)
    random.shuffle(popular_words)
    question = request.args.get("question")
    print(question)
    if not len(question) == 0:
        question = question
        show_cloud = "block"
        answer = oracle.the_oracle_speaks(question)
        if answer.couplet['artist'].name['name_list'][0] == '':
            artist = answer.couplet['artist'].name['name_list'][1]
        else:
            artist = ' name_part_two '.join(
                answer.couplet['artist'].name['name_list']).strip()
        og_description = "Asked the glitch oracle: '" + question + "' and am told '" + answer.couplet[
            'couplet'][0] + answer.couplet['couplet'][1] + "'"
        page_title = "The Glitch Oracle - Psychic Answers from the Infinite Glitch"
        meta_description = "Asked the glitch oracle: '" + question + "' and am told '" + answer.couplet[
            'couplet'][0] + answer.couplet['couplet'][1] + "'"
        og_url = "http://www.infiniteglitch.net/share_oracle/" + url_quote_plus(
            question) + "/" + url_quote_plus(
                answer.couplet['couplet'][0]) + "/" + url_quote_plus(
                    answer.couplet['couplet'][1]) + "/" + url_quote_plus(
                        artist)
        print(answer.couplet['artist'].name['display_name'])
        print(answer.couplet['couplet'][0])
        print(question)
        print(111111111)
        redirect(og_url)
    else:
        question, answer = ("", "")
        show_cloud = "none"
        page_title = "Ask The Glitch Oracle"
        og_description = "Ask The Glitch Oracle"
        meta_description = "Ask The Glitch Oracle"
        og_url = "http://www.infiniteglitch.net/oracle"
    return render_template("oracle.html",
                           page_title="Glitch Oracle",
                           question=question,
                           answer=answer,
                           popular_words=popular_words[:90],
                           show_cloud=show_cloud,
                           og_description=og_description,
                           meta_description=meta_description,
                           og_url=og_url,
                           url_quote_plus=url_quote_plus)
Exemplo n.º 26
0
 def create_login_url(self, next_url='/'):
     if hasattr(local.request, settings.MARKETPLACE_DOMAIN_NAME_KEY):
         # marketplace
         domain = getattr(local.request,
                          settings.MARKETPLACE_DOMAIN_NAME_KEY)
         return create_marketplace_login_url(domain, next_url)
     return url_for('gaema/select_service',
                    targets='|'.join(self.valid_services),
                    next_url=url_quote_plus(next_url))
Exemplo n.º 27
0
    def add_protected_view(self):
        url = '/_protected'
        quoted_url = url_quote_plus('/_protected')
        self.redirect_url = '/login?next={0}'.format(quoted_url)

        @self.app.route(url)
        @login_required
        def protected():
            return 'success'
Exemplo n.º 28
0
    def add_protected_view(self):
        url = '/_protected'
        quoted_url = url_quote_plus('/_protected')
        self.redirect_url = '/login?next={}'.format(quoted_url)

        @self.app.route(url)
        @login_required
        def protected():
            return 'success'
Exemplo n.º 29
0
def handle_password():
    ttl, password = clean_input()
    token = set_password(password, ttl)

    base_url = make_base_url()

    if URL_PREFIX:
        base_url = base_url + URL_PREFIX.strip("/") + "/"
    link = base_url + url_quote_plus(token)
    return render_template('confirm.html', password_link=link)
Exemplo n.º 30
0
def handle_password():
    ttl, password = clean_input()
    token = set_password(password, ttl)

    if NO_SSL:
        base_url = request.url_root
    else:
        base_url = request.url_root.replace("http://", "https://")
    link = base_url + url_quote_plus(token)
    return render_template('confirm.html', password_link=link)
Exemplo n.º 31
0
 def test_quoting(self):
     assert urls.url_quote(u"\xf6\xe4\xfc") == "%C3%B6%C3%A4%C3%BC"
     assert urls.url_unquote(urls.url_quote(u'#%="\xf6')) == u'#%="\xf6'
     assert urls.url_quote_plus("foo bar") == "foo+bar"
     assert urls.url_unquote_plus("foo+bar") == "foo bar"
     assert urls.url_encode({"a": None, "b": "foo bar"}) == "b=foo+bar"
     assert (
         urls.url_fix(u"http://de.wikipedia.org/wiki/Elf (Begriffsklärung)")
         == "http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29"
     )
Exemplo n.º 32
0
def key_rename(db: int, key: str) -> Response:
    conn = server.connection
    conn.execute_command("SELECT", db)
    key = url_unquote_plus(key)
    new_name = request.form["keyname"]
    conn.rename(key, new_name)
    return jsonify({
        "code":
        0,
        "data":
        url_for("redisboard.key_detail", db=db, key=url_quote_plus(new_name)),
    })
Exemplo n.º 33
0
def handle_password():
    password = request.form['password']
    token = set_password(password)

    if NO_SSL:
        base_url = request.url_root
    else:
        base_url = request.url_root.replace("http://", "https://")
    if URL_PREFIX:
        base_url = base_url + URL_PREFIX.strip("/") + "/"
    link = base_url + url_quote_plus(token)
    return render_template('confirm.html', password_link=link)
Exemplo n.º 34
0
    def stripe_form_generate_values(self, tx_values):
        self.ensure_one()

        base_url = self.get_base_url()
        stripe_session_data = {
            'line_items[][amount]':
            int(tx_values['amount'] if tx_values['currency'].name in
                INT_CURRENCIES else float_round(tx_values['amount'] * 100, 2)),
            'line_items[][currency]':
            tx_values['currency'].name,
            'line_items[][quantity]':
            1,
            'line_items[][name]':
            tx_values['reference'],
            'client_reference_id':
            tx_values['reference'],
            'success_url':
            urls.url_join(base_url, StripeController._success_url) +
            '?reference=%s' % urls.url_quote_plus(tx_values['reference']),
            'cancel_url':
            urls.url_join(base_url, StripeController._cancel_url) +
            '?reference=%s' % urls.url_quote_plus(tx_values['reference']),
            'payment_intent_data[description]':
            tx_values['reference'],
            'customer_email':
            tx_values.get('partner_email')
            or tx_values.get('billing_partner_email'),
        }
        if tx_values['type'] == 'form_save':
            stripe_session_data[
                'payment_intent_data[setup_future_usage]'] = 'off_session'

        self._add_available_payment_method_types(stripe_session_data,
                                                 tx_values)

        tx_values['session_id'] = self.with_context(
            stripe_manual_payment=True)._create_stripe_session(
                stripe_session_data)

        return tx_values
Exemplo n.º 35
0
def handle_login(request,
                 userobj=None,
                 username=None,
                 password=None,
                 attended=True,
                 openid_identifier=None,
                 stage=None):
    """
    Process a 'login' request by going through the configured authentication
    methods in turn. The passable keyword arguments are explained in more
    detail at the top of this file.
    """
    params = {
        'username': username,
        'password': password,
        'attended': attended,
        'openid_identifier': openid_identifier,
        'multistage': (stage and True) or None
    }
    for authmethod in request.cfg.auth:
        if stage and authmethod.name != stage:
            continue
        ret = authmethod.login(request, userobj, **params)

        userobj = ret.user_obj
        cont = ret.continue_flag
        if stage:
            stage = None
            del params['multistage']

        if ret.multistage:
            request._login_multistage = ret.multistage
            request._login_multistage_name = authmethod.name
            return userobj

        if ret.redirect_to:
            nextstage = get_multistage_continuation_url(
                request, authmethod.name)
            url = ret.redirect_to
            url = url.replace('%return_form', url_quote_plus(nextstage))
            url = url.replace('%return', url_quote(nextstage))
            abort(redirect(url))
        msg = ret.message
        if msg and not msg in request._login_messages:
            request._login_messages.append(msg)

        if not cont:
            break

    return userobj
Exemplo n.º 36
0
def unauthenticated():
    """ Prepare a Flash message and redirect to USER_UNAUTHENTICATED_ENDPOINT"""
    # Prepare Flash message
    url = request.url
    flash(_("You must be signed in to access '%(url)s'.", url=url), 'error')

    # quote the fully qualified url
    quoted_url = url_quote_plus(url)

    # Redirect to USER_UNAUTHENTICATED_ENDPOINT
    user_manager = current_app.user_manager
    return redirect(
        _endpoint_url(user_manager.unauthenticated_endpoint) + '?next=' +
        quoted_url)
Exemplo n.º 37
0
def handle_login(userobj, **kw):
    """
    Process a 'login' request by going through the configured authentication
    methods in turn. The passable keyword arguments are explained in more
    detail at the top of this file.
    """

    stage = kw.get('stage')
    params = {
        'username': kw.get('login_username'),
        'password': kw.get('login_password'),
        'multistage': (stage and True) or None,
        'attended': True
    }
    # add the other parameters from the form
    for param in kw.keys():
        params[param] = kw.get(param)

    for authmethod in app.cfg.auth:
        if stage and authmethod.name != stage:
            continue
        ret = authmethod.login(userobj, **params)

        userobj = ret.user_obj
        cont = ret.continue_flag
        if stage:
            stage = None
            del params['multistage']

        if ret.multistage:
            flaskg._login_multistage = ret.multistage
            flaskg._login_multistage_name = authmethod.name
            return userobj

        if ret.redirect_to:
            nextstage = get_multistage_continuation_url(authmethod.name)
            url = ret.redirect_to
            url = url.replace('%return_form', url_quote_plus(nextstage))
            url = url.replace('%return', url_quote(nextstage))
            abort(redirect(url))
        msg = ret.message
        if msg and msg not in flaskg._login_messages:
            flaskg._login_messages.append(msg)

        if not cont:
            break

    return userobj
Exemplo n.º 38
0
 def _generate_link(self):
     for payment_link in self:
         record = self.env[payment_link.res_model].browse(
             payment_link.res_id)
         link = (
             '%s/website_payment/pay?reference=%s&amount=%s&currency_id=%s'
             '&partner_id=%s&access_token=%s') % (
                 record.get_base_url(),
                 urls.url_quote_plus(payment_link.description),
                 payment_link.amount, payment_link.currency_id.id,
                 payment_link.partner_id.id, payment_link.access_token)
         if payment_link.company_id:
             link += '&company_id=%s' % payment_link.company_id.id
         if payment_link.res_model == 'account.move':
             link += '&invoice_id=%s' % payment_link.res_id
         payment_link.link = link
Exemplo n.º 39
0
def handle_password():
    ttl, password = clean_input()
    token = set_password(password, ttl)

    if HOST:
        base_url = "http://" + HOST + '/'
    else:
        base_url = request.url_root
    if NO_SSL:
        base_url = base_url
    else:
        base_url = base_url.replace("http://", "https://")
    if URL_PREFIX:
        base_url = base_url + URL_PREFIX.strip("/") + "/"
    link = base_url + url_quote_plus(token)
    return render_template('confirm.html', password_link=link)
Exemplo n.º 40
0
    def _compute_l10n_do_electronic_stamp(self):

        l10n_do_ecf_invoice = self.filtered(
            lambda i: i.is_ecf_invoice and not i.
            l10n_latam_manual_document_number and i.l10n_do_ecf_security_code)

        for invoice in l10n_do_ecf_invoice:

            ecf_service_env = self.env.context.get("l10n_do_ecf_service_env",
                                                   "CerteCF")
            doc_code_prefix = invoice.l10n_latam_document_type_id.doc_code_prefix
            is_rfc = (  # Es un Resumen Factura Consumo
                doc_code_prefix == "E32"
                and invoice.amount_total_signed < 250000)

            qr_string = "https://%s.dgii.gov.do/%s/ConsultaTimbre%s?" % (
                "fc" if is_rfc else "ecf",
                ecf_service_env,
                "FC" if is_rfc else "",
            )
            qr_string += "RncEmisor=%s&" % invoice.company_id.vat or ""
            if not is_rfc:
                qr_string += (
                    "RncComprador=%s&" % invoice.commercial_partner_id.vat
                    if invoice.l10n_latam_document_type_id.doc_code_prefix[1:]
                    != "43" else invoice.company_id.vat)
            qr_string += "ENCF=%s&" % invoice.l10n_do_fiscal_number or ""
            if not is_rfc:
                qr_string += "FechaEmision=%s&" % (
                    invoice.invoice_date
                    or fields.Date.today()).strftime("%d-%m-%Y")
            qr_string += "MontoTotal=%s&" % ("%f" % sum(
                invoice.line_ids.mapped("credit"))).rstrip("0").rstrip(".")
            if not is_rfc:
                qr_string += "FechaFirma=%s&" % invoice.l10n_do_ecf_sign_date.strftime(
                    "%d-%m-%Y%%20%H:%M:%S")

            special_chars = " !#$&'()*+,/:;=?@[]\"-.<>\\^_`"
            security_code = "".join(
                c.replace(c, "%" + c.encode("utf-8").hex()).upper() if c in
                special_chars else c
                for c in invoice.l10n_do_ecf_security_code or "")
            qr_string += "CodigoSeguridad=%s" % security_code

            invoice.l10n_do_electronic_stamp = urls.url_quote_plus(qr_string)

        (self - l10n_do_ecf_invoice).l10n_do_electronic_stamp = False
Exemplo n.º 41
0
 def image_fetch(self):
     q = '"%s" %d poster' % (self.title, self.year)
     q = 'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + url_quote_plus(q)
     q = requests.get(q)
     q = json_loads(q.content)
     try:
         q = q['responseData']['results']
     except (TypeError, KeyError):
         return
     for item in q:
         img = item['url']
         img_lower = img.lower()
         cond = [forbidden not in img_lower
                 for forbidden in forbidden_domains]
         if all(cond):
             self.img = img
             return
Exemplo n.º 42
0
    def validate_character(self, server_name, character_name):

        # Search for character
        url = self.lodestone_url + "/character/?q=%s&worldname=%s" % (url_quote_plus(character_name), server_name)

        r = self.make_request(url=url)

        if not r:
            return None

        soup = bs4.BeautifulSoup(r.content)

        for tag in soup.select(".player_name_area .player_name_gold a"):
            if tag.string.lower() == character_name.lower():
                return {"lodestone_id": re.findall(r"(\d+)", tag["href"])[0], "name": str(tag.string)}

        return None
Exemplo n.º 43
0
def primary_key_value(instance, as_string=False):
    """Returns the value of the primary key field of the specified `instance`
    of a SQLAlchemy model.

    This is a convenience function for::

        getattr(instance, primary_key_name(instance))

    If `as_string` is ``True``, try to coerce the return value to a string.

    """
    result = getattr(instance, primary_key_name(instance))
    if not as_string:
        return result
    try:
        return str(result)
    except UnicodeEncodeError:
        return url_quote_plus(result.encode('utf-8'))
Exemplo n.º 44
0
def primary_key_value(instance, as_string=False):
    """Returns the value of the primary key field of the specified `instance`
    of a SQLAlchemy model.

    This essentially a convenience function for::

        getattr(instance, primary_key_for(instance))

    If `as_string` is ``True``, try to coerce the return value to a string.

    """
    result = getattr(instance, primary_key_for(instance))
    if not as_string:
        return result
    try:
        return str(result)
    except UnicodeEncodeError:
        return url_quote_plus(result.encode('utf-8'))
Exemplo n.º 45
0
    def validate_character(self, server_name, character_name):

        # Search for character
        url = self.lodestone_url + '/character/?q=%s&worldname=%s' \
                                   % (url_quote_plus(character_name), server_name)

        r = self.make_request(url=url)

        if not r:
            return None

        soup = bs4.BeautifulSoup(r.content, "html.parser")

        for tag in soup.select('.player_name_area .player_name_gold a'):
            if tag.string.lower() == character_name.lower():
                return {
                    'lodestone_id': re.findall(r'(\d+)', tag['href'])[0],
                    'name': str(tag.string),
                    }

        return None
Exemplo n.º 46
0
def urlencode_filter(strval):
    """
    A template filter to return a URL-encoded string.
    """
    return url_quote_plus(strval)
Exemplo n.º 47
0
def index():
    posts = [{"title": title, "url": url_quote_plus(title)} for title in db.list()]
    return render_template("index.html", posts=posts)
Exemplo n.º 48
0
 #iterate through courses and get their membership info via LTI
 timestamp = oauth.generate_timestamp()
 nonce = oauth.generate_nonce(16)
 postParams = {}
 postParams['lti_message_type'] = 'basic-lis-readmembershipsforcontext'
 postParams['id'] = course.LTIid
 postParams['lti_version'] = 'LTI-1p0'
 postParams['oauth_consumer_key'] = 'LTI_ACJ'
 postParams['oauth_callback'] = 'about:blank'
 postParams['oauth_version'] = '1.0'
 postParams['oauth_signature_method'] = 'HMAC-SHA1'
 postParams['oauth_timestamp'] = timestamp
 postParams['oauth_nonce'] = nonce
 
 req = oauth.OAuthRequest(http_url=course.LTIURL, http_method='POST', parameters=postParams)
 hmacAlg = hmac.HMAC('acjsecret&', urls.url_quote_plus(req.get_normalized_http_method()) + '&' + urls.url_quote_plus(course.LTIURL) + '&' + urls.url_quote_plus(req.get_normalized_parameters()), hashlib.sha1)
 
 postParams['oauth_signature'] = base64.b64encode(hmacAlg.digest())
 
 xmlString = requests.post(course.LTIURL, data=postParams).text
 root = ET.fromstring(xmlString)
 #find the course in ACJ, create if it does not exist
 tmpCourse = Course.query.filter_by(name = course.courseName).first()
 if not tmpCourse:
     newCourse = Course(course.courseName)
     db_session.add(newCourse)
     commit()
     
 #create a list with all users in the course
 userlist = []
 for member in root.find('memberships').findall('member'):
Exemplo n.º 49
0
def admin_save():
    title = request.form.get("title", None)
    if not title:
        return redirect(url_for("admin_edit"))
    db.save(title, request.form.get("body", ""))
    return redirect(url_for("post", url=url_quote_plus(title)))
Exemplo n.º 50
0
    def __call__(self, instance, only=None):
        """Returns a dictionary representing the fields of the specified
        instance of a SQLAlchemy model.

        The returned dictionary is suitable as an argument to
        :func:`flask.jsonify`; :class:`datetime.date` and :class:`uuid.UUID`
        objects are converted to string representations, so no special JSON
        encoder behavior is required.

        If `only` is a list, only the fields and relationships whose names
        appear as strings in `only` will appear in the resulting
        dictionary. The only exception is that the keys ``'id'`` and ``'type'``
        will always appear, regardless of whether they appear in `only`.

        Since this function creates absolute URLs to resources linked to the
        given instance, it must be called within a `Flask request context`_.

        .. _Flask request context: http://flask.pocoo.org/docs/0.10/reqcontext/

        """
        # Always include at least the type, ID, and the self link, regardless
        # of what the user requested.
        if only is not None:
            # TODO Should the 'self' link be mandatory as well?
            #
            # TODO In Python 2.7 or later, this should be
            #
            #     only = set(only) | {'type', 'id'}
            #
            only = set(only) | set(['type', 'id'])
        model = type(instance)
        try:
            inspected_instance = inspect(model)
        except NoInspectionAvailable:
            return instance
        column_attrs = inspected_instance.column_attrs.keys()
        descriptors = inspected_instance.all_orm_descriptors.items()
        # hybrid_columns = [k for k, d in descriptors
        #                   if d.extension_type == hybrid.HYBRID_PROPERTY
        #                   and not (deep and k in deep)]
        hybrid_columns = [k for k, d in descriptors
                          if d.extension_type == HYBRID_PROPERTY]
        columns = column_attrs + hybrid_columns
        # Also include any attributes specified by the user.
        if self.additional_attributes is not None:
            columns += self.additional_attributes

        # Only include fields allowed by the user during the instantiation of
        # this object.
        if self.default_fields is not None:
            columns = (c for c in columns if c in self.default_fields)
        # If `only` is a list, only include those columns that are in the list.
        if only is not None:
            columns = (c for c in columns if c in only)

        # Exclude columns specified by the user during the instantiation of
        # this object.
        if self.exclude is not None:
            columns = (c for c in columns if c not in self.exclude)
        # Exclude column names that are blacklisted.
        columns = (c for c in columns
                   if not c.startswith('__') and c not in COLUMN_BLACKLIST)
        # Exclude column names that are foreign keys.
        foreign_key_columns = foreign_keys(model)
        columns = (c for c in columns if c not in foreign_key_columns)

        # Create a dictionary mapping attribute name to attribute value for
        # this particular instance.
        #
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        attributes = dict((column, getattr(instance, column))
                          for column in columns)
        # Call any functions that appear in the result.
        #
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        attributes = dict((k, (v() if callable(v) else v))
                          for k, v in attributes.items())
        # Serialize any date- or time-like objects that appear in the
        # attributes.
        #
        # TODO In Flask 1.0, the default JSON encoder for the Flask
        # application object does this automatically. Alternately, the
        # user could have set a smart JSON encoder on the Flask
        # application, which would cause these attributes to be
        # converted to strings when the Response object is created (in
        # the `jsonify` function, for example). However, we should not
        # rely on that JSON encoder since the user could set any crazy
        # encoder on the Flask application.
        for key, val in attributes.items():
            if isinstance(val, (date, datetime, time)):
                attributes[key] = val.isoformat()
            elif isinstance(val, timedelta):
                attributes[key] = val.total_seconds()
        # Recursively serialize any object that appears in the
        # attributes. This may happen if, for example, the return value
        # of one of the callable functions is an instance of another
        # SQLAlchemy model class.
        for k, v in attributes.items():
            # This is a bit of a fragile test for whether the object
            # needs to be serialized: we simply check if the class of
            # the object is a mapped class.
            if is_mapped_class(type(v)):
                attributes[k] = simple_serialize(v)
        # Get the ID and type of the resource.
        id_ = attributes.pop('id')
        type_ = collection_name(model)
        # Create the result dictionary and add the attributes.
        result = dict(id=id_, type=type_)
        if attributes:
            result['attributes'] = attributes
        # Add the self link unless it has been explicitly excluded.
        if ((self.default_fields is None or 'self' in self.default_fields)
                and (only is None or 'self' in only)):
            instance_id = primary_key_value(instance)
            # `url_for` may raise a `BuildError` if the user has not created a
            # GET API endpoint for this model. In this case, we simply don't
            # provide a self link.
            #
            # TODO This might fail if the user has set the
            # `current_app.build_error_handler` attribute, in which case, the
            # exception may not be raised.
            try:
                path = url_for(model, instance_id, _method='GET')
            except BuildError:
                pass
            else:
                url = urljoin(request.url_root, path)
                result['links'] = dict(self=url)
        # # add any included methods
        # if include_methods is not None:
        #     for method in include_methods:
        #         if '.' not in method:
        #             value = getattr(instance, method)
        #             # Allow properties and static attributes in
        #             # include_methods
        #             if callable(value):
        #                 value = value()
        #             result[method] = value

        # Recursively serialize values that are themselves SQLAlchemy
        # models.
        #
        # TODO We really need to serialize each model using the
        # serializer defined for that class when the user called
        # APIManager.create_api
        for key, value in result.items():
            if key not in column_attrs and is_mapped_class(type(value)):
                result[key] = simple_serialize(value)
        # If the primary key is not named "id", we'll duplicate the
        # primary key under the "id" key.
        pk_name = primary_key_name(model)
        if pk_name != 'id':
            result['id'] = result['attributes'][pk_name]
        # TODO Same problem as above.
        #
        # In order to comply with the JSON API standard, primary keys must be
        # returned to the client as strings, so we convert it here.
        if 'id' in result:
            try:
                result['id'] = str(result['id'])
            except UnicodeEncodeError:
                result['id'] = url_quote_plus(result['id'].encode('utf-8'))
        # If there are relations to convert to dictionary form, put them into a
        # special `links` key as required by JSON API.
        relations = get_relations(model)
        if self.default_fields is not None:
            relations = [r for r in relations if r in self.default_fields]
        # Only consider those relations listed in `only`.
        if only is not None:
            relations = [r for r in relations if r in only]
        if not relations:
            return result
        # For the sake of brevity, rename this function.
        cr = create_relationship
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        result['relationships'] = dict((rel, cr(model, instance, rel))
                                       for rel in relations)
        return result
Exemplo n.º 51
0
    def _dump(self, instance, only=None):
        # Always include at least the type and ID, regardless of what
        # the user requested.
        if only is not None:
            # TODO In Python 2.7 or later, this should be a set literal.
            only = set(only) | set(['type', 'id'])
        model = type(instance)
        try:
            inspected_instance = inspect(model)
        except NoInspectionAvailable:
            message = 'failed to get columns for model {0}'.format(model)
            raise SerializationException(instance, message=message)
        column_attrs = inspected_instance.column_attrs.keys()
        descriptors = inspected_instance.all_orm_descriptors.items()
        # hybrid_columns = [k for k, d in descriptors
        #                   if d.extension_type == hybrid.HYBRID_PROPERTY
        #                   and not (deep and k in deep)]
        hybrid_columns = [k for k, d in descriptors
                          if d.extension_type == HYBRID_PROPERTY]
        columns = column_attrs + hybrid_columns
        # Also include any attributes specified by the user.
        if self.additional_attributes is not None:
            columns += self.additional_attributes

        # Only include fields allowed by the user during the instantiation of
        # this object.
        if self.default_fields is not None:
            columns = (c for c in columns if c in self.default_fields)
        # If `only` is a list, only include those columns that are in the list.
        if only is not None:
            columns = (c for c in columns if c in only)

        # Exclude columns specified by the user during the instantiation of
        # this object.
        if self.exclude is not None:
            columns = (c for c in columns if c not in self.exclude)
        # Exclude column names that are blacklisted.
        columns = (c for c in columns
                   if not c.startswith('__') and c not in COLUMN_BLACKLIST)
        # Exclude column names that are foreign keys.
        foreign_key_columns = foreign_keys(model)
        columns = (c for c in columns if c not in foreign_key_columns)

        # Create a dictionary mapping attribute name to attribute value for
        # this particular instance.
        #
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        attributes = dict((column, getattr(instance, column))
                          for column in columns)
        # Call any functions that appear in the result.
        #
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        attributes = dict((k, (v() if callable(v) else v))
                          for k, v in attributes.items())
        # Serialize any date- or time-like objects that appear in the
        # attributes.
        #
        # TODO In Flask 0.11, the default JSON encoder for the Flask
        # application object does this automatically. Alternately, the
        # user could have set a smart JSON encoder on the Flask
        # application, which would cause these attributes to be
        # converted to strings when the Response object is created (in
        # the `jsonify` function, for example). However, we should not
        # rely on that JSON encoder since the user could set any crazy
        # encoder on the Flask application.
        for key, val in attributes.items():
            if isinstance(val, (date, datetime, time)):
                attributes[key] = val.isoformat()
            elif isinstance(val, timedelta):
                attributes[key] = total_seconds(val)
        # Recursively serialize any object that appears in the
        # attributes. This may happen if, for example, the return value
        # of one of the callable functions is an instance of another
        # SQLAlchemy model class.
        for key, val in attributes.items():
            # This is a bit of a fragile test for whether the object
            # needs to be serialized: we simply check if the class of
            # the object is a mapped class.
            if is_mapped_class(type(val)):
                model_ = get_model(val)
                try:
                    serializer = serializer_for(model_)
                    serialized_val = serializer.serialize(val)
                except ValueError:
                    # TODO Should this cause an exception, or fail
                    # silently? See similar comments in `views/base.py`.
                    # # raise SerializationException(instance)
                    serialized_val = simple_serialize(val)
                # We only need the data from the JSON API document, not
                # the metadata. (So really the serializer is doing more
                # work than it needs to here.)
                attributes[key] = serialized_val['data']
        # Get the ID and type of the resource.
        id_ = attributes.pop('id')
        type_ = collection_name(model)
        # Create the result dictionary and add the attributes.
        result = dict(id=id_, type=type_)
        if attributes:
            result['attributes'] = attributes
        # Add the self link unless it has been explicitly excluded.
        is_self_in_default = (self.default_fields is None or
                              'self' in self.default_fields)
        is_self_in_only = only is None or 'self' in only
        if is_self_in_default and is_self_in_only:
            instance_id = primary_key_value(instance)
            # `url_for` may raise a `BuildError` if the user has not created a
            # GET API endpoint for this model. In this case, we simply don't
            # provide a self link.
            #
            # TODO This might fail if the user has set the
            # `current_app.build_error_handler` attribute, in which case, the
            # exception may not be raised.
            try:
                path = url_for(model, instance_id, _method='GET')
            except BuildError:
                pass
            else:
                url = urljoin(request.url_root, path)
                result['links'] = dict(self=url)
        # # add any included methods
        # if include_methods is not None:
        #     for method in include_methods:
        #         if '.' not in method:
        #             value = getattr(instance, method)
        #             # Allow properties and static attributes in
        #             # include_methods
        #             if callable(value):
        #                 value = value()
        #             result[method] = value

        # If the primary key is not named "id", we'll duplicate the
        # primary key under the "id" key.
        pk_name = primary_key_for(model)
        if pk_name != 'id':
            result['id'] = result['attributes'][pk_name]
        # TODO Same problem as above.
        #
        # In order to comply with the JSON API standard, primary keys must be
        # returned to the client as strings, so we convert it here.
        if 'id' in result:
            try:
                result['id'] = str(result['id'])
            except UnicodeEncodeError:
                result['id'] = url_quote_plus(result['id'].encode('utf-8'))
        # If there are relations to convert to dictionary form, put them into a
        # special `links` key as required by JSON API.
        relations = get_relations(model)
        if self.default_fields is not None:
            relations = [r for r in relations if r in self.default_fields]
        # Only consider those relations listed in `only`.
        if only is not None:
            relations = [r for r in relations if r in only]
        # Exclude relations specified by the user during the instantiation of
        # this object.
        if self.exclude is not None:
            relations = [r for r in relations if r not in self.exclude]
        if not relations:
            return result
        # For the sake of brevity, rename this function.
        cr = create_relationship
        # TODO In Python 2.7 and later, this should be a dict comprehension.
        result['relationships'] = dict((rel, cr(model, instance, rel))
                                       for rel in relations)
        return result
Exemplo n.º 52
0
 def create_facebook_login_url(self, url):
     return url_for("fb/fb_login", next=url_quote_plus(url))
Exemplo n.º 53
0
def index():
    posts = []
    for filename in os.listdir('posts'):
        title = urlsafe_b64decode(filename)
        posts.append({'title': title, 'url': url_quote_plus(title)})
    return render_template('index.html', posts=posts)
Exemplo n.º 54
0
    def _dump(self, instance, only=None):
        # Always include at least the type and ID, regardless of what
        # the user requested.
        if only is not None:
            # TODO In Python 2.7 or later, this should be a set literal.
            only = set(only) | set(['type', 'id'])
        model = type(instance)
        try:
            inspected_instance = inspect(model)
        except NoInspectionAvailable:
            message = 'failed to get columns for model {0}'.format(model)
            raise SerializationException(instance, message=message)

        # Determine the columns to serialize as "attributes".
        #
        # This include plain old columns (like strings and integers, for
        # example), hybrid properties, and association proxies to scalar
        # collections (like a list of strings, for example).
        column_attrs = inspected_instance.column_attrs.keys()
        assoc_scalars = list(assoc_proxy_scalar_collections(model))
        descriptors = inspected_instance.all_orm_descriptors.items()
        hybrid_columns = [k for k, d in descriptors
                          if d.extension_type == HYBRID_PROPERTY]
        columns = column_attrs + assoc_scalars + hybrid_columns
        # Also include any attributes specified by the user.
        if self.additional_attributes is not None:
            columns += self.additional_attributes

        # Serialize each attribute, excluding those that should be excluded.
        attributes = {}
        foreign_key_columns = foreign_keys(model)
        pk_name = primary_key_for(model)
        for column in columns:
            if self._is_excluded(column, only=only):
                continue
            # Exclude column names that are blacklisted.
            if column.startswith('__') or column in COLUMN_BLACKLIST:
                continue
            # Exclude column names that are foreign keys (unless the
            # foreign key is the primary key for the model; this can
            # happen in the joined table inheritance database
            # configuration).
            if column in foreign_key_columns and column != pk_name:
                continue

            # Get the value for this column. Call it if it is callable.
            value = getattr(instance, column)
            if callable(value):
                value = value()
            # Attributes values that come from association proxy
            # collections need to be cast to plain old Python data types
            # so that the JSON serializer can handle them.
            if isinstance(value, _AssociationList):
                value = list(value)
            elif isinstance(value, _AssociationSet):
                value = set(value)
            elif isinstance(value, _AssociationDict):
                value = dict(value)
            # Serialize any date- or time-like objects that appear in
            # the attributes.
            #
            # TODO In Flask 0.11, the default JSON encoder for the Flask
            # application object does this automatically. Alternately,
            # the user could have set a smart JSON encoder on the Flask
            # application, which would cause these attributes to be
            # converted to strings when the Response object is created
            # (in the `jsonify` function, for example). However, we
            # should not rely on that JSON encoder since the user could
            # set any crazy encoder on the Flask application.
            if isinstance(value, (date, datetime, time)):
                value = value.isoformat()
            elif isinstance(value, timedelta):
                value = total_seconds(value)
            # Recursively serialize any object that appears in the
            # attributes. This may happen if, for example, the return
            # value of one of the callable functions is an instance of
            # another SQLAlchemy model class.
            #
            # This is a bit of a fragile test for whether the object
            # needs to be serialized: we simply check if the class of
            # the object is a mapped class.
            if is_mapped_class(type(value)):
                model_ = get_model(value)
                try:
                    serializer = serializer_for(model_)
                    serialized_val = serializer.serialize(value)
                except ValueError:
                    # TODO Should this cause an exception, or fail
                    # silently? See similar comments in `views/base.py`.
                    # # raise SerializationException(instance)
                    serialized_val = simple_serialize(value)
                # We only need the data from the JSON API document, not
                # the metadata. (So really the serializer is doing more
                # work than it needs to here.)
                value = serialized_val['data']

            # Set this column's value in the attributes dictionary.
            attributes[column] = value

        # Get the ID and type of the resource.
        id_ = attributes.pop('id', None)
        type_ = collection_name(model)
        # Create the result dictionary and add the attributes.
        result = dict(id=id_, type=type_)
        if attributes:
            result['attributes'] = attributes

        # Add the self link unless it has been explicitly excluded.
        is_self_in_default = (self.default_fields is None or
                              'self' in self.default_fields)
        is_self_in_only = only is None or 'self' in only
        if is_self_in_default and is_self_in_only:
            instance_id = primary_key_value(instance)
            # `url_for` may raise a `BuildError` if the user has not created a
            # GET API endpoint for this model. In this case, we simply don't
            # provide a self link.
            #
            # TODO This might fail if the user has set the
            # `current_app.build_error_handler` attribute, in which case, the
            # exception may not be raised.
            try:
                path = url_for(model, instance_id, _method='GET')
            except BuildError:
                pass
            else:
                # HACK In order to support users using Python 2.7 with
                # the `future` compatibility library, we need to ensure
                # that both `request.url_root` and `path` are of the
                # same type.
                path = to_unicode(path)
                url = urljoin(request.url_root, path)
                result['links'] = dict(self=url)
        # # add any included methods
        # if include_methods is not None:
        #     for method in include_methods:
        #         if '.' not in method:
        #             value = getattr(instance, method)
        #             # Allow properties and static attributes in
        #             # include_methods
        #             if callable(value):
        #                 value = value()
        #             result[method] = value

        # If the primary key is not named "id", we'll duplicate the
        # primary key under the "id" key.
        if pk_name != 'id':
            result['id'] = result['attributes'][pk_name]
        # TODO Same problem as above.
        #
        # In order to comply with the JSON API standard, primary keys must be
        # returned to the client as strings, so we convert it here.
        if 'id' in result:
            try:
                result['id'] = str(result['id'])
            except UnicodeEncodeError:
                result['id'] = url_quote_plus(result['id'].encode('utf-8'))

        # Serialize each relationship, excluding those that should be excluded.
        relationships = {}
        for r in get_relations(model):
            if not self._is_excluded(r, only=only):
                relationships[r] = create_relationship(model, instance, r)

        if relationships:
            result['relationships'] = relationships

        return result
Exemplo n.º 55
0
 def quoted_url(self):
     return url_quote_plus(self.url)
Exemplo n.º 56
0
 def inner(request, *args, **kwargs):
   for service in targets:
     if get_gaema_user(service):
       return func(request, *args, **kwargs)
   return redirect(url_for('gaema/select_service', targets='|'.join(targets),
                           next_url=url_quote_plus(request.url)))
Exemplo n.º 57
0
def create_lang_url(lang=None, url=None):
  from werkzeug.urls import url_quote_plus
  from kay.utils import url_for
  if not url:
    url = local.request.url
  return url_for("i18n/set_language", lang=lang, next=url_quote_plus(url))
Exemplo n.º 58
0
 def create_logout_url(self, url):
   return url_for("auth/logout", next=url_quote_plus(url))