From 087d4b667a9c5517ac7d014c2bbdad994b927147 Mon Sep 17 00:00:00 2001 From: Nirvan Ramjuttun Date: Tue, 7 May 2019 12:39:19 -0400 Subject: Modify CDS-UI server to allow communicating with external blueprint mS Issue-ID: CCSDK-1292 Change-Id: I3536437bad334841d7c7ecd577c092cd13f42a9b Signed-off-by: Nirvan Ramjuttun --- .../src/controllers/blueprint-rest.controller.ts | 44 +++++++---- .../src/controllers/data-dictionary.controller.ts | 14 ++-- .../datasources/blueprint.datasource-template.ts | 24 ++++++ .../src/datasources/blueprint.datasource.json | 22 ------ .../server/src/datasources/blueprint.datasource.ts | 2 +- .../resource-dictionary.datasource-template.ts | 91 ++++++++++++++++++++++ .../resource-dictionary.datasource.json | 89 --------------------- .../datasources/resource-dictionary.datasource.ts | 2 +- cds-ui/server/src/services/blueprint.service.ts | 2 +- .../src/services/resource-dictionary.service.ts | 10 +-- 10 files changed, 158 insertions(+), 142 deletions(-) create mode 100644 cds-ui/server/src/datasources/blueprint.datasource-template.ts delete mode 100644 cds-ui/server/src/datasources/blueprint.datasource.json create mode 100644 cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts delete mode 100644 cds-ui/server/src/datasources/resource-dictionary.datasource.json (limited to 'cds-ui/server/src') diff --git a/cds-ui/server/src/controllers/blueprint-rest.controller.ts b/cds-ui/server/src/controllers/blueprint-rest.controller.ts index 38abad80c..877fa02bb 100644 --- a/cds-ui/server/src/controllers/blueprint-rest.controller.ts +++ b/cds-ui/server/src/controllers/blueprint-rest.controller.ts @@ -48,11 +48,7 @@ import { BlueprintService } from '../services'; import * as fs from 'fs'; import * as multiparty from 'multiparty'; import * as request_lib from 'request'; - -const REST_BLUEPRINT_CONTROLLER_BASE_URL = process.env.REST_BLUEPRINT_CONTROLLER_BASE_URL || "http://localhost:8080/api/v1"; -const REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER = process.env.REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER || "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw=="; -const REST_BLUEPRINT_PROCESSOR_BASE_URL= process.env.REST_BLUEPRINT_PROCESSOR_BASE_URL ||"http://localhost:8081/api/v1"; -const MULTIPART_FORM_UPLOAD_DIR = process.env.MULTIPART_FORM_UPLOAD_DIR || "/tmp"; +import {controllerApiConfig, processorApiConfig} from '../../config/app-config'; export class BlueprintRestController { constructor( @@ -69,7 +65,7 @@ export class BlueprintRestController { }, }) async getall() { - return await this.bpservice.getAllblueprints(REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER); + return await this.bpservice.getAllblueprints(); } @post('/create-blueprint') @@ -90,7 +86,7 @@ export class BlueprintRestController { ): Promise { return new Promise((resolve, reject) => { this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, REST_BLUEPRINT_CONTROLLER_BASE_URL+"/blueprint-model/", response).then(resp=>{ + this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp=>{ resolve(resp); }, err=>{ reject(err); @@ -100,6 +96,7 @@ export class BlueprintRestController { }); }); } + @post('/publish') async publish( @requestBody({ @@ -118,7 +115,7 @@ export class BlueprintRestController { ): Promise { return new Promise((resolve, reject) => { this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, REST_BLUEPRINT_CONTROLLER_BASE_URL+"/blueprint-model/publish/", response).then(resp=>{ + this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp=>{ resolve(resp); }, err=>{ reject(err); @@ -128,6 +125,7 @@ export class BlueprintRestController { }); }); } + @post('/enrich-blueprint') async enrich( @requestBody({ @@ -146,7 +144,7 @@ export class BlueprintRestController { ): Promise { return new Promise((resolve, reject) => { this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, REST_BLUEPRINT_CONTROLLER_BASE_URL+"/blueprint-model/enrich/", response).then(resp=>{ + this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp=>{ resolve(resp); }, err=>{ reject(err); @@ -163,7 +161,7 @@ export class BlueprintRestController { @param.path.string('version') version:string, @inject(RestBindings.Http.RESPONSE) response: Response, ): Promise { - return this.downloadFileFromBlueprintController(REST_BLUEPRINT_CONTROLLER_BASE_URL+"/blueprint-model/download/by-name/"+name+"/version/"+version, response); + return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/"+name+"/version/"+version, response); } async getFileFromMultiPartForm(request: Request): Promise{ @@ -199,7 +197,7 @@ export class BlueprintRestController { ): Promise { return new Promise((resolve, reject) => { this.getFileFromMultiPartForm(request).then(file=>{ - this.uploadFileToBlueprintController(file, REST_BLUEPRINT_PROCESSOR_BASE_URL+"/execution-service/upload/", response).then(resp=>{ + this.uploadFileToBlueprintProcessor(file, "/execution-service/upload/", response).then(resp=>{ resolve(resp); }, err=>{ reject(err); @@ -209,12 +207,20 @@ export class BlueprintRestController { }); }); } + async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise{ + return this.uploadFileToBlueprintService(file, controllerApiConfig.url + uri, controllerApiConfig.authToken, response); + } + + async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise{ + return this.uploadFileToBlueprintService(file, processorApiConfig.url + uri, processorApiConfig.authToken, response); + } + + async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise{ let options = { - // url: REST_BLUEPRINT_CONTROLLER_BASE_URL + uri, - url:uri, + url: url, headers: { - Authorization: REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER, + Authorization: authToken, 'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' }, formData: { @@ -248,12 +254,16 @@ export class BlueprintRestController { }); }) } + async downloadFileFromBlueprintController(uri: string, response: Response): Promise { + return this.downloadFileFromBlueprintService(controllerApiConfig.url + uri, controllerApiConfig.authToken, response); + } + + async downloadFileFromBlueprintService(url: string, authToken: string, response: Response): Promise { let options = { - url: uri, - // REST_BLUEPRINT_CONTROLLER_BASE_URL + uri, + url: url, headers: { - Authorization: REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER, + Authorization: authToken, } }; return new Promise((resolve, reject) => { diff --git a/cds-ui/server/src/controllers/data-dictionary.controller.ts b/cds-ui/server/src/controllers/data-dictionary.controller.ts index d535e27b2..486c28658 100644 --- a/cds-ui/server/src/controllers/data-dictionary.controller.ts +++ b/cds-ui/server/src/controllers/data-dictionary.controller.ts @@ -18,7 +18,6 @@ import { import { inject } from '@loopback/core'; import { ResourceDictionaryService } from '../services'; -const REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER = process.env.REST_BLUEPRINT_CONTROLLER_BASIC_AUTH_HEADER || "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw=="; export class DataDictionaryController { constructor( @inject('services.ResourceDictionaryService') @@ -33,8 +32,9 @@ export class DataDictionaryController { }, }) async getByName(@param.path.string('name') name: string) { - return await this.rdservice.getByName(name, REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER); + return await this.rdservice.getByName(name); } + @get('/resourcedictionary/search/{tags}', { responses: { '200': { @@ -43,7 +43,7 @@ export class DataDictionaryController { }, }) async getByTags(@param.path.string('tags') tags: string) { - return await this.rdservice.getByTags(tags, REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER); + return await this.rdservice.getByTags(tags); } @get('/resourcedictionary/source-mapping', { @@ -54,8 +54,9 @@ export class DataDictionaryController { }, }) async getSourceMapping() { - return await this.rdservice.getSourceMapping(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER); + return await this.rdservice.getSourceMapping(); } + @post('/resourcedictionary/save', { responses: { '200': { @@ -67,8 +68,9 @@ export class DataDictionaryController { content: { 'application/json': { schema: { 'x-ts-type': JSON } } }, accepts: { 'application/json': { schema: { 'x-ts-type': JSON } } } }) resourceDictionary: JSON): Promise { - return await this.rdservice.save(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER, resourceDictionary); + return await this.rdservice.save(resourceDictionary); } + @post('/resourcedictionary/search/by-names', { responses: { '200': { @@ -80,6 +82,6 @@ export class DataDictionaryController { content: { 'application/json': { schema: { 'x-ts-type': JSON } } }, accepts: { 'application/json': { schema: { 'x-ts-type': JSON } } } }) resourceDictionaryList: JSON): Promise { - return await this.rdservice.searchbyNames(REST_RESOURCE_DICTIONARY_BASIC_AUTH_HEADER, resourceDictionaryList); + return await this.rdservice.searchbyNames(resourceDictionaryList); } } diff --git a/cds-ui/server/src/datasources/blueprint.datasource-template.ts b/cds-ui/server/src/datasources/blueprint.datasource-template.ts new file mode 100644 index 000000000..3cbf09576 --- /dev/null +++ b/cds-ui/server/src/datasources/blueprint.datasource-template.ts @@ -0,0 +1,24 @@ +import {controllerApiConfig} from '../../config/app-config'; + +export default { + "name": "blueprint", + "connector": "rest", + "baseURL": controllerApiConfig.url, + "crud": false, + "operations": [{ + "template": { + "method": "GET", + "url": controllerApiConfig.url + "/blueprint-model/", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getAllblueprints": [] + + } + }] +}; \ No newline at end of file diff --git a/cds-ui/server/src/datasources/blueprint.datasource.json b/cds-ui/server/src/datasources/blueprint.datasource.json deleted file mode 100644 index 86b1c2c15..000000000 --- a/cds-ui/server/src/datasources/blueprint.datasource.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "blueprint", - "connector": "rest", - "baseURL": "http://localhost:8080/api/v1/", - "crud": false, - "operations": [{ - "template": { - "method": "GET", - "url": "http://localhost:8080/api/v1/blueprint-model/", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "responsePath": "$.*" - }, - "functions": { - "getAllblueprints": ["authtoken"] - - } - }] -} \ No newline at end of file diff --git a/cds-ui/server/src/datasources/blueprint.datasource.ts b/cds-ui/server/src/datasources/blueprint.datasource.ts index 008612693..ce901b6d7 100644 --- a/cds-ui/server/src/datasources/blueprint.datasource.ts +++ b/cds-ui/server/src/datasources/blueprint.datasource.ts @@ -1,6 +1,6 @@ import {inject} from '@loopback/core'; import {juggler} from '@loopback/repository'; -import * as config from './blueprint.datasource.json'; +import config from './blueprint.datasource-template'; export class BlueprintDataSource extends juggler.DataSource { static dataSourceName = 'blueprint'; diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts new file mode 100644 index 000000000..b987e588c --- /dev/null +++ b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts @@ -0,0 +1,91 @@ +import {controllerApiConfig} from '../../config/app-config'; + +export default { + "name": "resourceDictionary", + "connector": "rest", + "baseURL": controllerApiConfig.url + "/dictionary", + "crud": false, + "operations": [{ + "template": { + "method": "GET", + "url": controllerApiConfig.url + "/dictionary/{name}", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getByName": ["name"] + + } + }, + { + "template": { + "method": "GET", + "url": controllerApiConfig.url + "/dictionary/source-mapping", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getSourceMapping": [] + + } + }, + { + "template": { + "method": "GET", + "url": controllerApiConfig.url + "/dictionary/search/{tags}", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "responsePath": "$.*" + }, + "functions": { + "getByTags": ["tags"] + + } + }, + { + "template": { + "method": "POST", + "url": controllerApiConfig.url + "/dictionary", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "body": "{resourceDictionary}", + "responsePath": "$.*" + }, + "functions": { + "save": ["resourceDictionary"] + + } + }, + { + "template": { + "method": "POST", + "url": controllerApiConfig.url + "/dictionary/by-names", + "headers": { + "accepts": "application/json", + "content-type": "application/json", + "authorization": controllerApiConfig.authToken + }, + "body": "{resourceDictionaryList}", + "responsePath": "$.*" + }, + "functions": { + "searchbyNames": ["resourceDictionaryList"] + + } + } + ] +}; \ No newline at end of file diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource.json b/cds-ui/server/src/datasources/resource-dictionary.datasource.json deleted file mode 100644 index 9bf5f30c4..000000000 --- a/cds-ui/server/src/datasources/resource-dictionary.datasource.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "resourceDictionary", - "connector": "rest", - "baseURL": "http://localhost:8080/api/v1/dictionary", - "crud": false, - "operations": [{ - "template": { - "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/{name}", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "responsePath": "$.*" - }, - "functions": { - "getByName": ["name", "authtoken"] - - } - }, - { - "template": { - "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/source-mapping", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "responsePath": "$.*" - }, - "functions": { - "getSourceMapping": ["authtoken"] - - } - }, - { - "template": { - "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/search/{tags}", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "responsePath": "$.*" - }, - "functions": { - "getByTags": ["tags", "authtoken"] - - } - }, - { - "template": { - "method": "POST", - "url": "http://localhost:8080/api/v1/dictionary", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "body": "{resourceDictionary}", - "responsePath": "$.*" - }, - "functions": { - "save": ["authtoken", "resourceDictionary"] - - } - }, - { - "template": { - "method": "POST", - "url": "http://localhost:8080/api/v1/dictionary/by-names", - "headers": { - "accepts": "application/json", - "content-type": "application/json", - "authorization": "{authtoken}" - }, - "body": "{resourceDictionaryList}", - "responsePath": "$.*" - }, - "functions": { - "searchbyNames": ["authtoken", "resourceDictionaryList"] - - } - } - ] -} \ No newline at end of file diff --git a/cds-ui/server/src/datasources/resource-dictionary.datasource.ts b/cds-ui/server/src/datasources/resource-dictionary.datasource.ts index 381ab9a78..ba12c78e2 100644 --- a/cds-ui/server/src/datasources/resource-dictionary.datasource.ts +++ b/cds-ui/server/src/datasources/resource-dictionary.datasource.ts @@ -1,6 +1,6 @@ import {inject} from '@loopback/core'; import {juggler} from '@loopback/repository'; -import * as config from './resource-dictionary.datasource.json'; +import config from './resource-dictionary.datasource-template'; export class ResourceDictionaryDataSource extends juggler.DataSource { static dataSourceName = 'resourceDictionary'; diff --git a/cds-ui/server/src/services/blueprint.service.ts b/cds-ui/server/src/services/blueprint.service.ts index f48253652..970b2afda 100644 --- a/cds-ui/server/src/services/blueprint.service.ts +++ b/cds-ui/server/src/services/blueprint.service.ts @@ -3,7 +3,7 @@ import {inject, Provider} from '@loopback/core'; import {BlueprintDataSource} from '../datasources'; export interface BlueprintService { - getAllblueprints(authtoken: string): Promise; + getAllblueprints(): Promise; } export class BlueprintServiceProvider implements Provider { diff --git a/cds-ui/server/src/services/resource-dictionary.service.ts b/cds-ui/server/src/services/resource-dictionary.service.ts index 44ba1a347..8bc61fad1 100644 --- a/cds-ui/server/src/services/resource-dictionary.service.ts +++ b/cds-ui/server/src/services/resource-dictionary.service.ts @@ -3,11 +3,11 @@ import {inject, Provider} from '@loopback/core'; import {ResourceDictionaryDataSource} from '../datasources'; export interface ResourceDictionaryService { - getByName(name: string, authtoken: string): Promise; - getSourceMapping(authtoken: string): Promise; - getByTags(tags: string, authtoken: string): Promise; - save(authtoken: string, resourceDictionary: JSON): Promise; - searchbyNames(authtoken: string, resourceDictionaryList: JSON): Promise; + getByName(name: string): Promise; + getSourceMapping(): Promise; + getByTags(tags: string): Promise; + save(resourceDictionary: JSON): Promise; + searchbyNames(resourceDictionaryList: JSON): Promise; } export class ResourceDictionaryServiceProvider implements Provider { -- cgit 1.2.3-korg