From b88c78e3cf2bef22aa2f1c4d0bf305e303bc15f0 Mon Sep 17 00:00:00 2001 From: Koren Lev Date: Thu, 27 Jul 2017 16:42:15 +0300 Subject: adding calipso ui Change-Id: Ifa6f63daebb07f45580f747341960e898fdb00c4 Signed-off-by: Koren Lev --- ui/imports/api/link-types/link-types.js | 86 +++++++++++++++++ ui/imports/api/link-types/methods.js | 114 +++++++++++++++++++++++ ui/imports/api/link-types/server/publications.js | 46 +++++++++ 3 files changed, 246 insertions(+) create mode 100644 ui/imports/api/link-types/link-types.js create mode 100644 ui/imports/api/link-types/methods.js create mode 100644 ui/imports/api/link-types/server/publications.js (limited to 'ui/imports/api/link-types') diff --git a/ui/imports/api/link-types/link-types.js b/ui/imports/api/link-types/link-types.js new file mode 100644 index 0000000..94d6ddd --- /dev/null +++ b/ui/imports/api/link-types/link-types.js @@ -0,0 +1,86 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// 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 { Mongo } from 'meteor/mongo'; +import { SimpleSchema } from 'meteor/aldeed:simple-schema'; +import * as R from 'ramda'; +import { Constants } from '/imports/api/constants/constants'; +//import { Environments } from '/imports/api/environments/environments'; + +export const LinkTypes = new Mongo.Collection( + 'link_types', { idGeneration: 'MONGO' }); + +let schema = { + _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, + description: { + type: String + }, + type: { + type: String + }, + endPointA: { + type: String, + custom: function () { + let that = this; + let values = Constants.findOne({ name: 'object_types_for_links' }).data; + + if (R.isNil(R.find(R.propEq('value', that.value), values))) { + return 'notAllowed'; + } + } + }, + endPointB: { + type: String, + custom: function () { + let that = this; + let values = Constants.findOne({ name: 'object_types_for_links' }).data; + + if (R.isNil(R.find(R.propEq('value', that.value), values))) { + return 'notAllowed'; + } + } + } +}; + +let simpleSchema = new SimpleSchema(schema); + +simpleSchema.addValidator(function () { + let that = this; + + let existing = LinkTypes.findOne({ + _id: { $ne: that.docId }, + endPointA: that.field('endPointA').value, + endPointB: that.field('endPointB').value + }); + + if (R.allPass([ + R.pipe(R.isNil, R.not), + R.pipe(R.propEq('_id', that.docId), R.not) + ])(existing)) { + + return 'alreadyExists'; + } + + existing = LinkTypes.findOne({ + _id: { $ne: that.docId }, + endPointA: that.field('endPointB').value, + endPointB: that.field('endPointA').value + }); + + if (R.allPass([ + R.pipe(R.isNil, R.not), + R.pipe(R.propEq('_id', that.docId), R.not) + ])(existing)) { + + return 'alreadyExists'; + } +}); + +LinkTypes.schema = simpleSchema; + +LinkTypes.attachSchema(LinkTypes.schema); diff --git a/ui/imports/api/link-types/methods.js b/ui/imports/api/link-types/methods.js new file mode 100644 index 0000000..846c28b --- /dev/null +++ b/ui/imports/api/link-types/methods.js @@ -0,0 +1,114 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// 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 { ValidatedMethod } from 'meteor/mdg:validated-method'; +import * as R from 'ramda'; +import { Roles } from 'meteor/alanning:roles'; + +import { LinkTypes } from './link-types'; + +export const insert = new ValidatedMethod({ + name: 'links_types.insert', + validate: LinkTypes.simpleSchema() + .pick([ + //'environment', + 'description', + 'endPointA', + 'endPointB', + ]).validator({ clean: true, filter: false }), + run({ + //environment, + description, + endPointA, + endPointB + }) { + if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.GLOBAL_GROUP)) { + throw new Meteor.Error('unauthorized for inserting link type'); + } + + let linkType = LinkTypes.schema.clean({ + }); + + let type = calcTypeFromEndPoints(endPointA, endPointB); + + linkType = R.merge(linkType, { + description, + endPointA, + endPointB, + type + }); + + LinkTypes.insert(linkType); + } +}); + +export const remove = new ValidatedMethod({ + name: 'links_types.remove', + validate: LinkTypes.simpleSchema() + .pick([ + '_id', + ]).validator({ clean: true, filter: false }), + run({ + _id + }) { + if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.DEFAULT_GROUP)) { + throw new Meteor.Error('unauthorized for removing link type'); + } + + let linkType = LinkTypes.findOne({ _id: _id }); + console.log('link type for remove: ', linkType); + console.log('current user', Meteor.userId()); + + LinkTypes.remove({ _id: _id }); + } +}); + +export const update = new ValidatedMethod({ + name: 'links_types.update', + validate: LinkTypes.simpleSchema() + .pick([ + '_id', + 'description', + 'endPointA', + 'endPointB', + ]).validator({ clean: true, filter: false }), + run({ + _id, + description, + endPointA, + endPointB + }) { + if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.DEFAULT_GROUP)) { + throw new Meteor.Error('unauthorized for updating link type'); + } + + let linkType = LinkTypes.findOne({ _id: _id }); + console.log('link type for update: ', linkType); + console.log('current user', Meteor.userId()); + + let type = calcTypeFromEndPoints(endPointA, endPointB); + + linkType = R.merge(R.pick([ + 'description', + 'endPointA', + 'endPointB', + 'type' + ], linkType), { + description, + endPointA, + endPointB, + type + }); + + LinkTypes.update({ _id: _id }, { $set: linkType }); + } +}); + +function calcTypeFromEndPoints(endPointA, endPointB) { + return `${endPointA}-${endPointB}`; +} diff --git a/ui/imports/api/link-types/server/publications.js b/ui/imports/api/link-types/server/publications.js new file mode 100644 index 0000000..6c6278f --- /dev/null +++ b/ui/imports/api/link-types/server/publications.js @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// 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 { LinkTypes } from '../link-types.js'; + +Meteor.publish('link_types', function () { + console.log('server subscribtion: link_types'); + + //let that = this; + + let query = {}; + return LinkTypes.find(query); +}); + +Meteor.publish('link_types?env*', function (env) { + console.log('server subscribtion: link_types?env*'); + console.log(env); + + //let that = this; + + let query = {}; + if (! R.isNil(env)) { query = R.assoc('environment', env, query); } + console.log('-query: ', query); + return LinkTypes.find(query); +}); + +Meteor.publish('link_types?_id', function (_id) { + console.log('server subscribtion: link_types?_id'); + console.log(_id); + + //let that = this; + + let query = { + _id: _id, + }; + console.log('-query: ', query); + return LinkTypes.find(query); +}); -- cgit 1.2.3-korg