Ref bootstrapping (disclaimer)

This commit is contained in:
Gustavo Maximiliano Cortez 2015-12-04 18:45:35 -03:00
commit a28f9c0e7f
No known key found for this signature in database
GPG key ID: 15EDAD8D9F2EB1AF
5 changed files with 108 additions and 96 deletions

View file

@ -18,7 +18,7 @@
ng-controller="indexController as index" ng-controller="indexController as index"
ng-swipe-disable-mouse ng-swipe-disable-mouse
ng-swipe-left="index.closeMenu()" ng-swipe-left="index.closeMenu()"
ng-swipe-right="index.agreeDisclaimer() ? index.openMenu() : null"> ng-swipe-right="index.disclaimerAccepted ? index.openMenu() : null">
<div class="off-canvas-wrap" id="off-canvas-wrap"> <div class="off-canvas-wrap" id="off-canvas-wrap">
<div class="inner-wrap"> <div class="inner-wrap">

View file

@ -1,56 +1,54 @@
<div class="splash content text-center" <div class="splash content text-center"
ng-controller="disclaimerController"> ng-controller="disclaimerController as disclaimer" ng-init="disclaimer.init()">
<div> <div class="row">
<div class="row"> <div class="container-image large-2 medium-2 small-2 medium-centered small-centered large-centered columns">
<div class="container-image large-2 medium-2 small-2 medium-centered small-centered large-centered columns"> <img src="img/icon-splash.png" alt="icon" width="100%">
<img src="img/icon-splash.png" alt="icon" width="100%"> </div>
<div class="row">
<div class="medium-centered small-centered large-centered columns">
<span class="text-bold size-16 text-white" translate>WELCOME TO COPAY</span>
<p class="text-gray size-14 m0 text-light" translate>A multisignature bitcoin wallet</p>
</div> </div>
<div class="row"> </div>
<div class="medium-centered small-centered large-centered columns"> <div class="row">
<span class="text-bold size-16 text-white" translate>WELCOME TO COPAY</span> <div class="scrollArea">
<p class="text-gray size-14 m0 text-light" translate>A multisignature bitcoin wallet</p> <p class="enable_text_select m0">
</div> <div class="size-16 text-gray" translate>Terms of Use</div>
</div> <div ng-include="'views/includes/terms.html'"></div>
<div class="row">
<div class="scrollArea">
<p class="enable_text_select m0">
<div class="size-16 text-gray" translate>Terms of Use</div>
<div ng-include="'views/includes/terms.html'"></div>
</p>
</div>
</div>
</div>
<div class="row">
<p ng-show="lang != 'en'">
<a class="center" ng-click="$root.openExternalLink('https://copay.io/disclaimer')" translate>Official English Disclaimer</a>
</p> </p>
</div> </div>
<div> </div>
<p class="text-gray columns" translate>I affirm that I have read, understood, and agree with these terms.</p> </div>
</div>
<div class="row">
<div class="text-center size-12 text-warning" ng-show="error"> <div class="row">
{{(error)|translate}}. <span translate>Retrying...</span> <p ng-show="disclaimer.lang != 'en'">
</div> <a class="center" ng-click="$root.openExternalLink('https://copay.io/disclaimer')" translate>Official English Disclaimer</a>
<div class="onGoingProcess" ng-show="creatingProfile"> </p>
<div class="onGoingProcess-content" ng-style="{'background-color':'#222'}"> </div>
<div class="spinner"> <div>
<div class="rect1"></div> <p class="text-gray columns" translate>I affirm that I have read, understood, and agree with these terms.</p>
<div class="rect2"></div> </div>
<div class="rect3"></div> <div class="row">
<div class="rect4"></div>
<div class="rect5"></div> <div class="text-center size-12 text-warning" ng-show="error">
</div> {{(error)|translate}}. <span translate>Retrying...</span>
<span translate>Creating Profile...</span>
</div>
</div> </div>
<div class="start-button columns"> <div class="onGoingProcess" ng-show="creatingProfile">
<button ng-disabled="creatingProfile" ng-click="goHome()" class="button black expand round size-12 text-spacing" translate> <div class="onGoingProcess-content" ng-style="{'background-color':'#222'}">
I AGREE. GET STARTED <div class="spinner">
</button> <div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div> </div>
<span translate>Creating Profile...</span>
</div>
</div>
<div class="start-button columns">
<button ng-disabled="creatingProfile" ng-click="goHome()" class="button black expand round size-12 text-spacing" translate>
I AGREE. GET STARTED
</button>
</div> </div>
</div> </div>
</div> </div>

View file

@ -3,14 +3,12 @@
angular.module('copayApp.controllers').controller('disclaimerController', angular.module('copayApp.controllers').controller('disclaimerController',
function($scope, $timeout, $log, profileService, isCordova, storageService, applicationService, gettextCatalog, uxLanguage, go) { function($scope, $timeout, $log, profileService, isCordova, storageService, applicationService, gettextCatalog, uxLanguage, go) {
self = this; self = this;
$scope.lang = uxLanguage.currentLanguage;
$scope.goHome = function() { $scope.goHome = function() {
$scope.error = ""; $scope.error = "";
profileService.storeDisclaimer(function(err) { profileService.storeDisclaimer(function(err) {
if (err) { if (err) {
$scope.error = err; $scope.error = err;
$log.warn(err);
$scope.$apply(); $scope.$apply();
} else go.walletHome(); } else go.walletHome();
}); });
@ -35,13 +33,16 @@ angular.module('copayApp.controllers').controller('disclaimerController',
}); });
}; };
storageService.getProfile(function(err, profile) { this.init = function() {
if (!profile) create(); self.lang = uxLanguage.currentLanguage;
else $scope.creatingProfile = false; storageService.getProfile(function(err, profile) {
if (!profile) create();
else $scope.creatingProfile = false;
//compatible //compatible
storageService.getCopayDisclaimerFlag(function(err, val) { profileService.checkDisclaimer(function(val) {
if (val) go.walletHome(); if (val) go.walletHome();
});
}); });
}); };
}); });

View file

@ -126,26 +126,21 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self.initGlidera(); self.initGlidera();
self.setCustomBWSFlag(); self.setCustomBWSFlag();
if (fc.isPrivKeyExternal()) { profileService.checkDisclaimer(function(v) {
self.needsBackup = false; if (v) self.disclaimerAccepted = true;
self.openWallet(); if (fc.isPrivKeyExternal()) {
} else { self.needsBackup = false;
storageService.getBackupFlag(self.walletId, function(err, val) {
if (!fc.credentials.mnemonic)
self.needsBackup = false;
else
self.needsBackup = self.network == 'testnet' ? false : !val;
self.openWallet(); self.openWallet();
}); } else {
} storageService.getBackupFlag(self.walletId, function(err, val) {
}); if (!fc.credentials.mnemonic)
}; self.needsBackup = false;
else
self.agreeDisclaimer = function() { self.needsBackup = self.network == 'testnet' ? false : !val;
storageService.getProfile(function(err, profile) { self.openWallet();
if (profile && profile.agreeDisclaimer) });
return profile.agreeDisclaimer; }
return null; });
}); });
}; };
@ -1168,10 +1163,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r
}); });
}); });
$rootScope.$on('Local/NewFocusedWallet', function() {
self.setUxLanguage();
});
$rootScope.$on('Local/LanguageSettingUpdated', function() { $rootScope.$on('Local/LanguageSettingUpdated', function() {
self.setUxLanguage(); self.setUxLanguage();
self.updateRemotePreferences({ self.updateRemotePreferences({
@ -1229,6 +1220,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r
$rootScope.$on('Local/Resume', function(event) { $rootScope.$on('Local/Resume', function(event) {
$log.debug('### Resume event'); $log.debug('### Resume event');
if (!self.disclaimerAccepted) go.path('disclaimer');
self.debouncedUpdate(); self.debouncedUpdate();
}); });
@ -1348,14 +1340,11 @@ angular.module('copayApp.controllers').controller('indexController', function($r
}); });
$rootScope.$on('Local/NewFocusedWallet', function() { $rootScope.$on('Local/NewFocusedWallet', function() {
self.setUxLanguage();
self.setFocusedWallet(); self.setFocusedWallet();
self.updateTxHistory(); self.updateTxHistory();
storageService.getProfile(function(err, profile) { if (self.disclaimerAccepted) go.walletHome();
if (profile && profile.agreeDisclaimer) go.walletHome();
//compatible
storageService.getCopayDisclaimerFlag(function(err, val) {
if (val) go.walletHome();
storageService.getCleanAndScanAddresses(function(err, walletId) { storageService.getCleanAndScanAddresses(function(err, walletId) {
if (walletId && profileService.walletClients[walletId]) { if (walletId && profileService.walletClients[walletId]) {
$log.debug('Clear last address cache and Scan ', walletId); $log.debug('Clear last address cache and Scan ', walletId);
@ -1365,8 +1354,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r
storageService.removeCleanAndScanAddresses(function() {}); storageService.removeCleanAndScanAddresses(function() {});
} }
}); });
});
});
}); });
$rootScope.$on('Local/SetTab', function(event, tab, reset) { $rootScope.$on('Local/SetTab', function(event, tab, reset) {

View file

@ -134,6 +134,11 @@ angular.module('copayApp.services')
}; };
root.loadAndBindProfile = function(cb) { root.loadAndBindProfile = function(cb) {
root.checkDisclaimer(function(val) {
if (!val) {
return cb(new Error('NONAGREEDDISCLAIMER: Non agreed disclaimer'));
}
else {
storageService.getProfile(function(err, profile) { storageService.getProfile(function(err, profile) {
if (err) { if (err) {
$rootScope.$emit('Local/DeviceError', err); $rootScope.$emit('Local/DeviceError', err);
@ -150,13 +155,10 @@ angular.module('copayApp.services')
return root.bindProfile(profile, cb); return root.bindProfile(profile, cb);
}) })
} else { } else {
storageService.getCopayDisclaimerFlag(function(err, val) { $log.debug('Profile read');
if (!profile.agreeDisclaimer) { return root.bindProfile(profile, cb);
if (!val) return cb(new Error('NONAGREEDDISCLAIMER: Non agreed disclaimer')); }
} });
$log.debug('Profile read');
return root.bindProfile(profile, cb);
});
} }
}); });
}; };
@ -521,11 +523,35 @@ angular.module('copayApp.services')
root.storeDisclaimer = function(cb) { root.storeDisclaimer = function(cb) {
storageService.getProfile(function(err, profile) { storageService.getProfile(function(err, profile) {
profile.agreeDisclaimer = true; profile.agreeDisclaimer = true;
storageService.storeProfile(profile, function() { storageService.storeProfile(profile, function(err) {
return cb(err); return cb(err);
}); });
}); });
} };
root.checkDisclaimer = function(cb) {
if (root.profile && root.profile.agreeDisclaimer) return cb(true);
storageService.getProfile(function(err, profile) {
if (profile && profile.agreeDisclaimer)
return cb(true);
else if (profile && !profile.agreeDisclaimer) {
storageService.getCopayDisclaimerFlag(function(err, val) {
if (val) {
root.storeDisclaimer(function(err) {
if (err) $log.error(err);
return cb(true);
});
}
else {
return cb();
}
});
}
else {
return cb();
}
});
};
root.importLegacyWallet = function(username, password, blob, cb) { root.importLegacyWallet = function(username, password, blob, cb) {
var walletClient = bwcService.getClient(); var walletClient = bwcService.getClient();