Skip to content

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

License

Notifications You must be signed in to change notification settings

juangm/url-shortener

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages