Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
# Pw-manager-nodejs

Pw-Manager-Nodejs-opensource

This is my first project with nodejs! Please keep that in mind.

# English

This Pw- Manager was created by me in NodeJs. This is my first project with NodeJs, Express and Crypto.
A mysql db is also required.

What can it do?

- Signup user
- Login user
- Store your data with site, username and pw
Expand All @@ -23,6 +26,7 @@ Template link: Bootstrapdash.com/demo/corona-free/jquery/template/index.html
The main focus of the project is the logic and function of the Pw Tresor.

Updates that will follow are:

- Generate secure pw automatic function.
- Pw share with other users on your system.
- Automatic logout after 5 minutes
Expand All @@ -32,10 +36,12 @@ im open to suggestions and happy to hear from you
[message me](mailto:githubprojects@herrmannsven.de?subject=[GitHub]%20Source%20Han%20Sans)

# German

Dieser Pw Tresor wurde von mir in NodeJs erstellt. Das ist mein erstes Projekt mit NodeJs, Express und Crypto.
Außerdem wird eine mysql Db benötigt.

Was kann der Password- Manager?

- Benutzer Registrieren
- Benutzer einloggen
- Passowrd, Benutzername und App/Seitenname speichern
Expand All @@ -44,11 +50,12 @@ Was kann der Password- Manager?
- Passwort ändern
- Passwort löschen

Das Design Template stammt von Bootstrapdash einige Anpassungen wurden von mir durchgeführt.
Das Design Template stammt von Bootstrapdash einige Anpassungen wurden von mir durchgeführt.
Template-Link: Bootstrapdash.com/demo/corona-free/jquery/template/index.html
Der schwerpunkt des Projektes liegt mir aber an der Logik und funktion des Pw Tresores.

Updates die folgen werden sind:

- generate secure pw automatic function.
- Pw teilen mit anderen Nutzern auf deinem System.
- Automatischer logout nach 5 Minuten
Expand All @@ -57,18 +64,16 @@ Updates die folgen werden sind:
schreibt mir gerne bei Fragen und Anregungen.
[message me](mailto:githubprojects@herrmannsven.de?subject=[GitHub]%20Source%20Han%20Sans)


![image](https://user-images.githubusercontent.com/19588101/156414735-43d82950-c763-4738-b53f-07c36b56606b.png)
![image](https://user-images.githubusercontent.com/19588101/156414766-1d074d1b-68c9-4150-b240-c27d91c56970.png)
![image](https://user-images.githubusercontent.com/19588101/156414790-b5d313c6-4b84-4b38-bb9b-102850d1563d.png)


<br>

<b>Credits</b>
- frontend Design: <a href="https://www.bootstrapdash.com" >Bootstrapdash</a>
- Template used for project: <a href="https://www.bootstrapdash.com/demo/corona-free/jquery/template/index.html" >Corona-Free</a>
<br>
<br>
<b>Special thanks to </b> <a href="https://github.com/myMartek" >MyMartek</a> for all the codereviews.

- frontend Design: <a href="https://www.bootstrapdash.com" >Bootstrapdash</a>
- Template used for project: <a href="https://www.bootstrapdash.com/demo/corona-free/jquery/template/index.html" >Corona-Free</a>
<br>
<br>
<b>Special thanks to </b> <a href="https://github.com/myMartek" >MyMartek</a> for all the codereviews.
90 changes: 45 additions & 45 deletions administration.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
// This script runs on serversider

//dependencies required for the app
import connection from './Database/database.js';
import escape from 'lodash.escape';
import customer from './customer.js';
import moment from 'moment';
import { decrypt } from './crypto/crypto.js';
import { promisify } from 'es6-promisify';
// dependencies required for the app
import { promisify } from "es6-promisify";
import escape from "lodash.escape";
import moment from "moment";

import { decrypt } from "./crypto/crypto.js";
import customer from "./customer.js";
import connection from "./Database/database.js";

let encryptArray = []; // Darf nicht in die function rein.

async function loadData(req, res) {
try {
if (!req.session.loggedIn) {
return;//res.render('login', { errormsg: '' });
return; // res.render('login', { errormsg: '' });
}
console.log('LoadDate Username= ' + req.session.username);

console.log("LoadDate Username= " + req.session.username);

let pwItemList = await connection.getAllPwFromUser(req);

if (req.session.loggedIn) {
pwItemList.forEach(row => {
pwItemList.forEach((row) => {
try {
row.Name = decrypt(row.Name, req.session.pw);

Expand All @@ -38,59 +39,65 @@ async function loadData(req, res) {
let errormsg = req.session.errormsg;
req.session.errormsg = undefined;

return res.render('index', { errormsg, pwDatas: pwItemList, userData: customer.getUserFromSession(req), moment: moment });
return res.render("index", {
errormsg,
pwDatas: pwItemList,
userData: customer.getUserFromSession(req),
moment: moment,
});
} else {
return; //res.render('login', { errormsg: '' });
return; // res.render('login', { errormsg: '' });
}
} catch (err) {
console.log('Error on load: ' + err);
console.log("Error on load: " + err);
}
}

/** Returns customers list to ajax call
*
* @param {*} req
* @param {*} res
/**
* Returns customers list to ajax call
*
* @param {*} req
* @param {*} res
*/
async function getCustomers(req,res) {
async function getCustomers(req, res) {
try {
res.send(await connection.getCustomers());
} catch (err) {
console.log('addnewpw err: ' + err);
console.log("addnewpw err: " + err);
}
}

async function addNewPw(req, res) {
try {
await connection.insertPw(req, res);

res.redirect('/');
res.redirect("/");
} catch (err) {
console.log('addnewpw err: ' + err);
console.log("addnewpw err: " + err);
}
}

async function deletePw(req, res) {
try {
if (req.body.confirmation === 'yes') {
if (req.body.confirmation === "yes") {
await connection.deletePw(req.body.elementId);

res.redirect('/');
res.redirect("/");
}
} catch (err) {
console.log('deletePw err: ' + err);
console.log("deletePw err: " + err);
}
}

async function showPw(req, res) {
try{
try {
if (encryptArray.includes(req.body.id)) {
let index = encryptArray.indexOf(req.body.id);
if (index > -1) {
encryptArray.splice(index, 1);
}

res.send(escape('*****'));
res.send(escape("*****"));
} else {
encryptArray.push(req.body.id);

Expand All @@ -100,8 +107,8 @@ async function showPw(req, res) {
return await getDecriptedPw(req, res);
}
}
}catch(err){
console.log('Error in ShowPw: ' + err);
} catch (err) {
console.log("Error in ShowPw: " + err);
}
}

Expand All @@ -110,16 +117,16 @@ async function copyPw(req, res) {
}

async function getDecriptedPw(req, res) {
try{
try {
if (req.session.loggedIn) {
let decryptedPw = await connection.getDecriptedPw(req, res);

if(decryptedPw !== null){
if (decryptedPw !== null) {
res.send(escape(decryptedPw));
}
}
}catch(err){
console.log('Error in getDecriptedPw: ' + err);
} catch (err) {
console.log("Error in getDecriptedPw: " + err);
}
}

Expand All @@ -132,35 +139,28 @@ async function getDecriptedPw(req, res) {
async function changePw(req, res) {
try {
if (escape(req.body.newPw) !== escape(req.body.newPw1)) {
req.session.errormsg = req.t('pwMissmatch');
req.session.errormsg = req.t("pwMissmatch");
}

if (escape(req.body.changeelement) === null) {
req.session.errormsg = req.t('idIsNotDefined');
req.session.errormsg = req.t("idIsNotDefined");
}

if (req.session.loggedIn) {
await connection.updatePwById(req);
}
} catch (err) {
console.log('Error in changePwApp: ' + err);
console.log("Error in changePwApp: " + err);
}

let save = promisify(req.session.save.bind(req.session));
await save();
res.redirect('/');
res.redirect("/");
}

export default {
loadData,
routes: {
post: {
getCustomers,
addNewPw,
copyPw,
changePw,
deletePw,
showPw
}
post: { getCustomers, addNewPw, copyPw, changePw, deletePw, showPw },
},
};
Loading