def _create_short_url(form_data): form = forms.URLShortenerForm(form_data) if not form.validate(): # TODO: error gracefully abort(400) url = form.url.data alias = form.alias.data or None explicit_alias_requested = alias is not None try: alias = shortener.make_alias(url, alias=alias) except shortener.UncleanAlias: # TODO: error gracefully abort(400) try: shortener.insert_url(url, alias, g.db) except storage.NotUnique: # That alias is already claimed; you can't have it if explicit_alias_requested: long_url = shortener.get_url(alias, g.db) if url != long_url: # TODO: error gracefully abort(403) # Hashed to the same thing? Be idempotent else: pass short_url = url_for('short_url', alias=alias, _external=True) return short_url
def short_url(alias): """Look up and redirect to a long URL.""" try: url = shortener.get_url(alias, g.db) if app.config['RECORD_HITS']: shortener.record_hit(alias, g.db) except storage.NotFound: abort(404) return redirect(url, code=301)