43 lines
1,006 B
Python
43 lines
1,006 B
Python
import os
|
|
|
|
from dns.name import from_text
|
|
from dns.resolver import LRUCache, Resolver
|
|
from flask import Flask, redirect
|
|
|
|
from shortener.exceptions import ApiException
|
|
from shortener.handlers import handle_expand, handle_shorten
|
|
|
|
BASE_DOMAIN = os.getenv("BASE_DOMAIN")
|
|
|
|
app = Flask(__name__)
|
|
resolver = Resolver()
|
|
resolver.search = [from_text(BASE_DOMAIN)]
|
|
resolver.cache = LRUCache()
|
|
|
|
|
|
@app.route("/")
|
|
def home():
|
|
return "<p>Welcome to the url shortener!</p>"
|
|
|
|
|
|
@app.route("/shorten/", methods=["POST"])
|
|
def shorten_url():
|
|
try:
|
|
return handle_shorten()
|
|
except ApiException as e:
|
|
return {"status": "error", "message": e.message}, e.code
|
|
|
|
|
|
@app.route("/<string:shortcode>/")
|
|
def expand_url(shortcode: str):
|
|
try:
|
|
redirect_url = handle_expand(shortcode, resolver)
|
|
except:
|
|
return "<p>URL not found</p>"
|
|
return redirect(redirect_url, code=302)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
port = int(os.environ.get("PORT", 5000))
|
|
app.run(host="0.0.0.0", port=port)
|