diff --git a/.gitignore b/.gitignore index 86e427483..a0d54ca79 100644 --- a/.gitignore +++ b/.gitignore @@ -40,7 +40,6 @@ lib/* !lib/socket.io.js js/copayBundle.js -config.js webapp/copay-webapp webapp/download diff --git a/README.md b/README.md index e5bec4062..417e754e4 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ [![Build Status](https://secure.travis-ci.org/bitpay/copay.png)](http://travis-ci.org/bitpay/copay) -Copay -===== +# Copay -Installation: +## Installation: ``` git clone https://github.com/bitpay/copay.git @@ -21,7 +20,6 @@ Build Copay: npm install bower install grunt shell --target=dev -cp config.template.js config.js ``` Open Copay: @@ -31,6 +29,8 @@ npm start Then visit localhost:3000 in your browser. + +## Running copay To run on a different port: ``` PORT=3001 npm start @@ -45,9 +45,10 @@ PORT=3004 npm start PORT=3005 npm start ``` -To open n different instances just run: +To open n different instances more easily, just run: ``` -node launch.js n +n=5 +node launch.js $n & ``` To require Copay as a module for use within you application: @@ -59,8 +60,14 @@ require('copay').start(3000, function(location) { ``` -About Copay -=========== + +## Configuration + +Default configuration can be found in the config.js file. +See config.js for more info on configuration options. + + +# About Copay General ------- diff --git a/config.template.js b/config.js similarity index 77% rename from config.template.js rename to config.js index 20b3988e9..bb7389bb7 100644 --- a/config.template.js +++ b/config.js @@ -1,26 +1,44 @@ 'use strict'; var defaultConfig = { + // livenet or testnet networkName: 'testnet', + + // wallet limits + limits: { + totalCopayers: 12, + mPlusN: 100 + }, + + // network layer (PeerJS) config network: { - // key: 'lwjd5qra8257b9', //Copay API key for public PeerJS server - // This is for running local peerJs with params: ./peerjs -p 10009 -k 'sdfjhwefh' - //key: 'sdfjhwefh', - //host: 'localhost', - //port: 10009, - //path: '/', - // - key: 'satoshirocks', // api key for the peerjs server - host: '162.242.219.26', // peerjs server + // Use this to run your own local PeerJS server + // with params: ./peerjs -p 10009 -k '6d6d751ea61e26f2' + /* + key: '6d6d751ea61e26f2', + host: 'localhost', + port: 10009, + path: '/', + */ + + // Use this to connect to bitpay's PeerJS server + key: 'satoshirocks', + host: '162.242.219.26', port: 80, path: '/', + + // other PeerJS config maxPeers: 15, debug: 3, + + // Network encryption config sjclParams: { salt: 'mjuBtGybi/4=', // choose your own salt (base64) iter: 1000, mode: 'ccm', ts: parseInt(64), }, + + // PeerJS internal config object config: { 'iceServers': [ // Pass in STUN and TURN servers for maximum network compatibility @@ -78,28 +96,35 @@ var defaultConfig = { ] } }, - limits: { - totalCopayers: 12, - mPlusN: 100 - }, + + // wallet default config wallet: { requiredCopayers: 2, totalCopayers: 3, spendUnconfirmed: 1, verbose: 1, }, + + // blockchain service API config blockchain: { host: 'test.insight.is', port: 3001 }, + // socket service API config socket: { host: 'test.insight.is', port: 3001 }, + + // local encryption/security config passphrase: { iterations: 100, storageSalt: 'mjuBtGybi/4=', }, + + // theme list themes: ['default'], + + verbose: 1, }; diff --git a/index.html b/index.html index a040366e0..d54ed8ea8 100644 --- a/index.html +++ b/index.html @@ -73,6 +73,15 @@ +
+
+
+ A newer version of Copay is now available, please update your wallet to a latest version. + Please check Copay.io. +
+
+
+
@@ -209,7 +218,7 @@

Join a Wallet in Creation

- +
@@ -300,7 +309,7 @@
Your Wallet Password(doesn't need to be shared) Required
+ ng-model="walletPassword" check-strength="passwordStrength" tooltip="Password strength: {{passwordStrength}}" tooltip-trigger="focus" required>
Wallet name Optional
@@ -725,6 +734,7 @@ on supported browsers please check http://www.w

go back...

+ diff --git a/js/controllers/header.js b/js/controllers/header.js index 36c40e123..9c76edf88 100644 --- a/js/controllers/header.js +++ b/js/controllers/header.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copay.header').controller('HeaderController', - function($scope, $rootScope, $location, $notification, walletFactory, controllerUtils) { + function($scope, $rootScope, $location, $notification, $http, walletFactory, controllerUtils) { $scope.menu = [ { 'title': 'Addresses', @@ -23,6 +23,18 @@ angular.module('copay.header').controller('HeaderController', var beep = new Audio('sound/transaction.mp3'); + $http.get('https://api.github.com/repos/bitpay/copay/tags').success(function(data){ + var toInt = function (s) { return parseInt(s); }; + var latestVersion = data[0].name.replace('v', '').split('.').map(toInt); + var currentVersion = copay.version.split('.').map(toInt); + + if (currentVersion[0] < latestVersion[0]){ + $scope.updateVersion = 'error'; + } else if (currentVersion[0] == latestVersion[0] && currentVersion[1] < latestVersion[1]) { + $scope.updateVersion = 'info'; + } + }); + // Initialize alert notification (not show when init wallet) $rootScope.txAlertCount = 0; $rootScope.$watch('txAlertCount', function(txAlertCount) { diff --git a/js/directives.js b/js/directives.js index 822fdae85..33fad2040 100644 --- a/js/directives.js +++ b/js/directives.js @@ -124,7 +124,7 @@ angular.module('copay.directives') return { replace: false, restrict: 'EACM', - scope: { model: '=checkStrength' }, + require: 'ngModel', link: function(scope, element, attrs) { var _grep = function(elems, callback, invert) { var callbackInverse, @@ -146,6 +146,7 @@ angular.module('copay.directives') }; var strength = { + messages: ['too weak', 'weak', 'weak', 'medium', 'strong'], colors: ['#c0392b', '#e74c3c', '#d35400', '#f39c12', '#27ae60'], mesureStrength: function (p) { var _force = 0; @@ -178,14 +179,15 @@ angular.module('copay.directives') else if (s <= 40) { idx = 3; } else { idx = 4; } - return { idx: idx + 1, col: this.colors[idx] }; + return { idx: idx + 1, col: this.colors[idx], message: this.messages[idx] }; } }; - - scope.$watch('model', function (newValue, oldValue) { + + scope.$watch(attrs.ngModel, function (newValue, oldValue) { if (newValue && newValue !== '') { var c = strength.getColor(strength.mesureStrength(newValue)); - element.css({ 'border-color': c.col }) + element.css({ 'border-color': c.col }); + scope[attrs.checkStrength] = c.message; } }); }