// Generated by CoffeeScript 1.12.2 (function() { var CloudKeys; CloudKeys = (function() { function CloudKeys() { this.entities = []; this.version = ""; this.password = ''; $('#pw').focus().keyup((function(_this) { return function(evt) { var that = this; if (evt.keyCode === 13) { _this.password = $(that).val(); $('#loader').removeClass('hide'); _this.fetchData(); $('#newEntityLink').click(function() { return _this.showForm(); }); $('#editEncPWLink').click(function() { return _this.showEditEncPWForm(); }); $('#passwordRequest').addClass('hide'); $('#search').keyup(function() { var that = this; _this.limitItems(_this.getItems($(that).val())); }); $('#search').focus(); return $(window).keyup(function(evt) { if (evt.altKey === true && evt.keyCode === 66) { if (typeof window.copyToClipboard === "function") { copyToClipboard($('#items li.active .username').val()); } else { $('#items li.active .username').focus().select(); } } if (evt.altKey === true && evt.keyCode === 79) { if (typeof window.copyToClipboard === "function") { copyToClipboard($('#items li.active .password').data('toggle')); } else { $('#items li.active .passwordtoggle em').click(); $('#items li.active .password').focus().select(); } } if (evt.altKey === true && evt.keyCode === 80) { if (typeof window.copyToClipboard === "function") { copyToClipboard($('#items li.active .password').data('toggle')); } else { $('#items li.active .password').focus().select(); } } if (evt.altKey === true && evt.keyCode === 85) { if (typeof window.copyToClipboard === "function") { return copyToClipboard($('#items li.active .url').val()); } else { return $('#items li.active .url').focus().select(); } } }); } }; })(this)); } CloudKeys.prototype["import"] = function(xml) { var e, entity, entry, group, j, l, len, len1, parsedXML, ref, ref1, tag; parsedXML = $.parseXML(xml); ref = $(parsedXML).find('group'); for (j = 0, len = ref.length; j < len; j++) { group = ref[j]; tag = $(group).find('>title').text(); ref1 = $(group).find('entry'); for (l = 0, len1 = ref1.length; l < len1; l++) { entry = ref1[l]; e = $(entry); entity = {}; entity['title'] = e.find('title').text(); entity['username'] = e.find('username').text(); entity['password'] = e.find('password').text(); entity['url'] = e.find('url').text(); entity['comment'] = e.find('comment').text(); entity['tags'] = tag; this.entities.push(entity); } } return this.updateData((function(_this) { return function() { $('#import').val(''); return $('#importLink').click(); }; })(this)); }; CloudKeys.prototype.updateData = function(callback) { var encrypted, hash; encrypted = this.encrypt(JSON.stringify(this.entities)); hash = CryptoJS.SHA1(encrypted).toString(); return $.post('ajax', { 'version': this.version, 'checksum': hash, 'data': encrypted }, (function(_this) { return function(result) { if (result.error === true) { return alert("An error occured, please reload and try it again"); } else { if (typeof callback !== "undefined") { callback(); } return _this.updateInformation(result); } }; })(this), "json"); }; CloudKeys.prototype.fetchData = function() { return $.get('ajax', (function(_this) { return function(data) { return _this.updateInformation(data); }; })(this), "json"); }; CloudKeys.prototype.updateInformation = function(data) { var e; this.version = data.version; if (data.data === "") { this.entities = []; } else { try { this.entities = $.parseJSON(this.decrypt(data.data)); } catch (error) { e = error; window.location.reload(); } } this.entities.sort(this.sortItems); this.showItems(this.getItems('')); return this.limitItems(this.getItems($('#search').val())); }; CloudKeys.prototype.encrypt = function(value) { return CryptoJS.AES.encrypt(value, this.password).toString(); }; CloudKeys.prototype.decrypt = function(value) { return CryptoJS.AES.decrypt(value, this.password).toString(CryptoJS.enc.Utf8); }; CloudKeys.prototype.getClipboardCode = function(value) { var cb; cb = $('
'); cb.click(function(e) { var elem; elem = $("").css({ 'position': 'absolute', 'left': '-9999px', 'readonly': 'readonly', 'top': (window.pageYOffset || document.documentElement.scrollTop) + 'px' }); $("body").append(elem); elem.focus(); elem.select(); document.execCommand('copy'); elem.remove(); }); return cb; }; CloudKeys.prototype.limitItems = function(items) { var current; $('#resultdescription span').text(items.length); current = 0; $('#items>li').each((function(_this) { return function(k, v) { var item; item = $(v); item.removeClass('odd'); if ($.inArray(item.data('num'), items) === -1) { item.addClass('hide'); } else { if (item.hasClass('hide')) { item.removeClass('hide'); } if (current % 2 === 0) { item.addClass('odd'); } current = current + 1; } }; })(this)); }; CloudKeys.prototype.showItems = function(items) { var additionalClass, c, char, counter, field, i, item, itemContainer, j, len, lines_match, password, ref, ul; $('#items li').remove(); itemContainer = $('#items'); $('#resultdescription span').text(items.length); for (i = j = 0, len = items.length; j < len; i = ++j) { item = items[i]; additionalClass = ""; if (i % 2 === 0) { additionalClass = "odd"; } item = this.entities[item]; c = $("
  • " + item.title + " " + item.username + "
  • "); ul = $(""); password = ""; ref = item.password; for (char in ref) { i = ref[char]; password += "*"; } field = $("

  • "); ul.append(field); this.getClipboardCode(item.username).insertBefore(field.find("br")); field = $("
  • (toggle visibility)
  • "); ul.append(field); this.getClipboardCode(item.password).insertBefore(field.find("br")); field = $("

  • "); ul.append(field); this.getClipboardCode(item.url).insertBefore(field.find("br")); lines_match = item.comment.match(/\n/g); if (lines_match !== null) { counter = lines_match.length; } if (counter < 2) { counter = 2; } field = $("

  • "); ul.append(field); this.getClipboardCode(item.comment).insertBefore(field.find("br")); field = $("

  • "); ul.append(field); this.getClipboardCode(item.tags).insertBefore(field.find("br")); ul.append("

  • "); ul.find('.btn-primary').click((function(_this) { return function() { var t = this; var num; num = $(t).parent().parent().parent().data('num'); if (typeof num !== "undefined" && typeof num !== null) { return _this.showForm(num); } }; })(this)); ul.find('.passwordtoggle em').click((function(_this) { return function() { var t = this; var elem, original; elem = $(t).parent().find('.password'); original = elem.data('toggle'); elem.data('toggle', elem.val()); return elem.val(original); }; })(this)); c.append(ul); c.click((function(_this) { return function() { var that = this; var elem; elem = $(that); if (elem.hasClass('active') === false) { $('#items li.active').removeClass('active').find('ul').slideUp(); elem.addClass('active'); return elem.find('ul').slideDown(); } }; })(this)); c.find('input').focus().select(); itemContainer.append(c); } $('.hide').removeClass('hide'); $('#loader').addClass('hide'); $('#passwordRequest').addClass('hide'); $('#search').focus(); }; CloudKeys.prototype.getItems = function(search) { var i, item, j, len, ref, result; result = []; search = search.toLowerCase(); ref = this.entities; for (i = j = 0, len = ref.length; j < len; i = ++j) { item = ref[i]; if (item.title.toLowerCase().indexOf(search) !== -1 || item.username.toLowerCase().indexOf(search) !== -1 || item.tags.toLowerCase().indexOf(search) !== -1) { item.num = i; result.push(i); } } return result; }; CloudKeys.prototype.sortItems = function(a, b) { var aTitle, bTitle; aTitle = a.title.toLowerCase(); bTitle = b.title.toLowerCase(); return ((aTitle < bTitle) ? -1 : ((aTitle > bTitle) ? 1 : 0)); }; CloudKeys.prototype.showForm = function(num) { var elem, fields, j, len; $('#editDialog input').val(''); $('#editDialog textarea').val(''); $('#editDialog .hide').removeClass('hide'); fields = ['title', 'username', 'password', 'url', 'comment', 'tags']; if (typeof num !== "undefined" && typeof this.entities[num] !== "undefined") { $('#editDialog input[name="num"]').val(num); for (j = 0, len = fields.length; j < len; j++) { elem = fields[j]; $("#editDialog #" + elem).val(this.entities[num][elem]); } $("#editDialog input#repeat_password").val(this.entities[num]['password']); } else { $('#editDialog button.btn-danger').addClass('hide'); } $('#editDialog').modal({}); $('#editDialog .btn-danger').unbind('click').click((function(_this) { return function() { var confirmation; confirmation = confirm('Are you sure?'); if (confirmation === true) { num = $('#editDialog input[name="num"]').val(); if (typeof num !== "undefined" && typeof num !== null && num !== "") { _this.entities.splice(num, 1); return _this.updateData(function() { return $('#formClose').click(); }); } } }; })(this)); return $('#editDialog .btn-primary').unbind('click').click((function(_this) { return function() { var entity, field, l, len1; if (_this.validateForm()) { num = $('#editDialog input[name="num"]').val(); entity = {}; for (l = 0, len1 = fields.length; l < len1; l++) { field = fields[l]; entity[field] = $("#" + field).val(); } if (typeof num !== "undefined" && num !== "") { _this.entities[num] = entity; } else { _this.entities.push(entity); } _this.updateData(function() { return $('#formClose').click(); }); } }; })(this)); }; CloudKeys.prototype.validateForm = function() { var success; $('#editDialog .has-error').removeClass('has-error'); success = true; if ($('#title').val() === "") { $('#title').parent().addClass('has-error'); success = false; } if ($('#password').val() !== "" && $('#repeat_password').val() !== $('#password').val()) { $('#password, #repeat_password').parent().addClass('has-error'); success = false; } return success; }; CloudKeys.prototype.showEditEncPWForm = function() { $('#editEncPWDialog input').val(''); $('#editEncPWDialog .hide').removeClass('hide'); $('#editEncPWDialog').modal({}); return $('#editEncPWDialog .btn-primary').unbind('click').click((function(_this) { return function() { var confirmation, new_password; $('#editEncPWDialog .has-error').removeClass('has-error'); confirmation = confirm('Do you really want to update your encryption password?'); if (confirmation !== true) { return; } if ($('#editEncPW_current_password').val() !== _this.password) { $('#editEncPW_current_password').parent().addClass('has-error'); return; } new_password = $('#editEncPW_password').val(); if (new_password === void 0 || new_password === '') { $('#editEncPW_password').parent().addClass('has-error'); return; } if (new_password !== $('#editEncPW_repeat_password').val()) { $('#editEncPW_password, #editEncPW_repeat_password').parent().addClass('has-error'); return; } _this.password = new_password; _this.updateData(function() { return $('#formEncPWClose').click(); }); }; })(this)); }; return CloudKeys; })(); window.CloudKeys = new CloudKeys(); $('#importLink').click((function(_this) { return function() { return $('#importContainer').toggle(500); }; })(this)); $('#importContainer button').click((function(_this) { return function() { return window.CloudKeys["import"]($('#import').val()); }; })(this)); }).call(this);