-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpassworder.js
121 lines (105 loc) · 3.42 KB
/
passworder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Test
let eventloop = require("event_loop");
let gui = require("gui");
let subMenu = require("gui/submenu");
let textinput = require("gui/text_input");
let dialog = require("gui/dialog");
let loading = require("gui/loading");
let storage = require("storage");
let badusb = require("badusb");
let notify = require("notification");
let core = load(__dirname + "/.lib/api.js");
let filePath = "/ext/apps_data/passworder";
let fileName = "/passwords.txt";
let lengths = [5, 8, 40, 45, 100];
let generatedPassword = "";
let views = {
lengthChooser: subMenu.makeWith({
header: "Wie lang?",
items: ["5", "8", "40", "45", "100"]
}),
nameInput: textinput.makeWith({
header: "Name"
}),
generated: dialog.makeWith({
header: "Passwort erstellt!",
text: "Das Passwort wurde erstellt und gespeichert!",
center: "Weiter",
right: "Ende"
}),
sendDialog: dialog.makeWith({
header: "Passwort senden",
text: "Soll das Passwort gesendet werden?",
center: "Senden",
right: "Fertig"
}),
sending: loading.make()
};
badusb.setup({
vid: 0xAAAA,
pid: 0xBBBB,
mfr_name: "ProxySocke",
prod_name: "Passworder",
layoutPath: "/ext/badusb/assets/layouts/de-DE.kl"
});
function writePassword(name, password) {
storage.makeDirectory(filePath);
let line = name + ": " + password + "\n";
let file;
if (storage.fileExists(filePath + fileName)) {
file = storage.openFile(filePath + fileName, "w", "open_append");
file.write(line);
file.close();
return;
}
file = storage.openFile(filePath + fileName, "w", "create_always");
file.write(line);
file.close();
};
function onLengthChoosen(_sub, index) {
generatedPassword = core.randomString(lengths[index]);
gui.viewDispatcher.switchTo(views.nameInput);
};
function onNameInput(_sub, name) {
writePassword(name, generatedPassword);
gui.viewDispatcher.switchTo(views.generated);
};
function onGeneratedNext(_sub, button, eventLoop) {
if (button === "center") {
gui.viewDispatcher.switchTo(views.sendDialog);
} else if (button === "right") {
eventLoop.stop();
}
};
function onSendDialogInput(_sub, button, eventLoop) {
if (button === "center") {
gui.viewDispatcher.switchTo(views.sending);
delay(50);
if (!badusb.isConnected()) {
views.sendDialog.set("header", "Senden schlug fehl")
views.sendDialog.set("text", "Keine USB Verbindung!")
gui.viewDispatcher.switchTo(views.sendDialog);
notify.error();
return;
}else {
views.sendDialog.set("header", "Gesendet!")
views.sendDialog.set("text", "Das Passwort wurde gesendet!")
}
badusb.print(generatedPassword);
notify.success();
delay(50);
gui.viewDispatcher.switchTo(views.sendDialog);
} else if (button === "right") {
eventLoop.stop();
}
};
gui.viewDispatcher.switchTo(views.lengthChooser);
eventloop.subscribe(views.lengthChooser.chosen, onLengthChoosen);
eventloop.subscribe(views.nameInput.input, onNameInput);
eventloop.subscribe(views.generated.input, onGeneratedNext, eventloop);
eventloop.subscribe(views.sendDialog.input, onSendDialogInput, eventloop);
eventloop.subscribe(gui.viewDispatcher.navigation, function(_sub, _, eventLoop){
eventLoop.stop();
}, eventloop);
eventloop.run();
badusb.quit();