aboutsummaryrefslogtreecommitdiffstats
path: root/ui/lib/router.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/lib/router.js')
-rw-r--r--ui/lib/router.js363
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');
+ }
+});