(Developer: Valentino Braga)
Password Creator is a program that generates a unique and random password for the user based on their desired specifications. The user is prompted to select a password length and choose from three different styles: letter only, numbers only, or mixed (letters, numbers, and symbols). Once the user has selected their preferred options, the program generates a random password and if the user wishes, they can save the generated password along with a corresponding URL and username in a Google spreadsheet. This program provides a convenient and secure way for users to generate strong passwords and save them in a centralized location for easy access.
- Password Creator
- Table of Contents
- User Experience (UX)
- Flowchart
- Features
- Future Features
- Technologies Used
- Testing Cases
- HTML Validation
- CSS Validation
- Python Validation
- Bugs
- Deployment
- Credits
- Acknowledgements
- Find an interactive way to run the program.
- Clear rules and easy access to it.
- Possibility to exit the app.
- Possibility to create unique and random passwords.
- Possibility to store their login information.
- Deliver easy-to-read rules to attract users.
- Provide a range of possibilities to style passwords.
- To provide a database where the users can store their information.
- Organizations of all sizes that require secure access to their systems and networks.
- Anyone who's looking to create safe passwords.
- Anyone who's looking to create and store login information.
- Smooth experience.
- Intuitive interface.
- Appealing design.
- As a first-time user, I want to understand how the program works.
- As a first-time user, I want to create a unique password.
- As a first-time user, I want to have style options when creating the password.
- As a first-time user, I want to exit the program at any given time.
- As a returning user, I want to be able to save my password.
- As a returning user, I want to have the possibility of creating different passwords.
- As a returning user, I want to exit the program at any given time.
- As a returning user, I want to have a secure password.
- As a site owner, I want users to easily understand my software.
- As a site owner, I want users to create different passwords.
- As a site owner, I want users to feel safe.
- As a site owner, I want users to be able to store their login information.
- As a site owner, I want users to be able to exit whenever they want to.
I designed the following flowchart using Lucid charts to grasp the necessary steps involved in developing the program.
The website contain a python terminal with 5 interfaces and a 404 Error Page.
- Appealing design, abstract patterns in the background image to reference a database;
- Centralized terminal and button for a better experience;
- Social media links icons (GitHub/LinkedIn);
- Button hover effect;
- Icons hover effect;
- Program presentation/logo, how-it-works text, user input, input validation and input confirmation.
- Prompt the user for the password length: a number between 8-64;
- Prompt the user for the password style: letters only, numbers only or mixed characters (letters/numbers/symbols);
- Confirmation text for every input;
- Different answers for every chosen style;
- Input validation.
- Tech jokes for good user experience;
- The password displayed in a different color for positive feelings;
- Prompt the user if they want to save;
- Prompt the user if they want to restart or exit;
- Input validation.
- An interface where the user can save login information into google spreadsheet;
- Small presentation and how it works;
- Password reminder highlighted;
- Prompt user for username;
- Prompt user for URL;
- Saved login information to the database confirmation;
- Prompt the user if wants to start again or exit.
- At every input, the user can type "exit" which leads to this interface;
- There's a timer for good user experience;
- Once the timer is finished, it clears the terminal.
- Every password save is loaded to the google spread sheet.
- Add the ability to generate multiple passwords at once.
- Allow users to choose specific symbols or special characters to include in their passwords.
- Add a feature to check if the password is strong enough, based on common password criteria such as length, complexity, and uniqueness.
- Implement a secure random number generator, such as the "secrets" module, for generating passwords.
- Consider adding an option for the user to enter their own passphrase, which the program can convert into a password using a hashing algorithm.
The following language were used to develop the website:
- Python
- HTML
- CSS
The following tools and resources were used to develop the website:
- Git
- Github
- Gitpod
- Heroku
- Favicon
- Lucidchart
- Codecademy
- W3 Schools
- Stack Overflow
- Github Projects
- CI Python Linter
- Techsini Mockup Generator
- GitHub Wiki TOC generator
| User Story | Feature | Achieved |
|---|---|---|
| As a first-time user, I want to understand how the program works. | Explanations throughout the program. | Yes. |
| As a first-time user, I want to create a unique password. | Passwords are created randomly. | Yes. |
| As a first-time user, I want to have style options when creating the password. | Passwords can have three styles. | Yes. |
| As a first-time user, I want to exit the program at any given time. | Possibility to exit at any given time when typing "exit". | Yes. |
| As a returning user, I want to be able to save my password. | Possibility to save the password in the Google Sheet. | Yes. |
| As a returning user, I want to have the possibility of creating different passwords. | Passwords are created randomly and can have three styles. | Yes. |
| As a returning user, I want to exit the program at any given time. | Possibility to exit at any given time when typing "exit". | Yes. |
| As a returning user, I want to have a secure password. | Passwords are created randomly starting at 8 characters. Also, there is small bits of information throughout the program. | Yes. |
| As a site owner, I want users to easily understand my software. | Explanations throughout the program. | Yes. |
| As a site owner, I want users to create different passwords. | Passwords are created randomly and can have three styles. | Yes. |
| As a site owner, I want users to feel safe. | Passwords are created randomly starting at 8 characters. Also, there is small bits of information throughout the program. | Yes. |
| As a site owner, I want users to be able to store their login information. | Possibility to save the login information with the password created in the Google Sheet. | Yes. |
| As a site owner, I want users to be able to exit whenever they want to. | Possibility to exit at any given time when typing "exit". | Yes. |
| Feature | Expectation | Action | Result |
|---|---|---|---|
| Enter your name: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | Empty string. | Invalid answer message is displayed and user prompter to enter valid answer. |
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | Numbers. | Invalid answer message is displayed and user prompter to enter valid answer. |
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input < 3 characters | Invalid answer message is displayed and user prompter to enter valid answer. |
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input > 16 characters | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | Loads the choose length/style interface. | Input filled with a word without numbers, longer than 3 and shorter than 16 characters. | Loads the choose length/style interface. |
| Enter password length: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input < 8 or input > 64 | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | Prompts the next question: choose a style. | input >= 8 and input <= 64 | Prompts the next question: choose a style. |
| Choose password style: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input != 1, 2 or 3 | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | Loads the display password interface. | input = 1, 2 or 3 | Loads the display password interface. |
| Save password? | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input != "y", "Y", "n" or "N" | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | If "y" or "Y" prompts store password interface, if "n" or "N" prompts restart/exit question. | input = "y", "Y", "n" or "N" | If "y" or "Y" prompts store password interface, if "n" or "N" prompts restart/exit question. |
| Enter username: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | Empty input. | Invalid answer message is displayed and user prompter to enter valid answer. |
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input < 3 | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | Prompts next question: enter URL? | A filled input with more than 3 characters. | Prompts next question: enter URL? |
| Enter URL/Name: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | Empty input. | Invalid answer message is displayed and user prompter to enter valid answer. |
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input < 3 | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | Prompts next question: restart? | A filled input with more than 3 characters. | Prompts next question: restart? |
| Restart?: | |||
| Invalid. | Invalid answer message is displayed and user prompter to enter valid answer. | input != "y", "Y", "n" or "N" | Invalid answer message is displayed and user prompter to enter valid answer. |
| Valid. | If "y" or "Y" reloads the program, if "n" or "N" exit program. | input = "y", "Y", "n" or "N" | If "y" or "Y" reloads the program, if "n" or "N" exit program. |
The Nu HTML Checker (W3C) is used to validate HTML documents. The files passed without any errors.
The W3C Jigsaw CSS Validation Service is used to validate CSS documents. The file passed without any errors.
The project was validated using the provided CI Python Linter and it was cleared with no errors.
Flake8 is a Python library that wraps PyFlakes, pycodestyle and Ned Batchelder’s McCabe script. It is a great toolkit for checking your code base against coding style (PEP8), programming errors (like “library imported but unused” and “Undefined name”) and to check cyclomatic complexity. The program passed without any errors.
There were many small bugs throughout the process, however, I was able to manage searching online and with my colleague's help. Here are a few that stumped me enough to write them down:
Bug: When I was testing the program, the store_password() was being called two times in a row. I was calling the store_password() from an if statement inside the display_password() and from inside the main() function.
Fix: I removed the call from within the display_password(.)
Bug: When I was trying to run the display_password() function I was getting a TypeError. I was using a variable called "store_password" and at the same time, I had a function called store_password().
Fix: I changed the variable name.
Bug: When I was trying to style the terminal interface with CSS and add a few HTML elements I couldn't, the built-in preview couldn't show the same as it was in the deployed version of the project in the Heroku platform.
Fix: After a search in the Slack channel I've learned that to open the project in the browser I needed to be able to run the index.js file from the terminal. To achieve I had to install "npm install" to install the node package manager and then "node index.js" to run it.
Click Here To See The Live Website
The website was deployed through the use of GitHub Pages, a feature built in to GitHub. This can be done by following the steps below.
- In the desired repository, click on "Settings" from the top menu.
- From the side menu to your left, select "Pages" in the "Code and automation" section.
- Make sure the "Source" option is set to "Deploy from a branch"
- Select the desired "Branch" from the drop down below (main branch in most cases, making sure the director is set to /(root)).
- Select "Save", and after it refreshes the page, you will see a box at the top of the page providing you with the URL of your now published site.
To contribute or check the code yourself, you can fork or clone the repository as well.
- Go to the desired repository
- Click "Fork" in the upper right corner
- Select the owner, and set the repository name. A description can be added if desired
- Choose whether to copy the default branch, or all branches
- Click "Create Form"
- Go to the desired repository
- Click the "Code" button at the top of the files section of the page
- Select your desired method for cloning (HTTPS/SSH/GitHub CLI)
- Open Git Bash
- Change the current working directory to the location where you want the cloned directory
- Type "git clone", and then paste the URL you copied earlier. It will look like this, with your GitHub username instead of "YOUR-USERNAME": "$ git clone https://github.com/YOUR-USERNAME/DESIRED-REPOSITORY"
- Press Enter. Your local clone will be created.
- Create a user account with Heroku.
- Click New in the top-right corner of your Heroku Dashboard.
- Click on the dropdown menu and select create new.
- The app name is unique to all apps within Heroku so select one that is not currently in use.
- Select a region, EU or USA.
- Click Create App.
- In the app settings click Reveal Config vars, set the value of KEY to PORT, and the value to 8000 and click add.
- Click Add Buildpack.
- Choose Python first and click add.
- Choose Node.js second.
- The order is important, Python needs to be first, then Node.js second.
- Click on the Deploy tab, select connect to Github and search for your repository.
- Click on Enable automatic deploy or Deploy branch depending on your use case.
A list of references used for the site:
- Password Generator Tutorial
- How to Create Random Strings
- Checking User's Input
- Typing Effect
- How to Clear Terminal
- How to Use "if not" Statements
- GitHub Repositories.
- Love Sandwiches Project.
I would like to take this opportunity to acknowledge and thank the following people:
- Bethany and Kim from Code Institute Studen Care for looking out for me.
- Brian O'Hare my mentor for all the help and guidance.
- My sister who's always encouraging me.
- My husband who's there when I need him and is always pushing me forward.

































