Fixed all bugs

This commit is contained in:
CragglesG 2024-09-29 14:37:39 +01:00
parent d02ca243eb
commit acc583b24e
4 changed files with 14 additions and 19 deletions

View file

@ -6,5 +6,6 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="bootstrap" level="application" />
</component> </component>
</module> </module>

View file

@ -9,15 +9,15 @@
<body> <body>
<h1 class="p-2">URL Shortener</h1> <h1 class="p-2">URL Shortener</h1>
<p class="ps-2">Quickly shorten any URL!</p> <p class="ps-2">Quickly shorten any URL!</p>
<form action="/form" method="POST"> <form action="/form" method="POST" enctype="application/x-www-form-urlencoded">
<div class="mb-3 p-2"> <div class="mb-3 p-2">
<label for="slug" class="form-label">Slug</label> <label for="slug" class="form-label">Slug</label>
<input type="text" class="form-control" id="slug" aria-describedby="emailHelp"> <input type="text" class="form-control" id="slug" name="slug">
<div id="slugHelp" class="form-text">This is added to the short URL. Keep it simple.</div> <div id="slugHelp" class="form-text">This is added to the short URL. Keep it simple.</div>
</div> </div>
<div class="mb-3 p-2"> <div class="mb-3 p-2">
<label for="link" class="form-label">Link</label> <label for="link" class="form-label">Link</label>
<input type="text" class="form-control" id="link"> <input type="url" class="form-control" id="link" name="link">
<div id="linkHelp" class="form-text">This is the link that you want to redirect to.</div> <div id="linkHelp" class="form-text">This is the link that you want to redirect to.</div>
</div> </div>
<button type="submit" class="btn btn-success" style="margin-left:.5rem;">Submit</button> <button type="submit" class="btn btn-success" style="margin-left:.5rem;">Submit</button>

24
main.py
View file

@ -1,6 +1,9 @@
from fastapi import FastAPI, Response, HTTPException from typing import Annotated
from fastapi import FastAPI, Response, HTTPException, Form
from fastapi.responses import RedirectResponse, HTMLResponse from fastapi.responses import RedirectResponse, HTMLResponse
import json import json
app = FastAPI() app = FastAPI()
with open("urls.json", "r") as f: with open("urls.json", "r") as f:
@ -11,9 +14,6 @@ async def root():
with open("index.html", "r") as file: with open("index.html", "r") as file:
return HTMLResponse(file.read()) return HTMLResponse(file.read())
@app.get("/{tag}/{slug}")
async def tag_slug(tag: str, slug: str):#
return RedirectResponse(urls[tag][slug])
@app.get("/add/{slug}/{to}") @app.get("/add/{slug}/{to}")
async def add(slug: str, to: str): async def add(slug: str, to: str):
@ -21,15 +21,9 @@ async def add(slug: str, to: str):
await _save() await _save()
return Response() return Response()
@app.get("/add/{tag}/{slug}/{to}") @app.post("/form")
async def add(tag: str, slug: str, to: str): async def form(slug: Annotated[str, Form()], link: Annotated[str, Form()]):
urls[tag][slug] = to await add(slug=slug, to=link)
await _save()
return Response()
@app.post("/form/")
async def form(slug: str, link: str):
await add(slug, link)
with open("submitted.html", "r") as file: with open("submitted.html", "r") as file:
return HTMLResponse(file.read()) return HTMLResponse(file.read())
@app.get("/_save") @app.get("/_save")
@ -37,9 +31,9 @@ async def _save():
with open("urls.json", "w") as file: with open("urls.json", "w") as file:
json.dump(urls, file, indent=2, sort_keys=True) json.dump(urls, file, indent=2, sort_keys=True)
@app.get("/{slug:path}") @app.get("/{slug}")
async def slug_only(slug: str): async def slug_only(slug: str):
if slug == "favicon.ico": if slug == "favicon.ico":
return HTTPException(404) return HTTPException(404)
else: else:
return RedirectResponse(f"https://{urls["public"][slug]}") return RedirectResponse(urls["public"][slug])

View file

@ -5,6 +5,6 @@
"public": { "public": {
"hc": "https://hackclub.com", "hc": "https://hackclub.com",
"portfolio": "https://craigg.dev", "portfolio": "https://craigg.dev",
"url-shortener": "go.craigg.dev" "url-shortener": "https://go.craigg.dev"
} }
} }