juangm / url-shortener

Python project for shorting urls (simulate service like bitly.com)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Project: url-shortener

Description

Small python project for URL shortener

⚠️ Security Warning

  • This program was created for educational purposes.
  • This program is not protected against 💉 sql injection
    • If the script is added to a web service, the service will filter the inputs to avoid this issue

Requirements

  • Python 3.7.6
  • Sqlite
  • Install python packages dependencies pip3 install -r requirements.txt

Specifications

  • Shorten a URL:

    • Input: A regular URL (not from applau.se domain)
    • Output: A shortened URL (use only ten digits, 26 lowercase characters, 26 uppercase characters) of extra length 2 from a given link example: applau.se/5s)
    • Handle the case that the 2-character length is running out of choices by retiring the shortened URL that has not been called for the longest time.
  • Retrieve a URL:

    • Input: A shortened URL (from applau.se domain)
    • Output: Retrieve the original URL.
  • Basic admin:

    • Show all stored shortened URLs (including shortened URL, original URL, call count and latest call time) and sort by call count.

Run

To run the url-shortener locally, you just need to install the requirements and execute:

python3 shortener.py

The program has the following options implemented:

  • url: provide a url to short or unshort.
  • setup_db: create table in DB and erase previous data if table existed before (only admin)
  • show_db: show all the data in the urls table (only admin)
  • help: help menu.
  • exit: exit the program.

Generate combinations for possible short urls:

  • The combinations for the previous specs are already generated in combinations/encoding.json file
  • To regenerate the file just run python3 combinations/generate_combinations.pyt

Run the tests:

pytest

Future improvements

  • Add tests for checking the specs are not being broken when implementing new features.
    • Tests for url helper class
    • Tests for sqlite helper class
    • Tests for simulating real user interaction (based in specs)
  • Implement login system with password for the admin service.
  • Create a CI to run the tests.
  • Implement small web application for the user interface.

About

Python project for shorting urls (simulate service like bitly.com)

License:MIT License


Languages

Language:Python 100.0%