+ Add a two new libraries

+ QR-Code is now readable and decryptable
This commit is contained in:
2019-10-25 16:02:37 +02:00
parent 36b3fd6d3c
commit 48c40a5d93
8 changed files with 169 additions and 31 deletions

6
dist/main.js vendored
View File

@@ -7,8 +7,7 @@ electron_1.app.on('ready', function () {
height: 600, height: 600,
width: 1000, width: 1000,
frame: false, frame: false,
resizable: false, resizable: true,
alwaysOnTop: true,
title: "OffPass", title: "OffPass",
webPreferences: { webPreferences: {
nodeIntegration: true, nodeIntegration: true,
@@ -17,7 +16,8 @@ electron_1.app.on('ready', function () {
}); });
//win.loadURL("https://google.de") //win.loadURL("https://google.de")
win.loadFile('../src/index.html'); win.loadFile('../src/index.html');
win.setTitle("OffPass");
}); });
electron_1.app.on('window-all-closed', function () { electron_1.app.on('window-all-closed', function () {
win = null; process.exit(0);
}); });

87
package-lock.json generated
View File

@@ -33,12 +33,45 @@
"defer-to-connect": "^1.0.1" "defer-to-connect": "^1.0.1"
} }
}, },
"@types/bn.js": {
"version": "4.11.5",
"resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz",
"integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/node": { "@types/node": {
"version": "12.11.6", "version": "12.11.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.6.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.6.tgz",
"integrity": "sha512-4uPUyY1Aofo1YzoypalYHNd2SnKYxH2b6LzXwpryZCJKA2XlagZSynXx5C8sfPH0r1cSltUpaVHV2q5sYXschQ==", "integrity": "sha512-4uPUyY1Aofo1YzoypalYHNd2SnKYxH2b6LzXwpryZCJKA2XlagZSynXx5C8sfPH0r1cSltUpaVHV2q5sYXschQ==",
"dev": true "dev": true
}, },
"@types/openpgp": {
"version": "4.4.7",
"resolved": "https://registry.npmjs.org/@types/openpgp/-/openpgp-4.4.7.tgz",
"integrity": "sha512-NzmBQDTpvPvbq24oZnLGk+/vfsmofkSbYXxdJCAX314q3EBaj/ve2rig0GYnwnXLxMXekUKJe9LhQSDynRgNQQ==",
"dev": true,
"requires": {
"@types/bn.js": "*"
}
},
"asn1.js": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.2.0.tgz",
"integrity": "sha512-Q7hnYGGNYbcmGrCPulXfkEw7oW7qjWeM4ZTALmgpuIcZLxyqqKYWxCZg2UBm8bklrnB4m2mGyJPWfoktdORD8A==",
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
},
"buffer-from": { "buffer-from": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -240,8 +273,7 @@
"graceful-fs": { "graceful-fs": {
"version": "4.2.3", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
"dev": true
}, },
"http-cache-semantics": { "http-cache-semantics": {
"version": "4.0.3", "version": "4.0.3",
@@ -249,11 +281,15 @@
"integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==",
"dev": true "dev": true
}, },
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
"inherits": { "inherits": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"dev": true
}, },
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
@@ -297,6 +333,11 @@
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true "dev": true
}, },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
},
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
@@ -318,6 +359,19 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true "dev": true
}, },
"node-fetch": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
"integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
},
"node-localstorage": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz",
"integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==",
"requires": {
"write-file-atomic": "^1.1.4"
}
},
"normalize-url": { "normalize-url": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
@@ -333,6 +387,16 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"openpgp": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.6.2.tgz",
"integrity": "sha512-zgQmTZjKxjI2vs++5Ejs8wQbs9+YekOAulfq8YxKV7uUxcNxDE2IIh88I/RmjPOvpxCrV7kNqSBwVQMzZxTtDQ==",
"requires": {
"asn1.js": "^5.0.0",
"node-fetch": "^2.1.2",
"node-localstorage": "~1.3.0"
}
},
"p-cancelable": { "p-cancelable": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -406,6 +470,11 @@
"truncate-utf8-bytes": "^1.0.0" "truncate-utf8-bytes": "^1.0.0"
} }
}, },
"slide": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
"integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc="
},
"string_decoder": { "string_decoder": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -478,6 +547,16 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "dev": true
}, },
"write-file-atomic": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
"integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
"requires": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
"slide": "^1.1.5"
}
},
"yauzl": { "yauzl": {
"version": "2.4.1", "version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",

View File

@@ -3,8 +3,11 @@
"version": "1.0.0", "version": "1.0.0",
"description": "OffPass, a special password manager. All your passwords are not stored in an encrypted container but offline.", "description": "OffPass, a special password manager. All your passwords are not stored in an encrypted container but offline.",
"main": "index.js", "main": "index.js",
"dependencies": {}, "dependencies": {
"openpgp": "^4.6.2"
},
"devDependencies": { "devDependencies": {
"@types/openpgp": "^4.4.7",
"electron": "^7.0.0" "electron": "^7.0.0"
}, },
"scripts": { "scripts": {

1
src/assets/instascan.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +1,22 @@
html {
background: linear-gradient(0deg, rgba(60,60,60,1) 0%, rgba(42,44,43,1) 100%) no-repeat;
height: 100%;
width: 100%;
}
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
background-color: #2A2C2B; /*background-color: #2A2C2B;*/
overflow: hidden;
} }
h1 { h1 {
font-family: 'Oxygen', sans-serif; font-family: 'Oxygen', sans-serif;
color: #BDC3C7; color: #fff;
} }
p, span { p, span {
font-family: 'Source Sans Pro', sans-serif; font-family: 'Source Sans Pro', sans-serif;
color: #BDC3C7; color: #fff;
} }
#taskbar { #taskbar {
@@ -18,12 +24,23 @@ p, span {
position: absolute; position: absolute;
top: 0; top: 0;
width: 100%; width: 100%;
height: 64px; height: 15px;
z-index: 1;
-webkit-app-region: drag; -webkit-app-region: drag;
} }
#taskbar i { #taskbar i {
transition: .1s ease-in-out;
padding: 10px; padding: 10px;
color: #BDC3C7; color: #BDC3C7;
z-index: 5;
}
#content {
width: 100%;
height: 100%;
vertical-align: middle;
text-align: cover;
object-fit: fill;
} }
.fill { .fill {

View File

@@ -7,26 +7,55 @@
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Oxygen:700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Oxygen:700&display=swap" rel="stylesheet">
<link href="assets/fontawesome-5.11.2/css/all.css" rel="stylesheet"> <link href="assets/fontawesome-5.11.2/css/all.css" rel="stylesheet">
<script type="text/javascript" src="assets/instascan.min.js"></script>
<link href="global.css" rel="stylesheet"> <link href="global.css" rel="stylesheet">
<link href="scanner.css" rel="stylesheet">
</head> </head>
<body> <body>
<div id="taskbar">
<div class="fill"></div>
<i id="mini" class="fas fa-window-minimize" onclick="remote.BrowserWindow.getFocusedWindow().minimize()"></i>
<i id="close" class="fas fa-times" onclick="remote.BrowserWindow.getFocusedWindow().close()"></i>
</div>
<div id="content">
<!--<h1>Welcome to OffPass</h1>
<p>In this short tutorial you'll learn how to use this software.</p>
<a href="#">Let's start</a>-->
<video id="preview"></video>
</div>
<script> <script>
const { remote } = require('electron'); const { remote } = require('electron');
document.getElementById("close").onclick = () => remote.BrowserWindow.getFocusedWindow().close(); const pgp = require('openpgp');
function close() {
console.log("ghere") navigator.mediaDevices.getUserMedia({video: true});
var window = remote.BrowserWindow.getFocusedWindow().close(); const preview = document.getElementById('preview');
}
function minimize() { let scanner = new Instascan.Scanner({ video: preview, mirror: false });
console.log("hhrer")
var window = remote.BrowserWindow.getFocusedWindow().minimize(); scanner.addListener('scan', async (content) => {
content = "-----BEGIN PGP MESSAGE-----\n\n" + content + "\n-----END PGP MESSAGE-----";
console.log(content)
pgp.decrypt({
message: await pgp.message.readArmored(content),
passwords: [ '123' ],
format: 'string'
}).then((plaintext) => {
console.log(plaintext.data);
});
});
Instascan.Camera.getCameras().then(function (cameras) {
if (cameras.length > 0) {
scanner.start(cameras[0]);
navigator.mediaDevices.getUserMedia({video: true}).then((stream) => {
preview.srcObject = stream;
})
} else {
console.error('No cameras found.');
} }
}).catch(function (e) {
console.error(e);
});
</script> </script>
<div id="taskbar" onclick="minimize()">
<div class="fill"></div>
<i id="mini" class="fas fa-window-minimize" onclick="minimize()"></i>
<i id="close" class="fas fa-times" onclick="console.log('Hallo Welt')"></i>
</div>
<h1 onclick="remote.BrowserWindow.getFocusedWindow().close()">Hello World!</h1>
</body> </body>
</html> </html>

View File

@@ -6,8 +6,7 @@ app.on('ready', () => {
height: 600, height: 600,
width: 1000, width: 1000,
frame: false, frame: false,
resizable: false, resizable: true,
alwaysOnTop: true,
title: "OffPass", title: "OffPass",
webPreferences: { webPreferences: {
nodeIntegration: true, nodeIntegration: true,
@@ -16,8 +15,9 @@ app.on('ready', () => {
}); });
//win.loadURL("https://google.de") //win.loadURL("https://google.de")
win.loadFile('../src/index.html'); win.loadFile('../src/index.html');
win.setTitle("OffPass")
}); });
app.on('window-all-closed', () => { app.on('window-all-closed', () => {
win = null; process.exit(0);
}) });

9
src/scanner.css Normal file
View File

@@ -0,0 +1,9 @@
#preview {
position: absolute;
z-index: -1;
top: 0;
left: 0;
height: 100%;
width: 100%;
object-fit: cover;
}