mirror of
https://github.com/evilsocket/arc.git
synced 2024-05-26 22:37:37 +03:00
167 lines
3.8 KiB
JavaScript
167 lines
3.8 KiB
JavaScript
/*
|
|
* Arc - Copyleft of Simone 'evilsocket' Margaritelli.
|
|
* evilsocket at protonmail dot com
|
|
* https://www.evilsocket.net/
|
|
*
|
|
* See LICENSE.
|
|
*/
|
|
|
|
var g_EntryCounter = 0;
|
|
|
|
var REGISTERED_TYPES = [
|
|
new URLEntry("URL", ""),
|
|
new InputEntry("Text Input", ""),
|
|
new CheckboxEntry("Checkbox", ""),
|
|
new PasswordEntry("Password", ""),
|
|
new TOTPEntry("2FA", ""),
|
|
new TextEntry("Text", ""),
|
|
new MarkdownEntry("Markdown", ""),
|
|
new HTMLEntry("HTML", ""),
|
|
new CodeEntry("Source Code", ""),
|
|
new FileEntry("File(s)", ""),
|
|
new BTCAddressEntry("Bitcoin Address", ""),
|
|
];
|
|
|
|
var REGISTERED_TEMPLATES = [
|
|
{
|
|
name: "Web Login", fields: [
|
|
new URLEntry("URL", "https://"),
|
|
new InputEntry("Login", "<default_login>"),
|
|
new PasswordEntry("Password", "")
|
|
]
|
|
},
|
|
{
|
|
name: "Email Account", fields: [
|
|
new InputEntry("Provider", ""),
|
|
new InputEntry("SMTP Server", ""),
|
|
new PasswordEntry("SMTP Password", ""),
|
|
new InputEntry("IMAP Server", ""),
|
|
new PasswordEntry("IMAP Password", "")
|
|
]
|
|
},
|
|
{
|
|
name: "SSH / FTP Account", fields: [
|
|
new URLEntry("Hostname", ""),
|
|
new InputEntry("Username", "<default_username>"),
|
|
new PasswordEntry("Password", "")
|
|
]
|
|
},
|
|
{
|
|
name: "Credit Card", fields: [
|
|
new InputEntry("Bank Name", ""),
|
|
new InputEntry("Owner Name", "<default_full_name>"),
|
|
new InputEntry("Card Number", ""),
|
|
new InputEntry("Valid Until", ""),
|
|
new PasswordEntry("CVV", "")
|
|
]
|
|
},
|
|
{
|
|
name: "Simple List", fields: [
|
|
new CheckboxEntry("Option A", ""),
|
|
new CheckboxEntry("Option B", ""),
|
|
new CheckboxEntry("Option C", ""),
|
|
new CheckboxEntry("Option D", ""),
|
|
new CheckboxEntry("Option E", ""),
|
|
]
|
|
}
|
|
];
|
|
|
|
/*
|
|
* taken from https://github.com/component/escape-html/blob/master/index.js
|
|
*/
|
|
var matchHtmlRegExp = /["'&<>]/;
|
|
|
|
function escapeHtml(string) {
|
|
var str = '' + string;
|
|
var match = matchHtmlRegExp.exec(str);
|
|
|
|
if (!match) {
|
|
return str;
|
|
}
|
|
|
|
var escape;
|
|
var html = '';
|
|
var index = 0;
|
|
var lastIndex = 0;
|
|
|
|
for (index = match.index; index < str.length; index++) {
|
|
switch (str.charCodeAt(index)) {
|
|
case 34: // "
|
|
escape = '"';
|
|
break;
|
|
case 38: // &
|
|
escape = '&';
|
|
break;
|
|
case 39: // '
|
|
escape = ''';
|
|
break;
|
|
case 60: // <
|
|
escape = '<';
|
|
break;
|
|
case 62: // >
|
|
escape = '>';
|
|
break;
|
|
default:
|
|
continue;
|
|
}
|
|
|
|
if (lastIndex !== index) {
|
|
html += str.substring(lastIndex, index);
|
|
}
|
|
|
|
lastIndex = index + 1;
|
|
html += escape;
|
|
}
|
|
|
|
return lastIndex !== index
|
|
? html + str.substring(lastIndex, index)
|
|
: html;
|
|
}
|
|
|
|
// Get a registered entry given its type.
|
|
function TypeProto(type) {
|
|
for (var i = 0; i < REGISTERED_TYPES.length; i++) {
|
|
var registered = REGISTERED_TYPES[i];
|
|
if (registered.type == type) {
|
|
return registered;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Clone a registered entry and make the instance id unique.
|
|
function TypeClone(e) {
|
|
var clone = $.extend(true, {}, e);
|
|
|
|
clone.id += '_' + g_EntryCounter++;
|
|
|
|
if (clone.value.indexOf('<default') == 0) {
|
|
var def_value_name = 'arc_' + clone.value.replaceAll('<', '').replaceAll('>', '');
|
|
// lookup default value from local storage
|
|
if (window.localStorage.hasOwnProperty(def_value_name)) {
|
|
clone.value = window.localStorage[def_value_name];
|
|
} else {
|
|
// no default value has been defined yet for this, fallback to empty clone
|
|
clone.value = '';
|
|
}
|
|
} else {
|
|
// create an empty clone
|
|
clone.value = "";
|
|
}
|
|
|
|
return clone;
|
|
}
|
|
|
|
// Create an Entry derived object from the 'o' JSON object.
|
|
function TypeFactory(o) {
|
|
var proto = TypeProto(o.type);
|
|
var entry = TypeClone(proto);
|
|
|
|
entry.Populate(o);
|
|
|
|
return entry;
|
|
}
|
|
|
|
|