Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function IsValidURL(url) {
- try {
- new URL(url);
- return true;
- } catch (err) {
- return false;
- }
- }
- function RandomString() {
- const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
- let res = ""
- for (let i = 0; i < 8; i++) {
- res += characters.charAt(Math.floor(Math.random() * characters.length))
- }
- return res
- }
- export default {
- async fetch(request, env, ctx) {
- let request_url = new URL(request.url)
- if (request.method == "POST") {
- if (request_url.pathname.toLowerCase() == "/upload" && request.headers.get("token") == env.ACCESS_TOKEN) {
- let url = (await request.json()).URL
- if (IsValidURL(url)) {
- let slug = RandomString()
- while (true) {
- if (await env.stored_urls.get(slug) == null) {
- if (await env.stored_urls.put(slug, url) !== undefined) {
- return new Response(`{"error": {"code": 503, "message": "KV limit reached."}}`, {status: 503})
- } else {
- break
- }
- }
- slug = RandomString()
- }
- return new Response(`{"data": {"slug": "${slug}"}}`, {status: 200})
- } else {
- return new Response(`{"error": {"code": 400, "message": "Invalid URL."}}`, {status: 400})
- }
- }
- return new Response(`{"error": {"code": 403, "message": "Unauthorized."}}`, {status: 403})
- } else if (request.method == "GET") {
- let slug = request_url.pathname.substring(1)
- if (slug.length > 0) {
- let url = await env.stored_urls.get(slug)
- if (url !== null) {
- return Response.redirect(url, 301)
- }
- }
- return new Response(`{"error": {"code": 404, "message": "Redirect not found."}}`, {status: 404})
- }
- },
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement