From cd55bb01756ba97fe808c5818e29b0a516737afb Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 3 Sep 2014 14:34:22 -0700 Subject: Separate account profile settings --- public/css/calculator.less | 3 +- public/js/calculator.coffee | 12 ++-- public/js/profile.coffee | 130 ++---------------------------------------- public/js/setup.coffee | 10 ++-- routes/users.js | 6 +- src/routes/users.coffee | 6 +- views/layout.html | 6 +- views/transactions/index.html | 2 +- views/users/edit.html | 13 +---- views/users/profile.html | 6 +- views/users/show.html | 8 +-- 11 files changed, 32 insertions(+), 170 deletions(-) diff --git a/public/css/calculator.less b/public/css/calculator.less index 23b729d2..2764332b 100644 --- a/public/css/calculator.less +++ b/public/css/calculator.less @@ -29,10 +29,11 @@ div.container-fluid { p, span, .form-control { font-size: 18px; } span, label { color: #999; } .form-control { height: auto; padding: 3px; display: inline-block; } + .input-group-addon { color: #000; } } div#calculator { - #exchange, #amount { width: 5em; } + #amount { width: 5em; } #received { font-size: 16px; width: 100%; } strong#total { font-size: 30px; } p#address { padding-top: 10px; } diff --git a/public/js/calculator.coffee b/public/js/calculator.coffee index 64a26a65..edbd4fa9 100644 --- a/public/js/calculator.coffee +++ b/public/js/calculator.coffee @@ -54,14 +54,15 @@ setup = -> g.user.symbol or= 'quadrigacx' g.user.unit or= 'BTC' + if g.user.title + $('#title').html("#{g.user.title}").show() + if g.user.logo $('#logo').attr('src', g.user.logo).show() - else if g.user.title - $('#title').html("#{g.user.title}").show() getAddress() if g.user.bip32 - $('#symbol').html(g.user.symbol + " bid") + $('#symbol').html(g.user.currency) $('#currency').html(g.user.currency) $('#unit').html(g.user.unit) $('#received').hide() @@ -80,8 +81,8 @@ fetchExchangeRate = -> fail(EXCHANGE_FAIL) return - g.exchange = exchange - exchange * g.user.commission * 0.01 - $('#exchange').val(g.exchange.toFixed(2)) + g.exchange = (exchange - exchange * g.user.commission * 0.01).toFixed(2) + $('#exchange').html(g.exchange) updateTotal() unless g.setupComplete @@ -232,6 +233,7 @@ multiplier = -> when 'BTC' then 1 when 'mBTC' then 1000 when 'µBTC' then 1000000 + when 'bits' then 1000000 when 'satoshis' then 100000000 diff --git a/public/js/profile.coffee b/public/js/profile.coffee index 1e929d60..ee42bf19 100644 --- a/public/js/profile.coffee +++ b/public/js/profile.coffee @@ -10,82 +10,11 @@ $(-> user = $('#username').val() $.getJSON("/#{user}.json", (data) -> - $('#username').val(data.title) - $('#email').val(data.logo) + $('#username').val(data.username) + $('#email').val(data.email) $('#profile').fadeIn() ) - units = ['BTC', 'mBTC', 'µBTC', 'satoshis'] - $.each(units, (i, v) -> - $('#unit').append("") - ) - - $('#title').blur(-> - if $(this).val() == '' and $('#logo').val() == '' - $(this).parent().addClass('has-error') - else - $(this).parent().removeClass('has-error') - ) - - $('#bip32').blur(-> - try - new BIP32($(this).val()) - $(this).parent().removeClass('has-error') - catch - $(this).parent().addClass('has-error') - ) - - $('#generate').click(-> - rng = new SecureRandom() - bytes = new Array(256) - rng.nextBytes(bytes) - - hasher = new jsSHA(bytes.toString(), 'TEXT') - rng.nextBytes(bytes) - - I = hasher.getHMAC(bytes.toString(), "TEXT", "SHA-512", "HEX") - il = Crypto.util.hexToBytes(I.slice(0, 64)) - ir = Crypto.util.hexToBytes(I.slice(64, 128)) - - key = new BIP32() - key.eckey = new Bitcoin.ECKey(il) - key.eckey.pub = key.eckey.getPubPoint() - key.eckey.setCompressed(true) - key.eckey.pubKeyHash = Bitcoin.Util.sha256ripe160(key.eckey.pub.getEncoded(true)) - key.has_private_key = true - - key.chain_code = ir - key.child_index = 0 - key.parent_fingerprint = Bitcoin.Util.hexToBytes("00000000") - key.version = BITCOIN_MAINNET_PRIVATE - key.depth = 0 - - key.build_extended_public_key() - key.build_extended_private_key() - - g.pubkey = key.extended_public_key_string() - g.privkey = key.extended_private_key_string() - - $('#modal').modal() - $('#privkey').html(g.privkey) - $('#qr').html('') - new QRCode('qr', text: g.privkey, width: 260, height: 260) - ) - - $('#encryption-password').keyup((e) -> - return if e.keyCode is 9 or e.keyCode is 16 - enc_privkey = CryptoJS.AES.encrypt(g.privkey, $(this).val()).toString() - enc_privkey = g.privkey if $(this).val() == '' - $('#privkey').html(enc_privkey) - $('#qr').html('') - new QRCode('qr', text: enc_privkey, width: 260, height: 260) - - if $(this).val() - $('#status').html('(Encrypted)') - else - $('#status').html('(Unencrypted Plaintext)') - ) - $('#confirm').blur(-> $('#confirm_error').remove() if $('#password').val() != $('#confirm').val() @@ -95,57 +24,10 @@ $(-> $('#password, #confirm').parent().removeClass('has-error') ) - $('#encryption-password, #encryption-confirm').keyup((e) -> check_passwords(e) unless e.keyCode is 9) - $('#encryption-password, #encryption-confirm').blur((e) -> check_passwords(e)) - - check_passwords = (e) -> - if $('#encryption-password').val() != $('#encryption-confirm').val() or $('#encryption-password').val() is '' - $('#encryption-password, #encryption-confirm').parent().addClass('has-error') - $('#modal .alert').removeClass('alert-success').addClass('alert-danger') - else - $('#encryption-password, #encryption-confirm').parent().removeClass('has-error') - $('#modal .alert').removeClass('alert-danger').addClass('alert-success') - - $('#print').click(-> - $('#key-dialog').printElement(printMode: 'popup') - ) - - $('a[data-toggle="tab"]').on('shown.bs.tab', (e) -> - $('#encryption-password').focus() - switch e.target.attributes.href.value - when '#step1' - $('.modal-footer button:first').hide() - $('.modal-footer button:last').html('Next').off().on('click', -> $('a[data-toggle="tab"]:eq(1)').click()) - when '#step2' - $('.modal-footer button:first').show().html('Back').off().on('click', -> $('a[data-toggle="tab"]:eq(0)').click()) - $('.modal-footer button:last').html('Next').off().on('click', -> $('a[data-toggle="tab"]:eq(2)').click()) - when '#step3' - $('.modal-footer button:first').show().html('Back').off().on('click', -> $('a[data-toggle="tab"]:eq(1)').click()) - $('.modal-footer button:last').html('Got it!').off().on('click', -> - $('#modal .form-control').blur() - if $('#modal .has-error').length > 0 - $('a[data-toggle="tab"]:eq(1)').click() - $('#modal .has-error').effect('shake', 500) - else - g.update_pub_key = true - $('#modal').modal('hide') - ) - ) - - $('.modal-footer button:last').on('click', -> $('a[data-toggle="tab"]:eq(1)').click()) - $('#modal').on('shown.bs.modal', -> - g.update_pub_key = false - $('#encryption-password, #encryption-confirm').val('').blur() - if $('.tab-pane:eq(2)').hasClass('active') - $('a[data-toggle="tab"]:eq(1)').click() - ).on('hidden.bs.modal', -> - $('#bip32').val(g.pubkey) if g.update_pub_key - ) - - $('#setup').submit(-> - $('#setup .form-control').blur() - if $('#setup .has-error').length > 0 - $('#setup .has-error').effect('shake', 500) + $('#profile').submit(-> + $('#profile .form-control').blur() + if $('#profile .has-error').length > 0 + $('#profile .has-error').effect('shake', 500) return false ) ) diff --git a/public/js/setup.coffee b/public/js/setup.coffee index fdba60df..272e2159 100644 --- a/public/js/setup.coffee +++ b/public/js/setup.coffee @@ -20,9 +20,6 @@ g = exports ? this g.proceed = false $(-> - $('[data-toggle=popover]').popover() - $('#title').focus() - $.getJSON("/js/rates.json", (data) -> currencies = Object.keys(data) currencies = currencies.sort() @@ -39,7 +36,8 @@ $(-> return unless symbol symbols = Object.keys(data[symbol]) $.each(symbols, (i, v) -> - $('#symbol').append("") + return if v == 'localbitcoins' + $('#symbol').append("") ) switch $(this).val() @@ -60,10 +58,11 @@ $(-> $('#unit').val(data.unit) $('#currency').change() $('#setup').fadeIn() + $('#title').focus() ) ) - units = ['BTC', 'mBTC', 'µBTC', 'satoshis'] + units = ['BTC', 'mBTC', 'µBTC', 'bits', 'satoshis'] $.each(units, (i, v) -> $('#unit').append("") ) @@ -196,4 +195,5 @@ $(-> $('#setup .has-error').effect('shake', 500) return false ) + ) diff --git a/routes/users.js b/routes/users.js index ad3fa165..b555f026 100644 --- a/routes/users.js +++ b/routes/users.js @@ -170,9 +170,7 @@ delete req.body.password; } return db.hmset("user:" + req.params.user, req.body, function() { - if (req.body.password == null) { - return res.redirect("/" + req.params.user); - } else { + if (req.body.password != null) { return bcrypt.hash(req.body.password, 12, function(err, hash) { return db.hmset("user:" + req.params.user, { password: hash @@ -180,6 +178,8 @@ return res.redirect("/" + req.params.user); }); }); + } else { + return res.redirect("/" + req.params.user); } }); }, diff --git a/src/routes/users.coffee b/src/routes/users.coffee index 88379884..c911fea5 100644 --- a/src/routes/users.coffee +++ b/src/routes/users.coffee @@ -127,14 +127,14 @@ module.exports = (sessions) -> if req.body.password is '' delete req.body.password db.hmset("user:"+req.params.user, req.body, -> - if not req.body.password? - res.redirect("/#{req.params.user}") - else + if req.body.password? bcrypt.hash(req.body.password, 12, (err, hash) -> db.hmset("user:"+req.params.user,password: hash, -> res.redirect("/#{req.params.user}") ) ) + else + res.redirect("/#{req.params.user}") ) verify: (req, res) -> diff --git a/views/layout.html b/views/layout.html index 0601ce1f..5be45ded 100644 --- a/views/layout.html +++ b/views/layout.html @@ -19,12 +19,10 @@