mirror of https://github.com/BTCPrivate/copay.git
commit
f3d12f5a14
16
Makefile
16
Makefile
|
@ -5,6 +5,22 @@ sign:
|
|||
verify:
|
||||
gpg --verify browser-extensions/chrome/copay-chrome-extension.zip.sig browser-extensions/chrome/copay-chrome-extension.zip
|
||||
|
||||
sign-desktop:
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-linux32.zip.sig --detach-sig webkitbuilds/copay-linux32.zip
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-linux64.zip.sig --detach-sig webkitbuilds/copay-linux64.zip
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-osx32.dmg.sig --detach-sig webkitbuilds/copay-osx32.dmg
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-osx64.dmg.sig --detach-sig webkitbuilds/copay-osx64.dmg
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-win32.exe.sig --detach-sig webkitbuilds/copay-win32.exe
|
||||
gpg -u 1112CFA1 --output webkitbuilds/copay-win64.exe.sig --detach-sig webkitbuilds/copay-win64.exe
|
||||
|
||||
verify-desktop:
|
||||
gpg --verify webkitbuilds/copay-linux32.zip.sig webkitbuilds/copay-linux32.zip
|
||||
gpg --verify webkitbuilds/copay-linux64.zip.sig webkitbuilds/copay-linux64.zip
|
||||
gpg --verify webkitbuilds/copay-osx32.dmg.sig webkitbuilds/copay-osx32.dmg
|
||||
gpg --verify webkitbuilds/copay-osx64.dmg.sig webkitbuilds/copay-osx64.dmg
|
||||
gpg --verify webkitbuilds/copay-win32.exe.sig webkitbuilds/copay-win32.exe
|
||||
gpg --verify webkitbuilds/copay-win64.exe.sig webkitbuilds/copay-win64.exe
|
||||
|
||||
chrome:
|
||||
browser-extensions/chrome/build.sh
|
||||
|
||||
|
|
|
@ -212,15 +212,20 @@ if [ $CURRENT_OS == "WP8" ]; then
|
|||
echo "Wp8 project!!!"
|
||||
cp -R $PROJECT/www/* $PROJECT/platforms/wp8/www
|
||||
checkOK
|
||||
cp -vf wp/Properties/* $PROJECT/platforms/wp8/Properties/
|
||||
cp -vf wp/Package.appxmanifest $PROJECT/platforms/wp8/
|
||||
cp -vf wp/MainPage.xaml $PROJECT/platforms/wp8/
|
||||
checkOK
|
||||
cp -vf wp/Assets/* $PROJECT/platforms/wp8/Assets/
|
||||
cp -vf wp/SplashScreenImage.jpg $PROJECT/platforms/wp8/
|
||||
cp -vf wp/ApplicationIcon.png $PROJECT/platforms/wp8/
|
||||
cp -vf wp/Background.png $PROJECT/platforms/wp8/
|
||||
checkOK
|
||||
if ! $CLEAR
|
||||
then
|
||||
cp -vf wp/Properties/* $PROJECT/platforms/wp8/Properties/
|
||||
checkOK
|
||||
cp -vf wp/MainPage.xaml $PROJECT/platforms/wp8/
|
||||
checkOK
|
||||
cp -vf wp/Package.appxmanifest $PROJECT/platforms/wp8/
|
||||
checkOK
|
||||
cp -vf wp/Assets/* $PROJECT/platforms/wp8/Assets/
|
||||
cp -vf wp/SplashScreenImage.jpg $PROJECT/platforms/wp8/
|
||||
cp -vf wp/ApplicationIcon.png $PROJECT/platforms/wp8/
|
||||
cp -vf wp/Background.png $PROJECT/platforms/wp8/
|
||||
checkOK
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="com.bitpay.copay"
|
||||
version="1.4.1"
|
||||
android-versionCode="51"
|
||||
ios-CFBundleVersion="1.4.1">
|
||||
version="1.4.3"
|
||||
android-versionCode="53"
|
||||
ios-CFBundleVersion="1.4.3">
|
||||
<name>Copay</name>
|
||||
<description>
|
||||
A secure bitcoin wallet for friends and companies.
|
||||
|
|
|
@ -57,11 +57,11 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.4.1</string>
|
||||
<string>1.4.3</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.4.1</string>
|
||||
<string>1.4.3</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSMainNibFile</key>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
|
||||
<Identity Name="18C7659D.CopayWallet" Publisher="CN=F89609D1-EB3E-45FD-A58A-C2E3895FCE7B" Version="1.4.1.0" />
|
||||
<Identity Name="18C7659D.CopayWallet" Publisher="CN=F89609D1-EB3E-45FD-A58A-C2E3895FCE7B" Version="1.4.3.0" />
|
||||
<mp:PhoneIdentity PhoneProductId="5381aa50-9069-11e4-84cc-293caf9cbdc8" PhonePublisherId="F89609D1-EB3E-45FD-A58A-C2E3895FCE7B" />
|
||||
<Properties>
|
||||
<DisplayName>Copay Wallet</DisplayName>
|
||||
<DisplayName>Copay Bitcoin Wallet</DisplayName>
|
||||
<PublisherDisplayName>BitPay Inc.</PublisherDisplayName>
|
||||
<Logo>Assets\StoreLogo.png</Logo>
|
||||
</Properties>
|
||||
|
@ -16,7 +16,7 @@
|
|||
</Resources>
|
||||
<Applications>
|
||||
<Application Id="x5381aa50y9069y11e4y84ccy293caf9cbdc8x" Executable="AGHost.exe" EntryPoint="MainPage.xaml">
|
||||
<m3:VisualElements DisplayName="Copay Wallet" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="Copay" ForegroundText="light" BackgroundColor="#464646">
|
||||
<m3:VisualElements DisplayName="Copay Bitcoin Wallet" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="A multisignature Bitcoin Wallet" ForegroundText="light" BackgroundColor="#464646">
|
||||
<m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png">
|
||||
</m3:DefaultTile>
|
||||
<m3:SplashScreen Image="SplashScreenImage.jpg" />
|
||||
|
|
|
@ -3,9 +3,13 @@
|
|||
<DefaultLanguage code="en-US" xmlns="" />
|
||||
<Languages xmlns="">
|
||||
<Language code="en-US" />
|
||||
<Language code="fr" />
|
||||
<Language code="de" />
|
||||
<Language code="ja" />
|
||||
<Language code="es" />
|
||||
</Languages>
|
||||
<App Author="Bitpay Inc." BitsPerPixel="32" Description="A multisignature Bitcoin Wallet" Genre="apps.normal" ProductID="{5381aa50-9069-11e4-84cc-293caf9cbdc8}" Publisher="Copay Wallet" PublisherID="{31cdd08b-457c-413d-b440-f6665eec847d}" RuntimeType="Silverlight" Title="Copay Wallet" Version="0.9.9.0" xmlns="" SDOptOut="false" NotificationService="MPN">
|
||||
<IconPath IsRelative="true" IsResource="false">Assets/icon@2.png</IconPath>
|
||||
<App Author="Bitpay Inc." BitsPerPixel="32" Description="A multisignature Bitcoin Wallet" Genre="apps.normal" ProductID="{5381aa50-9069-11e4-84cc-293caf9cbdc8}" Publisher="Copay Bitcoin Wallet" PublisherID="{31cdd08b-457c-413d-b440-f6665eec847d}" RuntimeType="Silverlight" Title="Copay Bitcoin Wallet" Version="1.4.3.0" xmlns="" SDOptOut="true" NotificationService="MPN">
|
||||
<IconPath IsRelative="true" IsResource="false">Assets\icon@2.png</IconPath>
|
||||
<Capabilities>
|
||||
<Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
|
||||
<Capability Name="ID_CAP_NETWORKING" />
|
||||
|
@ -18,10 +22,10 @@
|
|||
<Tokens>
|
||||
<PrimaryToken TaskName="_default" TokenID="CopayToken">
|
||||
<TemplateFlip>
|
||||
<SmallImageURI IsRelative="true" IsResource="false">Assets/200x200@1.png</SmallImageURI>
|
||||
<SmallImageURI IsRelative="true" IsResource="false">Assets\200x200@1.png</SmallImageURI>
|
||||
<Count>0</Count>
|
||||
<BackgroundImageURI IsRelative="true" IsResource="false">Assets/200x200@2.png</BackgroundImageURI>
|
||||
<Title>Copay Wallet</Title>
|
||||
<BackgroundImageURI IsRelative="true" IsResource="false">Assets\200x200@2.png</BackgroundImageURI>
|
||||
<Title>Copay Bitcoin Wallet</Title>
|
||||
<BackContent />
|
||||
<BackBackgroundImageURI />
|
||||
<BackTitle />
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "copay",
|
||||
"description": "A multisignature wallet",
|
||||
"author": "BitPay",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.3",
|
||||
"keywords": [
|
||||
"wallet",
|
||||
"copay",
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
<div class="content preferences" ng-controller="wordsController as wordsC">
|
||||
<h4></h4>
|
||||
|
||||
|
||||
<div class="box-notification" ng-show="wordsC.error">
|
||||
<span class="text-warning">
|
||||
{{wordsC.error|translate}}
|
||||
|
@ -17,7 +16,7 @@
|
|||
|
||||
|
||||
|
||||
<div ng-show="wordsC.mnemonicWords">
|
||||
<div ng-show="wordsC.mnemonicWords || (wordsC.credentialsEncrypted && !wordsC.deleted)">
|
||||
<div class="row" ng-show="index.n==1">
|
||||
<div class="m10t columns size-14 text-gray">
|
||||
<span translate>
|
||||
|
@ -33,11 +32,11 @@
|
|||
<span translate>
|
||||
To restore this {{index.m}}-{{index.n}} <b>shared</b> wallet you will need
|
||||
</span>:
|
||||
<ol class="m10t columns size-14 text-gray">
|
||||
<li translate>Your wallet seed and access to the server that coordinated the initial wallet creation. You still need {{index.m}} keys to spend.</li>
|
||||
<li translate><b>OR</b> the wallet seed of <b>all</b> copayers in the wallet</li>
|
||||
<li translate><b>OR</b> 1 wallet export file and the remaining quorum of wallet seeds (e.g. in a 3-5 wallet: 1 wallet export file + 2 wallet seeds of any of the other copayers).</li>
|
||||
</ol>
|
||||
<ol class="m10t columns size-14 text-gray">
|
||||
<li translate>Your wallet seed and access to the server that coordinated the initial wallet creation. You still need {{index.m}} keys to spend.</li>
|
||||
<li translate><b>OR</b> the wallet seed of <b>all</b> copayers in the wallet</li>
|
||||
<li translate><b>OR</b> 1 wallet export file and the remaining quorum of wallet seeds (e.g. in a 3-5 wallet: 1 wallet export file + 2 wallet seeds of any of the other copayers).</li>
|
||||
</ol>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -46,22 +45,22 @@
|
|||
<span translate>
|
||||
To restore this {{index.m}}-{{index.n}} <b>shared</b> wallet you will need
|
||||
</span>:
|
||||
<ol class="m10t columns size-14 text-gray">
|
||||
<li translate>Your wallet seed and access to the server that coordinated the initial wallet creation. You still need {{index.m}} keys to spend.</li>
|
||||
<li translate><b>OR</b> the wallet seeds of <b>all</b> copayers in the wallet</li>
|
||||
</ol>
|
||||
<ol class="m10t columns size-14 text-gray">
|
||||
<li translate>Your wallet seed and access to the server that coordinated the initial wallet creation. You still need {{index.m}} keys to spend.</li>
|
||||
<li translate><b>OR</b> the wallet seeds of <b>all</b> copayers in the wallet</li>
|
||||
</ol>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m20t" ng-show="!wordsC.mnemonicWords && !wordsC.credentialsEncrypted">
|
||||
|
||||
<div class="row m20t" ng-show="wordsC.deleted">
|
||||
<div class="columns size-14 text-gray text-center" translate>
|
||||
Wallet seed not available. You can still export it from Advanced > Export.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="wordsC.mnemonicWords">
|
||||
<div ng-show="wordsC.mnemonicWords || (wordsC.credentialsEncrypted && !wordsC.deleted)">
|
||||
<div class="row">
|
||||
<div class="m10t columns">
|
||||
<a class="button outline light-gray expand tiny" ng-click="wordsC.toggle()">
|
||||
|
|
|
@ -5,27 +5,38 @@ angular.module('copayApp.controllers').controller('wordsController',
|
|||
|
||||
var msg = gettext('Are you sure you want to delete the backup words?');
|
||||
var successMsg = gettext('Backup words deleted');
|
||||
this.show = false;
|
||||
|
||||
var self = this;
|
||||
self.show = false;
|
||||
var fc = profileService.focusedClient;
|
||||
|
||||
this.toggle = function() {
|
||||
this.show = !this.show;
|
||||
if (fc.isPrivKeyEncrypted()) self.credentialsEncrypted = true;
|
||||
else {
|
||||
setWords(fc.getMnemonic());
|
||||
$rootScope.$emit('Local/BackupDone');
|
||||
}
|
||||
if (fc.credentials && !fc.credentials.mnemonicEncrypted && !fc.credentials.mnemonic) {
|
||||
self.deleted = true;
|
||||
}
|
||||
|
||||
if (this.show)
|
||||
$rootScope.$emit('Local/BackupDone');
|
||||
self.toggle = function() {
|
||||
self.error = "";
|
||||
if (!self.credentialsEncrypted)
|
||||
self.show = !self.show;
|
||||
|
||||
$timeout(function(){
|
||||
if (self.credentialsEncrypted)
|
||||
self.passwordRequest();
|
||||
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
};
|
||||
|
||||
this.delete = function() {
|
||||
var fc = profileService.focusedClient;
|
||||
self.delete = function() {
|
||||
confirmDialog.show(msg, function(ok) {
|
||||
if (ok) {
|
||||
fc.clearMnemonic();
|
||||
profileService.updateCredentialsFC(function() {
|
||||
self.deleted = true;
|
||||
notification.success(successMsg);
|
||||
go.walletHome();
|
||||
});
|
||||
|
@ -33,12 +44,10 @@ angular.module('copayApp.controllers').controller('wordsController',
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
profileService.lockFC();
|
||||
});
|
||||
|
||||
|
||||
function setWords(words) {
|
||||
if (words) {
|
||||
self.mnemonicWords = words.split(/[\u3000\s]+/);
|
||||
|
@ -47,26 +56,30 @@ angular.module('copayApp.controllers').controller('wordsController',
|
|||
}
|
||||
};
|
||||
|
||||
var fc = profileService.focusedClient;
|
||||
try {
|
||||
setWords(fc.getMnemonic());
|
||||
} catch (e) {
|
||||
if (e.message && e.message.match(/encrypted/) && fc.isPrivKeyEncrypted()) {
|
||||
self.credentialsEncrypted = true;
|
||||
self.passwordRequest = function() {
|
||||
try {
|
||||
setWords(fc.getMnemonic());
|
||||
} catch (e) {
|
||||
if (e.message && e.message.match(/encrypted/) && fc.isPrivKeyEncrypted()) {
|
||||
self.credentialsEncrypted = true;
|
||||
|
||||
$timeout(function(){
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
|
||||
profileService.unlockFC(function(err) {
|
||||
if (err) {
|
||||
self.error = bwsError.msg(err, gettext('Could not decrypt'));
|
||||
$log.warn('Error decrypting credentials:',self.error); //TODO
|
||||
return;
|
||||
}
|
||||
self.credentialsEncrypted = false;
|
||||
setWords(fc.getMnemonic());
|
||||
});
|
||||
}
|
||||
profileService.unlockFC(function(err) {
|
||||
if (err) {
|
||||
self.error = bwsError.msg(err, gettext('Could not decrypt'));
|
||||
$log.warn('Error decrypting credentials:', self.error); //TODO
|
||||
return;
|
||||
}
|
||||
if (!self.show && self.credentialsEncrypted)
|
||||
self.show = !self.show;
|
||||
self.credentialsEncrypted = false;
|
||||
setWords(fc.getMnemonic());
|
||||
$rootScope.$emit('Local/BackupDone');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
|
@ -1116,13 +1116,16 @@ angular.module('copayApp.controllers').controller('indexController', function($r
|
|||
self.needsBackup = false;
|
||||
$log.debug('Backup done');
|
||||
storageService.setBackupFlag(self.walletId, function(err) {
|
||||
if (err) root.showErrorPopup(err);
|
||||
$log.debug('Backup done stored');
|
||||
});
|
||||
});
|
||||
|
||||
$rootScope.$on('Local/DeviceError', function(event, err) {
|
||||
root.showErrorPopup(err);
|
||||
self.showErrorPopup(err, function() {
|
||||
if (self.isCordova && navigator && navigator.app) {
|
||||
navigator.app.exitApp();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$rootScope.$on('Local/WalletImported', function(event, walletId) {
|
||||
|
|
|
@ -67,7 +67,11 @@ angular.module('copayApp.directives')
|
|||
localMediaStreamTrack[i].stop();
|
||||
}
|
||||
} else {
|
||||
localMediaStream.stop();
|
||||
try {
|
||||
localMediaStream.stop();
|
||||
} catch(e) {
|
||||
// Older Chromium not support the STOP function
|
||||
};
|
||||
}
|
||||
localMediaStream = null;
|
||||
video.src = '';
|
||||
|
|
|
@ -515,10 +515,10 @@ angular
|
|||
// Try to open local profile
|
||||
profileService.loadAndBindProfile(function(err) {
|
||||
if (err) {
|
||||
if (err.message.match('NOPROFILE')) {
|
||||
if (err.message && err.message.match('NOPROFILE')) {
|
||||
$log.debug('No profile... redirecting');
|
||||
$state.transitionTo('splash');
|
||||
} else if (err.message.match('NONAGREEDDISCLAIMER')) {
|
||||
} else if (err.message && err.message.match('NONAGREEDDISCLAIMER')) {
|
||||
$log.debug('Display disclaimer... redirecting');
|
||||
$state.transitionTo('disclaimer');
|
||||
} else {
|
||||
|
@ -545,4 +545,4 @@ angular
|
|||
}, 50);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -14,17 +14,15 @@ angular.module('copayApp.services')
|
|||
} else {
|
||||
// Go home reloading the application
|
||||
if (isChromeApp) {
|
||||
if (nodeWebkit.isDefined()) {
|
||||
go.walletHome();
|
||||
$timeout(function() {
|
||||
var win = require('nw.gui').Window.get();
|
||||
win.reload(3);
|
||||
//or
|
||||
win.reloadDev();
|
||||
}, 100);
|
||||
} else {
|
||||
chrome.runtime.reload();
|
||||
}
|
||||
chrome.runtime.reload();
|
||||
} else if (nodeWebkit.isDefined()) {
|
||||
go.walletHome();
|
||||
$timeout(function() {
|
||||
var win = require('nw.gui').Window.get();
|
||||
win.reload(3);
|
||||
//or
|
||||
win.reloadDev();
|
||||
}, 100);
|
||||
} else {
|
||||
window.location = window.location.href.substr(0, hashIndex);
|
||||
}
|
||||
|
|
|
@ -41,15 +41,23 @@ angular.module('copayApp.services')
|
|||
json = JSON.parse(text);
|
||||
} catch (e) {};
|
||||
|
||||
if (!json) return cb('Could not access storage')
|
||||
|
||||
if (!json.iter || !json.ct)
|
||||
return cb(null, text);
|
||||
|
||||
$log.debug('Profile is encrypted');
|
||||
getUUID(function(uuid) {
|
||||
$log.debug('Device UUID:' + uuid);
|
||||
if (!uuid)
|
||||
return cb(new Error('Could not decrypt localstorage profile'));
|
||||
return cb('Could not decrypt storage: could not get device ID');
|
||||
|
||||
text = sjcl.decrypt(uuid, text);
|
||||
try {
|
||||
text = sjcl.decrypt(uuid, text);
|
||||
} catch(e) {
|
||||
$log.warn('Decrypt error: ', e);
|
||||
return cb('Could not decrypt storage: device ID mismatch');
|
||||
};
|
||||
return cb(null, text);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.4.1
|
||||
Version=1.4.3
|
||||
Name=Copay
|
||||
Comment=A multisignature wallet
|
||||
Exec=copay
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
#define MyAppName "Copay"
|
||||
#define MyAppVersion "1.4.1"
|
||||
#define MyAppVersion "1.4.3"
|
||||
#define MyAppPublisher "BitPay"
|
||||
#define MyAppURL "https://copay.io"
|
||||
#define MyAppExeName "copay.exe"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
#define MyAppName "Copay"
|
||||
#define MyAppVersion "1.4.1"
|
||||
#define MyAppVersion "1.4.3"
|
||||
#define MyAppPublisher "BitPay"
|
||||
#define MyAppURL "https://copay.io"
|
||||
#define MyAppExeName "copay.exe"
|
||||
|
|
Loading…
Reference in New Issue