Skip to content

Commit

Permalink
Move blockstack to main repository (#489)
Browse files Browse the repository at this point in the history
* Move blockstack in main repository
  • Loading branch information
Pierre-Gilles committed May 19, 2019
1 parent d0ee7a4 commit f09b7fc
Show file tree
Hide file tree
Showing 17 changed files with 97,388 additions and 47 deletions.
7 changes: 7 additions & 0 deletions api/controllers/WelcomeController.js
Expand Up @@ -32,6 +32,13 @@ module.exports = {
});
},

loginBlockstack: function(req, res, next) {
res.view('welcome/login-blockstack', {
layout: null,
signupActive: sails.config.signup.active
});
},

forgotPassword: function(req, res, next) {
res.view('welcome/forgotpassword', {
layout: null,
Expand Down
5 changes: 3 additions & 2 deletions assets/js/app/app.run.js
Expand Up @@ -6,11 +6,12 @@
.module('gladys')
.run(runBlock);

runBlock.$inject = ['languageService', 'socketService', 'recognitionService'];
runBlock.$inject = ['languageService', 'socketService', 'recognitionService', 'blockstackService'];

function runBlock(languageService,socketService, recognitionService) {
function runBlock(languageService,socketService, recognitionService, blockstackService) {
languageService.initialize();
socketService.subscribe();
blockstackService.loadBlockstackIfNeeded();
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
Expand Down
95 changes: 95 additions & 0 deletions assets/js/app/blockstack/blockstack.service.js
@@ -0,0 +1,95 @@

(function () {
'use strict';

angular
.module('gladys')
.factory('blockstackService', blockstackService);

blockstackService.$inject = [];

function blockstackService() {

var service = {
loadBlockstackIfNeeded: loadBlockstackIfNeeded,
importData: importData,
isBlockstackUsed: isBlockstackUsed
};

return service;

function loadBlockstack (callback) {
var script = document.createElement('script');
script.src = '/js/dependencies/blockstack/blockstack-bundle.js';
document.body.appendChild(script);

script.onload = function () {
callback();
};
};

function loadBlockstackIfNeeded() {
if (window.localStorage.getItem('blockstack-session')) {
loadBlockstack(function() {
sync();
});
}
}

function isBlockstackUsed () {
if (window.localStorage.getItem('blockstack-session')) {
return true;
} else {
return false;
}
}

function sync () {
var savedParams;
var localParams;
fetch(window.location.origin + '/param')
.then(function (response) {
return response.json();
})
.then(function(params){
localParams = params;
return window.blockstack.getFile('params.json');
})
.then(function(data) {
savedParams = JSON.parse(data);
mergeArray(localParams, savedParams);
console.log(savedParams);
return window.blockstack.putFile('params.json', JSON.stringify(savedParams));
});
}

function importData () {
return window.blockstack.getFile('params.json')
.then((function(paramsJson) {
var blockStackParams = JSON.parse(paramsJson);
var promises = [];
blockStackParams.forEach(function (blockStackParam) {
promises.push(fetch(window.location.origin + '/param', {
method: 'post',
body: JSON.stringify({
name: blockStackParam.name,
value: blockStackParam.value
})
}));
});
return Promise.all(promises);
}));
}

function mergeArray (localParams, savedParams) {
localParams.forEach(function(itemIn1) {
var itemIn2 = savedParams.find(function(i){
return i.name === itemIn1.name;
});
if(!itemIn2) {
savedParams.push(itemIn1);
}
});
}
}
})();
80 changes: 76 additions & 4 deletions assets/js/app/installation/installation.controller.js
Expand Up @@ -6,9 +6,9 @@
.module('gladys')
.controller('installationCtrl', installationCtrl);

installationCtrl.$inject = ['installationService', 'userService','eventService', 'updateService', 'brainService'];
installationCtrl.$inject = ['installationService', 'userService','eventService', 'updateService', 'brainService', '$scope'];

function installationCtrl(installationService, userService, eventService, updateService, brainService) {
function installationCtrl(installationService, userService, eventService, updateService, brainService, $scope) {
/* jshint validthis: true */
var vm = this;
vm.step = 1;
Expand All @@ -21,6 +21,7 @@
language: 'en-US'
};
vm.changeStep = changeStep;
vm.loginWithBlockstack = loginWithBlockstack;
vm.downloadProgress = 0;
vm.downloadStep = 1;

Expand All @@ -29,7 +30,7 @@
function activate() {
activateDateTimePicker();
resetErrors();
updateAll();
verifyBlockstackLogin();
}

function installationFinished(){
Expand All @@ -47,6 +48,9 @@
function changeStep(step){
switch(step){
case 2:
vm.step = step;
break;
case 3:

// dirty way, I'm sorry
vm.newUser.birthdate = document.getElementById('birthdatepicker').value;
Expand All @@ -68,7 +72,7 @@
vm.createAccountError = err.data;
});
break;
case 3:
case 4:
installationFinished();
vm.step = step;
break;
Expand Down Expand Up @@ -205,6 +209,74 @@
return false; // Invalid date (or this could be epoch)
return d.toISOString().slice(0,10) == dateString;
}

function loginWithBlockstack () {
var AUTH_FILE = '/authentication.json';

var loadBlockstack = function (callback) {
var script = document.createElement('script');
script.src = '/js/dependencies/blockstack/blockstack-bundle.js';
document.body.appendChild(script);

script.onload = function() {
callback();
};
};

loadBlockstack(function() {

var generateToken = function () {
return Math.random().toString(36).slice(-8)
+ Math.random().toString(36).slice(-8)
+ Math.random().toString(36).slice(-8)
+ Math.random().toString(36).slice(-8)
};

var getAuthInfos = function (userSession) {
var userData = userSession.loadUserData();

var authInfos = {
email: userData.username + '@blockstack.org',
token: generateToken()
};
return userSession.putFile(AUTH_FILE, JSON.stringify(authInfos)).then((function() {
return authInfos;
}));
};

var userSession = new window.blockstack.UserSession();
var promise = Promise.resolve();
if (userSession.isUserSignedIn()) {
userSession.loadUserData();
} else if (userSession.isSignInPending()) {
promise = userSession.handlePendingSignIn();
} else {
var redirectURI = window.location.href;
var manifestURI = window.location.origin + '/js/dependencies/blockstack/manifest.json';
return userSession.redirectToSignIn(redirectURI, manifestURI);
}

promise
.then(function() {
// get gladys auth informations
return getAuthInfos(userSession);
})
.then(function(blockstackAuthInfos) {
vm.isBlockstackLogin = true;
vm.newUser.email = blockstackAuthInfos.email;
vm.newUser.password = blockstackAuthInfos.token;
changeStep(2);
$scope.$apply();
});

});
}

function verifyBlockstackLogin() {
if(window.location.search.indexOf('authResponse') !== -1) {
loginWithBlockstack();
}
}

}
})();
15 changes: 13 additions & 2 deletions assets/js/app/param/param.controller.js
Expand Up @@ -6,9 +6,9 @@
.module('gladys')
.controller('ParamCtrl', ParamCtrl);

ParamCtrl.$inject = ['paramService', 'notificationService'];
ParamCtrl.$inject = ['paramService', 'notificationService', 'blockstackService'];

function ParamCtrl(paramService, notificationService) {
function ParamCtrl(paramService, notificationService, blockstackService) {
/* jshint validthis: true */
var vm = this;
vm.params = [];
Expand All @@ -17,6 +17,10 @@
vm.updateParam = updateParam;
vm.deleteParam = deleteParam;
vm.createParam = createParam;

vm.isBlockstackUsed = blockstackService.isBlockstackUsed();
vm.syncBlockstack = syncBlockstack;

activate();

function activate() {
Expand Down Expand Up @@ -63,5 +67,12 @@
}
});
}

function syncBlockstack() {
blockstackService.importData()
.then(function() {
get();
});
}
}
})();

0 comments on commit f09b7fc

Please sign in to comment.