///////////////////////////////////////////////////////////////////////////////////////// // 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 / ///////////////////////////////////////////////////////////////////////////////////////// //import { Meteor } from 'meteor/meteor'; import * as R from 'ramda'; import { ValidatedMethod } from 'meteor/mdg:validated-method'; //import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { Environments } from './environments'; import { Inventory } from '/imports/api/inventories/inventories'; import { Links } from '/imports/api/links/links'; import { Cliques } from '/imports/api/cliques/cliques'; import { CliqueTypes } from '/imports/api/clique-types/clique-types'; import { Messages } from '/imports/api/messages/messages'; import { Scans } from '/imports/api/scans/scans'; import { Roles } from 'meteor/alanning:roles'; export const insert = new ValidatedMethod({ name: 'environments.insert', validate: Environments.simpleSchema() .pick([ 'configuration', 'configuration.$', 'distribution', 'distribution_version', 'name', 'type_drivers', 'mechanism_drivers', 'mechanism_drivers.$', 'listen', 'enable_monitoring', 'aci_enabled', ]).validator({ clean: true, filter: false }), //validate: null, run({ configuration, distribution, distribution_version, name, type_drivers, mechanism_drivers, listen, enable_monitoring, aci_enabled, }) { // todo: create clean object instance. let environment = Environments.schema.clean({ user: Meteor.userId() }); let auth = { 'view-env': [ Meteor.userId() ], 'edit-env': [ Meteor.userId() ] }; environment = R.merge(environment, { configuration, distribution, distribution_version, name, type_drivers, mechanism_drivers, listen, enable_monitoring, auth, aci_enabled, }); Environments.insert(environment); }, }); export const update = new ValidatedMethod({ name: 'environments.update', validate: Environments.simpleSchema().pick([ '_id', 'configuration', 'configuration.$', //'distribution', //'name', 'type_drivers', 'mechanism_drivers', 'mechanism_drivers.$', 'listen', 'enable_monitoring', 'aci_enabled', ]).validator({ clean: true, filter: false }), run({ _id, configuration, //distribution, //name, type_drivers, mechanism_drivers, listen, enable_monitoring, aci_enabled, }) { let env = Environments.findOne({ _id: _id }); if (! Roles.userIsInRole(Meteor.userId(), 'edit-env', 'default-group')) { if (! R.contains(Meteor.userId(), R.path(['auth', 'edit-env'], env) )) { throw new Meteor.Error('not-auth', 'unauthorized for updating env'); } } Environments.update(_id, { $set: { configuration: configuration, //distribution: distribution, //name: name, type_drivers, mechanism_drivers, listen, enable_monitoring, aci_enabled, }, }); } }); export const remove = new ValidatedMethod({ name: 'environments.remove', validate: Environments.simpleSchema().pick([ '_id', ]).validator({ clean: true, filter: false }), run({ _id, }) { const env = Environments.findOne({ _id: _id }); console.log('environment for remove: ', env); if (! Roles.userIsInRole(Meteor.userId(), 'edit-env', 'default-group')) { if (! R.contains(Meteor.userId(), R.path(['auth', 'edit-env'], env) )) { throw new Meteor.Error('not-auth', 'unauthorized for updating env'); } } Inventory.remove({ environment: env.name }); Links.remove({ environment: env.name }); Cliques.remove({ environment: env.name }); CliqueTypes.remove({ environment: env.name }); Messages.remove({ environment: env.name }); Scans.remove({ environment: env.name }); Environments.remove({ _id: _id }); } });