Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] JBDS-4470 Load configuration from remote repository #811

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 2 additions & 13 deletions browser/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -440,19 +440,8 @@ footer {

.centered {
position: fixed;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -50px;
}

.detection-msg {
position: fixed;
top: 50%;
left: 50%;
margin-top: 70px;
margin-left: -269px;
color: #000000;
width: 92%;
top: 40%;
}

.installation-note .med-spinner {
Expand Down
4 changes: 1 addition & 3 deletions browser/pages/confirm/confirm.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@

<div id="detection-info" class="centered has-spinner" ng-show="confCtrl.isDisabled" ng-class="{'active':confCtrl.isDisabled}">
<span class="spinner spinner-lg spinner-bgcolour spinner-inline"><i class="icon-spin icon-refresh"></i></span>
<p class="installation-note">
<div class="detection-msg">
<div>
<h2>{{confCtrl.installedSearchNote}}</h2>
</div>
</p>
</div>
</main>

Expand Down
117 changes: 103 additions & 14 deletions browser/pages/confirm/controller.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
'use strict';

import Logger from '../../services/logger';
import pgp from '../../services/openpgp';
import Platform from '../../services/platform';
import ComponentLoader from '../../services/componentLoader';
import meta from '../../services/metadata';
import request from 'request';
import pify from 'pify';
import electron from 'electron';

class ConfirmController {

Expand All @@ -12,8 +17,6 @@ class ConfirmController {
this.timeout = $timeout;
this.installerDataSvc = installerDataSvc;
this.electron = electron;
this.loader = new ComponentLoader(installerDataSvc);
this.loader.loadComponents();
this.installedSearchNote = '';
this.isDisabled = false;
this.numberOfExistingInstallations = 0;
Expand All @@ -24,35 +27,84 @@ class ConfirmController {
$scope.detectionStyle = false;
$scope.virtualization = true;

this.sc.$watch('$viewContentLoaded', ()=>{
this.initPage();
});

this.loader = new ComponentLoader(installerDataSvc);
}

loadModel() {
this.loader.loadComponents();
for (let [key, value] of this.installerDataSvc.allInstallables().entries()) {
$scope.checkboxModel[key] = value;
$scope.$watch(`checkboxModel.${key}.selectedOption`, function watchInstallSelectionChange() {
$scope.checkboxModel[key].validateVersion();
this.sc.checkboxModel[key] = value;
let that = this;
this.sc.$watch(`checkboxModel.${key}.selectedOption`, function watchInstallSelectionChange() {
that.sc.checkboxModel[key].validateVersion();
});
}

$scope.isConfigurationValid = this.isConfigurationValid;

$scope.$watch('$viewContentLoaded', ()=>{
this.initPage();
});
this.sc.isConfigurationValid = this.isConfigurationValid;

this.electron.remote.getCurrentWindow().addListener('focus', ()=> {
this.timeout( () => {
this.timeout(() => {
this.activatePage();
this.sc.$apply();
});
});
}

checkForUpdates() {
this.isDisabled = true;
this.installedSearchNote = 'The system is checking for updates';
return this.timeout(true).then(()=> {
return pify(request)('https://raw.githubusercontent.com/dgolovin/developer-platform-install-repo/master/requirements.json').then((value)=>{
pgp(this.pgpPublicKey, value.body).then(({text, valid, error})=>{
if(!error && valid) {
let remoteReqs = meta(JSON.parse(text), Platform.OS);
let opt = {
type: 'none',
buttons: ['Yes', 'No'],
defaultId: 0,
cancelId: 1,
message: 'There is new set of components available for installation.\nWould you like to use it?'
};
if(this.isUpdateRequired(this.installerDataSvc.requirements, remoteReqs) && 0 === electron.remote.dialog.showMessageBox(electron.remote.getCurrentWindow(), opt)) {
this.installerDataSvc.clearItemsToInstall();
this.installerDataSvc.loadRequirements(remoteReqs);
}
}
this.loadModel();
});
});
});
}

isUpdateRequired(oldr, newr) {
let res = false;
for(let object in newr) {
if(oldr[object] === undefined || (oldr[object] && oldr[object].version !== newr[object].version)) {
res = true;
break;
}
}
return res;
}

initPage() {
return this.detectInstalledComponents().then(()=> {
return Promise.resolve().then(()=> {
return this.checkForUpdates();
}).then(()=> {
this.isDisabled = false;
return this.detectInstalledComponents();
}).then(()=> {
this.graph = ComponentLoader.loadGraph(this.installerDataSvc);
this.installWatchers();
return Promise.resolve();
}).then(
()=> this.setIsDisabled()
).catch((error)=> {
console.error(error);
this.setIsDisabled();
});
}
Expand Down Expand Up @@ -105,12 +157,14 @@ class ConfirmController {
detectInstalledComponents() {
if(!this.isDisabled) {
this.isDisabled = true;
this.installedSearchNote = ' The system is checking if you have any installed components.';
this.installedSearchNote = 'The system is checking if you have any installed components.';
let detectors = [];
for (var installer of this.installerDataSvc.allInstallables().values()) {
detectors.push(installer.detectExistingInstall());
}
this.detection = Promise.all(detectors);
this.detection = this.timeout(true).then(()=>{
return Promise.all(detectors);
});
}
return this.detection;
}
Expand Down Expand Up @@ -197,6 +251,41 @@ class ConfirmController {
this.electron.remote.getCurrentWindow().removeAllListeners('focus');
this.router.go('location');
}

get pgpPublicKey() {
return `-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFl45PABCADa3JMtyxLpEvxiqFsqM0D7p+R5bG4WDUW2Gf3A4olL3Ba1dMbY
XuVKN2VVWF0eaX/kkPFWFQQ/zUbBR5A8BcCzWrVNm7NvbSxkwqS8U8imc+0QYz6f
RQfYvzGaN3rg2EJ4XiGy5M7nVoPmwk9xqbhJxxv3d507oPDN1FOnoTY68Y+GbiUM
HF3mFlBtQwxhGxlFhwPABmHypfeBCk36s0TzzvAekNcT8ROuWM+68KjtZEbizQ4J
0ZYeLixdTyN3em4ve+hFFjiQOZbh5PKzrSP8nw1EFoAdHnefO/2vUe6pp3G8y8CB
zlT2ZU2kuFsP7I5HeZoGi4DbbXgJyqhp4jGrABEBAAG0S0RlbmlzIEdvbG92aW4g
KFRlc3Qgc2lnbmluZyBhbmQgdmVyaWZ5aW5nIHRleHQgZmlsZXMpIDxkZ29sb3Zp
bkByZWRoYXQuY29tPokBOAQTAQIAIgUCWXjk8AIbAwYLCQgHAwIGFQgCCQoLBBYC
AwECHgECF4AACgkQHrpirkCkMkpT6gf+LwCUJRHpL/V2z8A2ZDbf8nT/9AIOmpdq
z/mUj3kJUbrPTel7jel2qAqCDC7/BySPVjToqfX/Ww8yiq48j9xtWOenPb52QO0S
zBdxnFUK/zS4Iij60aBamWOSkCw/cYmze93bttvaAiqgArnPD32rWTHDF9ruosAm
N7/ymBYbyoBwcGklnShl4lahW7OBuDCFejn+8Wz5NZAzG05OXdwjMGnslCsjyRLb
i7VfgRBgHbGCMIcrwn7VrMbYgIx/yEoyr8jwGLiK0ucdEqAH8GdBQJStEL58TReE
/StWaVC81U5dgZaedSdGlNLQacXltmuJpg2Lcpj8v22aneLFBkThYLkBDQRZeOTw
AQgA7DuKmKOOJ8iSAl+cI4OcS6kwowxMZKnR4eS/QVJYUMCw+WxdQprhakGUcoo2
9EiyxwvXrp/RNFIzPYJ8frRYKrfPMY0ginpvKKNFnU7/INjHn7EnQkpJjAK15A+f
QdKhvetBvU1I3CB4xHGjmYdMOySGnaNHZQu1dmkdBiDT4o66H4bu0H3J956QhQr8
7r9fYf2Qd9Lfw+a3or5O0Dcag1bHtUOx8B/cw3dXK/TFa+/ECQbeqA3pn4WQfsoH
ZvBUAvE+nCABJg9lXDrtyhzIlha9fvk/vUguo0tZ1XW5YCkeNVWqig/Ju8eydUHc
7FClF1rJ9TTZBoZoNO9O51FtxwARAQABiQEfBBgBAgAJBQJZeOTwAhsMAAoJEB66
Yq5ApDJKnJIH/3ldHeikhjDIJOno+DMKBs9iGpSl3PZI9qXBXxb13KTGAwCkcIja
fc4Bn6w/dKoa5CumYHr4Uf5VrGxvRFyCkiA3YZ6/EarYpWaEAO179qYeGuwiCMuV
ihUuCGhXKsl8sig4j1YMyGg058HgZov81yLnPHBeLpTsFRj/7SPT0eJjWyZmK3dS
zMlxS8jFPEeBPA7EI4bDQCdg/kBK9C89s2xmZOxz3PtCzoMtj9KICvLzCf0OX1hR
Y8WRZUzrkAkouuli0sfWGIsHSEPFCrNdKdoIud0Klrc/ATMD0tDjz7MEl7brEC08
vRYoPDOBq3YXZ0LdaZwVObM7KV0Ncw2YWg4=
=uZLc
-----END PGP PUBLIC KEY BLOCK-----
`;

}
}

ConfirmController.$inject = ['$scope', '$state', '$timeout', 'installerDataSvc', 'electron'];
Expand Down
22 changes: 16 additions & 6 deletions browser/services/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,23 @@ class InstallerDataService {
this.toSetup = new Set();
this.downloading = false;
this.installing = false;
this.requirements = loadMetadata(requirements, Platform.getOS());
// filter download-manager urls and replace host name with stage
// host name provided in environment variable
this.loadRequirements(requirements);
}

loadRequirements(requirements) {
let reqs = loadMetadata(requirements, Platform.getOS());
let stageHost = Platform.ENV['DM_STAGE_HOST'];
if(stageHost) {
for (let variable in this.requirements) {
let dmUrl = this.requirements[variable].dmUrl;
// filter download-manager urls and replace host name with stage
// host name provided in environment variable
for (let variable in reqs) {
let dmUrl = reqs[variable].dmUrl;
if (dmUrl && dmUrl.includes('download-manager/jdf/file')) {
this.requirements[variable].dmUrl = dmUrl.replace('developers.redhat.com', stageHost);
reqs[variable].dmUrl = dmUrl.replace('developers.redhat.com', stageHost);
}
}
}
this.requirements = reqs;
}

setup(vboxRoot, jdkRoot, devstudioRoot, jbosseapRoot, cygwinRoot, cdkRoot, komposeRoot, fuseplatformRoot, fuseplatformkarafRoot) {
Expand Down Expand Up @@ -104,6 +109,11 @@ class InstallerDataService {
}
}

clearItemsToInstall() {
this.installableItems.clear();
this.toInstall.clear();
}

getInstallable(key) {
return this.installableItems.get(key);
}
Expand Down