From 50472f82cd29f8c7d870acd029d629ed0072aaf4 Mon Sep 17 00:00:00 2001 From: Somar Kesen Date: Mon, 20 Dec 2021 22:38:22 +0200 Subject: [PATCH] Upload Project --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++- assets/js.js | 66 ++++++++++++++++++++++++++++++ assets/screenshot.jpg | Bin 0 -> 51629 bytes assets/style.css | 49 ++++++++++++++++++++++ index.html | 49 ++++++++++++++++++++++ 5 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 assets/js.js create mode 100644 assets/screenshot.jpg create mode 100644 assets/style.css create mode 100644 index.html diff --git a/README.md b/README.md index 849b707..3240428 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,90 @@ -# js-password-generator -it enables you to generate your own passwords with different degrees of power and security and adjust them to the length, characters, etc. You can include it in your website very easily, where no outside libraries have been used. Only Java Script. +# JS-Password-Generator :lock_with_ink_pen: + +![image](assets/screenshot.jpg) + +It enables you to generate your own passwords with different degrees of power and security and adjust them to the length, characters, etc. You can include it in your website very easily, where no outside libraries have been used. Only Java Script. + +This writing method is not the only one and you can generate the same results in different ways in the same language. +I hope it's useful to you in your work, and I'm going to constantly improve its coordination and add new features to it. + +- Explain Code
+Here we use some function to generate a strings from Uppercase and lowercase letters, numbers and symbols +```java-script +function getRandomLower() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 97); +} + +function getRandomUpper() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 65); +} + +function getRandomNumber() { + return String.fromCharCode(Math.floor(Math.random() * 10) + 48); +} + +function getRandomSymbol() { + const symbols = "!@#$%^&*(){}[]=/<>,." + return symbols[Math.floor(Math.random() * symbols.length)]; +} + +const randomFunc = { + lower: getRandomLower, + upper: getRandomUpper, + number: getRandomNumber, + symbol: getRandomSymbol, +}; +``` +This is the code that executes the command when the button is pressed in order to collect and generate those values +```java-script +const generate = document.getElementById("generateBtn"); +generate.addEventListener("click", () => { + const length = document.getElementById("PasswordLength").value; + const hasUpper = document.getElementById("uppercase").checked; + const hasLower = document.getElementById("lowercase").checked; + const hasNumber = document.getElementById("numbers").checked; + const hasSymbol = document.getElementById("symbols").checked; + const result = document.getElementById("PasswordResult"); + result.innerText = generatePassword( + hasLower, + hasUpper, + hasNumber, + hasSymbol, + length + ); +}); + +function generatePassword(lower, upper, number, symbol, length){ + let generatedPassword = ""; + const typesCount = lower + upper + number + symbol; + const typesArr = [{lower}, {upper}, {number}, {symbol}].filter( + (item) => Object.values(item)[0] + ); + for (let i = 0; i < length; i += typesCount){ + typesArr.forEach((type) => { + const funcName = Object.keys(type)[0]; + generatedPassword += randomFunc[funcName](); + }); + } + const finalPassword = generatedPassword.slice(0, length); + return finalPassword; +} +``` +And the last ting is the code for the "copy to clipboard" button in order to copy the generated password. + +```java-script +let button = document.getElementById("clipboardBtn"); +button.addEventListener("click", (e) => { + e.preventDefault(); + document.execCommand( + "copy", + false, + document.getElementById("PasswordResult").select() + ); +}); +``` +Note: This is optional, you can not add it, it's up to how useful this code can be in your projects. + +Credits +------- +- [Linkedin Account](https://www.somar-kesen.com/)
+- [My website](https://www.somar-kesen.com/) diff --git a/assets/js.js b/assets/js.js new file mode 100644 index 0000000..cfdaf7d --- /dev/null +++ b/assets/js.js @@ -0,0 +1,66 @@ +function getRandomLower() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 97); +} + +function getRandomUpper() { + return String.fromCharCode(Math.floor(Math.random() * 26) + 65); +} + +function getRandomNumber() { + return String.fromCharCode(Math.floor(Math.random() * 10) + 48); +} + +function getRandomSymbol() { + const symbols = "!@#$%^&*(){}[]=/<>,." + return symbols[Math.floor(Math.random() * symbols.length)]; +} + +const randomFunc = { + lower: getRandomLower, + upper: getRandomUpper, + number: getRandomNumber, + symbol: getRandomSymbol, +}; + +const generate = document.getElementById("generateBtn"); +generate.addEventListener("click", () => { + const length = document.getElementById("PasswordLength").value; + const hasUpper = document.getElementById("uppercase").checked; + const hasLower = document.getElementById("lowercase").checked; + const hasNumber = document.getElementById("numbers").checked; + const hasSymbol = document.getElementById("symbols").checked; + const result = document.getElementById("PasswordResult"); + result.innerText = generatePassword( + hasLower, + hasUpper, + hasNumber, + hasSymbol, + length + ); +}); + +function generatePassword(lower, upper, number, symbol, length){ + let generatedPassword = ""; + const typesCount = lower + upper + number + symbol; + const typesArr = [{lower}, {upper}, {number}, {symbol}].filter( + (item) => Object.values(item)[0] + ); + for (let i = 0; i < length; i += typesCount){ + typesArr.forEach((type) => { + const funcName = Object.keys(type)[0]; + generatedPassword += randomFunc[funcName](); + }); + } + const finalPassword = generatedPassword.slice(0, length); + return finalPassword; +} + +let button = document.getElementById("clipboardBtn"); +button.addEventListener("click", (e) => { + e.preventDefault(); + document.execCommand( + "copy", + false, + document.getElementById("PasswordResult").select() + ); +}); \ No newline at end of file diff --git a/assets/screenshot.jpg b/assets/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bed1eb68ea35d37e36b6ae75f8cebb60f0dcedfc GIT binary patch literal 51629 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 + + + + + + + + + JS Password Generator + + +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + + + \ No newline at end of file