diff options
Diffstat (limited to 'ui/lib')
-rw-r--r-- | ui/lib/router.js | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/ui/lib/router.js b/ui/lib/router.js new file mode 100644 index 0000000..37e8195 --- /dev/null +++ b/ui/lib/router.js @@ -0,0 +1,363 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / +// / +// All rights reserved. This program and the accompanying materials / +// are made available under the terms of the Apache License, Version 2.0 / +// which accompanies this distribution, and is available at / +// http://www.apache.org/licenses/LICENSE-2.0 / +///////////////////////////////////////////////////////////////////////////////////////// +/* Created by oashery on 3/2/2016. Modified by sisakov on 9/7/2016*/ +import * as R from 'ramda'; +import { Environments } from '/imports/api/environments/environments'; +import { parseReqId } from '/imports/lib/utilities'; + +/* + * + */ + +if (Meteor.isClient){ + Accounts.onLogin(function () { + Router.go('/Dashboard'); + }); + + Accounts.onLogout(function () { + Router.go('/'); + }); +} + +Router.configure({ + layoutTemplate: 'main', + loadingTemplate: 'loading' +}); + +if (Meteor.isClient) { + let originalDispatch = Router.dispatch; + + Router.dispatch = function (_href, _a, _onDispatchComplete) { + let that = this; + let args = arguments; + let controller = that.current(); + if (controller) { + let isDirty = Session.get('isDirty'); + let needsConfirmation = controller.state.get('needsConfirmation'); + + if (needsConfirmation && isDirty) { + let confirmResult = confirm('Changes are not saved. Are you sure you want to leave?'); + if (confirmResult) { + Session.set('isDirty', false); + } else { + let loc = Iron.Location.get(); + loc.cancelUrlChange(); + return; + } + } + } + + originalDispatch.apply(that, args); + }; +} + +function confirm(msg) { + return window.confirm(msg); +} +/* + * Hooks + */ + +Router.onBeforeAction(function () { + if (Meteor.userId()) { + this.next(); + } else { + this.layout('landing'); + this.render('landing'); + } +}); + +/* + * Routes + */ + +Router.route('/', { + name: 'landing', + path: '/', + action: function () { + if (Meteor.userId()) { + Router.go('/Dashboard'); + } + if (this.ready()) + this.layout('landing'); + else + this.render('loading'); + } +}); + +Router.route('home', { + path: '/home', + /* refactor to component. home not in use ? + waitOn: function () { + return Meteor.subscribe('inventory'); + }, + */ + action: function () { + if (this.ready()){ + + this.state.set('envName', this.params.query.env); + /* + if(query){ + //return Inventory.find({$where: "this.id_path.match('^/WebEX-Mirantis@Cisco/')"}); + console.log(query); + this.render('home', { + data: function () { + return Inventory.find({environment: query, parent_id: query}); + } + }); + // + } + */ + + // if the sub handle returned from waitOn ready() method returns + // true then we're ready to go ahead and render the page. + this.render('home'); + + } + else{ + this.render('loading'); + } + } +}); + +Router.route('getstarted', { + name: 'getstarted', + path: '/getstarted' +}); + +Router.route('/wizard', function () { + this.state.set('env', null); + Session.set('wizardEnv', null); + this.render('EnvironmentWizard'); +}); + +Router.route('/wizard/:env', function () { + this.state.set('env', this.params.env); + Session.set('wizardEnv', this.params.env); + this.render('EnvironmentWizard'); +}); + +Router.route('/scans-list', function () { + this.render('ScansList'); +}, { }); + +Router.route('/scheduled-scans-list', function () { + this.render('ScheduledScansList'); +}, { + name: 'scheduled-scans-list', + data: function () { + //let that = this; + let data = {}; + return data; + } +}); + +Router.route('/link-types-list', function () { + this.render('LinkTypesList'); +}, { }); + +Router.route('/link-type', function () { + this.render('LinkType'); +}, { }); + +Router.route('/clique-types-list', function () { + this.render('CliqueTypesList'); +}, { }); + +Router.route('/clique-type', function () { + this.render('CliqueType'); +}, { }); + +Router.route('/clique-constraints-list', function () { + this.render('CliqueConstraintsList'); +}, { }); + +Router.route('/clique-constraint', function () { + this.render('CliqueConstraint'); +}, { }); + +Router.route('/messages-list', function () { + this.render('MessagesList'); +}, { }); + +Router.route('/message', function () { + let that = this; + let params = that.params; + let query = params.query; + + this.render('Message', { + data: function () { + return { + id: query.id, + action: query.action + }; + } + }); +}, { }); + +Router.route('/user-list', function () { + this.render('UserList'); +}, { }); + +Router.route('/user', function () { + this.render('User'); +}, { }); + +Router.route('/scanning-request', function () { + this.render('ScanningRequest'); +}, { + name: 'scanning-request', + data: function () { + let that = this; + + let _id = + R.when(R.pipe(R.isNil, R.not), + (idObj) => R.prop('id', parseReqId(idObj)) + )(R.path(['params', 'query', '_id'], that)); + + let data = { + _id: _id, + env: that.params.query.env, + action: that.params.query.action, + }; + + return data; + } +}); + + +Router.route('/scheduled-scan', function () { + this.render('ScheduledScan'); +}, { + name: 'scheduled-scan', + data: function () { + let that = this; + + let _id = + R.when(R.pipe(R.isNil, R.not), + (idObj) => R.prop('id', parseReqId(idObj)) + )(R.path(['params', 'query', '_id'], that)); + + let data = { + _id: _id, + env: that.params.query.env, + action: that.params.query.action, + }; + + return data; + } +}); + +Router.route('/new-scanning', function () { + this.render('NewScanning'); +}, { + name: 'new-scanning', + data: function () { + let that = this; + + let data = { + env: that.params.query.env, + }; + + return data; + } +}); + +Router.route('Dashboard', { + name: 'Dashboard', + path: '/Dashboard', + /* eyaltask + waitOn: function () { + return Meteor.subscribe('inventory'); + }, + */ + action: function () { + if (this.ready()){ + this.render('Dashboard'); + + } + else{ + this.render('loading'); + } + } +}); + +Router.route('environment', { + name: 'environment', + path: '/environment/:_id', + action: function () { + if (this.ready()){ + this.render('Environment'); + } + else{ + this.render('loading'); + } + }, + data: function () { + let that = this; + + let _id = parseReqId(that.params._id).id; + let selectedNodeId = R.ifElse(R.isNil, + R.always(null), + R.pipe( + R.curry(parseReqId), + R.prop('id') + ) + )(that.params.query.selectedNodeId); + + let data = { _id: _id }; + + if (! R.isNil(selectedNodeId)) { + data = R.assoc('selectedNodeId', selectedNodeId, data); + } + + return data; + } +}); + + +Router.route('migrateEnvToUserId', { + name: 'migrateEnvToUserId', + where: 'server', + action: function () { + console.log('migrate env to user id'); + + //let request = this.request; + let response = this.response; + + let envs = Environments.find({}).fetch(); + R.forEach((env) => { + console.log('found env: ' + env.name + ' ' + R.toString(env._id)); + + let user = Meteor.users.findOne({ username: env.user }); + if (R.isNil(user)) { + console.log('not migrated: ' + env.name); + return; + } + console.log('found user: ' + user._id + ' ' + user.username); + + try { + let result = Environments.update( + { _id : env._id }, + { + $set: { + user: user._id + } + }); + console.log('result', R.toString(result)); + console.log('migrated: ' + env.name); + } catch(e) { + console.log('exception', R.toString(e)); + } + + }, envs); + + response.end('migration end'); + } +}); |