diff options
author | Nirvan Ramjuttun <nirvan.ramjuttun@amdocs.com> | 2019-05-07 12:39:19 -0400 |
---|---|---|
committer | Dan Timoney <dtimoney@att.com> | 2019-05-13 12:52:51 +0000 |
commit | c6bc12d878753aceb887838b926666595d480a86 (patch) | |
tree | dac36d0f140ea7a557b862511a78afab564f1a6b | |
parent | d34f1566790860da5d050ccdeb3aaaf6c61ff7e5 (diff) |
Modify CDS-UI server to allow communicating with external blueprint mS
Issue-ID: CCSDK-1292
Change-Id: I3536437bad334841d7c7ecd577c092cd13f42a9b
Signed-off-by: Nirvan Ramjuttun <nirvan.ramjuttun@amdocs.com>
(cherry picked from commit 087d4b667a9c5517ac7d014c2bbdad994b927147)
16 files changed, 89 insertions, 70 deletions
diff --git a/.gitignore b/.gitignore index a2661f06f..29bf5d423 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ build/Release node_modules/ jspm_packages/ dist/ +dist10/ # TypeScript v1 declaration files typings/ diff --git a/cds-ui/client/src/app/common/constants/app-constants.ts b/cds-ui/client/src/app/common/constants/app-constants.ts index d4e8989c1..283ce735f 100644 --- a/cds-ui/client/src/app/common/constants/app-constants.ts +++ b/cds-ui/client/src/app/common/constants/app-constants.ts @@ -92,10 +92,6 @@ export const GlobalContants = { } }; -export const LoopbackConfig = { - url: "http://127.0.0.1:3000", - authtoken: "ccsdkapps" -} export const ResourceDictionaryURLs = { saveResourceDictionary: '/resourcedictionary/save', diff --git a/cds-ui/client/src/app/common/core/services/api.service.ts b/cds-ui/client/src/app/common/core/services/api.service.ts index 463ef3827..addf51ca5 100644 --- a/cds-ui/client/src/app/common/core/services/api.service.ts +++ b/cds-ui/client/src/app/common/core/services/api.service.ts @@ -24,7 +24,6 @@ limitations under the License. import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpResponse, HttpHeaderResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { LoopbackConfig } from '../../constants/app-constants'; @Injectable() export class ApiService { diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.service.ts b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.service.ts index 63c8019c3..ec2524422 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.service.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.service.ts @@ -24,7 +24,6 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, observable } from 'rxjs'; import { ApiService } from '../../../../common/core/services/api.service'; -import { LoopbackConfig } from '../../../../common/constants/app-constants'; import { saveAs } from 'file-saver'; @Injectable() @@ -35,10 +34,10 @@ export class EditorService { } enrich(uri: string, body: FormData): Observable<any> { - return this.api.post(LoopbackConfig.url + uri, body, { responseType: 'blob' }); + return this.api.post(uri, body, { responseType: 'blob' }); } downloadCBA(uri: string): string { - this.api.get(LoopbackConfig.url + uri, { responseType: 'blob' }) + this.api.get(uri, { responseType: 'blob' }) .subscribe(response => { let blob = new Blob([response], { 'type': "application/octet-stream" }); saveAs(blob, "CBA.zip"); @@ -49,11 +48,11 @@ export class EditorService { } post(uri: string, body: any | null, options?: any): Observable<any> { - return this.api.post(LoopbackConfig.url + uri, body, options); + return this.api.post(uri, body, options); } deployPost(uri: string, body: any | null, options?: any): Observable<any> { - return this.api.post(LoopbackConfig.url + uri, body, { responseType: 'text' }); + return this.api.post(uri, body, { responseType: 'text' }); } }
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/blueprint/test-template/test-template.service.ts b/cds-ui/client/src/app/feature-modules/blueprint/test-template/test-template.service.ts index 8df8e78a6..3896265fe 100644 --- a/cds-ui/client/src/app/feature-modules/blueprint/test-template/test-template.service.ts +++ b/cds-ui/client/src/app/feature-modules/blueprint/test-template/test-template.service.ts @@ -24,7 +24,6 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, observable } from 'rxjs'; import { ApiService } from '../../../common/core/services/api.service'; -import { LoopbackConfig } from '../../../common/constants/app-constants'; @Injectable() export class TestTemplateService { diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-creation/existing-model/exsisting-model.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-creation/existing-model/exsisting-model.service.ts index 7c3bf5465..a4177c176 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-creation/existing-model/exsisting-model.service.ts +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-creation/existing-model/exsisting-model.service.ts @@ -24,7 +24,7 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, observable } from 'rxjs'; import { ApiService } from '../../../../common/core/services/api.service'; -import { LoopbackConfig, ResourceDictionaryURLs } from '../../../../common/constants/app-constants'; +import { ResourceDictionaryURLs } from '../../../../common/constants/app-constants'; @Injectable() export class ExsistingModelService { @@ -34,6 +34,6 @@ export class ExsistingModelService { } searchByTags(tag) { - return this.api.get(LoopbackConfig.url+ ResourceDictionaryURLs.searchResourceDictionaryByTags + '/' + tag); + return this.api.get(ResourceDictionaryURLs.searchResourceDictionaryByTags + '/' + tag); } }
\ No newline at end of file diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts index 982d71d58..bd06abbc1 100644 --- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts +++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts @@ -24,7 +24,7 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, observable } from 'rxjs'; import { ApiService } from '../../../common/core/services/api.service'; -import { LoopbackConfig, ResourceDictionaryURLs } from '../../../common/constants/app-constants'; +import { ResourceDictionaryURLs } from '../../../common/constants/app-constants'; @Injectable() export class ResourceEditService { @@ -34,6 +34,6 @@ export class ResourceEditService { } saveResource(resource) { - return this.api.post(LoopbackConfig.url+ ResourceDictionaryURLs.saveResourceDictionary, resource); + return this.api.post(ResourceDictionaryURLs.saveResourceDictionary, resource); } }
\ No newline at end of file diff --git a/cds-ui/server/config/app-config.ts b/cds-ui/server/config/app-config.ts new file mode 100644 index 000000000..80f246427 --- /dev/null +++ b/cds-ui/server/config/app-config.ts @@ -0,0 +1,9 @@ +export const controllerApiConfig = Object.freeze({ + url: process.env.API_BLUEPRINT_CONTROLLER_BASE_URL || "http://localhost:8080/api/v1", + authToken: process.env.API_BLUEPRINT_CONTROLLER_AUTH_TOKEN || "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==" +}); + +export const processorApiConfig = Object.freeze({ + url: process.env.API_BLUEPRINT_PROCESSOR_BASE_URL || "http://localhost:8081/api/v1", + authToken: process.env.API_BLUEPRINT_PROCESSOR_AUTH_TOKEN || "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==" +});
\ No newline at end of file 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<Response> { 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<Response> { 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<Response> { 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<Response> { - 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<multiparty.File>{ @@ -199,7 +197,7 @@ export class BlueprintRestController { ): Promise<Response> { 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<Response>{ + return this.uploadFileToBlueprintService(file, controllerApiConfig.url + uri, controllerApiConfig.authToken, response); + } + + async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response>{ + return this.uploadFileToBlueprintService(file, processorApiConfig.url + uri, processorApiConfig.authToken, response); + } + + async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response>{ 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<Response> { + return this.downloadFileFromBlueprintService(controllerApiConfig.url + uri, controllerApiConfig.authToken, response); + } + + async downloadFileFromBlueprintService(url: string, authToken: string, response: Response): Promise<Response> { 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<any> { - 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<any> { - 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.json b/cds-ui/server/src/datasources/blueprint.datasource-template.ts index 86b1c2c15..3cbf09576 100644 --- a/cds-ui/server/src/datasources/blueprint.datasource.json +++ b/cds-ui/server/src/datasources/blueprint.datasource-template.ts @@ -1,22 +1,24 @@ -{ +import {controllerApiConfig} from '../../config/app-config'; + +export default { "name": "blueprint", "connector": "rest", - "baseURL": "http://localhost:8080/api/v1/", + "baseURL": controllerApiConfig.url, "crud": false, "operations": [{ "template": { "method": "GET", - "url": "http://localhost:8080/api/v1/blueprint-model/", + "url": controllerApiConfig.url + "/blueprint-model/", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "responsePath": "$.*" }, "functions": { - "getAllblueprints": ["authtoken"] + "getAllblueprints": [] } }] -}
\ No newline at end of file +};
\ 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.json b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts index 9bf5f30c4..b987e588c 100644 --- a/cds-ui/server/src/datasources/resource-dictionary.datasource.json +++ b/cds-ui/server/src/datasources/resource-dictionary.datasource-template.ts @@ -1,89 +1,91 @@ -{ +import {controllerApiConfig} from '../../config/app-config'; + +export default { "name": "resourceDictionary", "connector": "rest", - "baseURL": "http://localhost:8080/api/v1/dictionary", + "baseURL": controllerApiConfig.url + "/dictionary", "crud": false, "operations": [{ "template": { "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/{name}", + "url": controllerApiConfig.url + "/dictionary/{name}", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "responsePath": "$.*" }, "functions": { - "getByName": ["name", "authtoken"] + "getByName": ["name"] } }, { "template": { "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/source-mapping", + "url": controllerApiConfig.url + "/dictionary/source-mapping", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "responsePath": "$.*" }, "functions": { - "getSourceMapping": ["authtoken"] + "getSourceMapping": [] } }, { "template": { "method": "GET", - "url": "http://localhost:8080/api/v1/dictionary/search/{tags}", + "url": controllerApiConfig.url + "/dictionary/search/{tags}", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "responsePath": "$.*" }, "functions": { - "getByTags": ["tags", "authtoken"] + "getByTags": ["tags"] } }, { "template": { "method": "POST", - "url": "http://localhost:8080/api/v1/dictionary", + "url": controllerApiConfig.url + "/dictionary", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "body": "{resourceDictionary}", "responsePath": "$.*" }, "functions": { - "save": ["authtoken", "resourceDictionary"] + "save": ["resourceDictionary"] } }, { "template": { "method": "POST", - "url": "http://localhost:8080/api/v1/dictionary/by-names", + "url": controllerApiConfig.url + "/dictionary/by-names", "headers": { "accepts": "application/json", "content-type": "application/json", - "authorization": "{authtoken}" + "authorization": controllerApiConfig.authToken }, "body": "{resourceDictionaryList}", "responsePath": "$.*" }, "functions": { - "searchbyNames": ["authtoken", "resourceDictionaryList"] + "searchbyNames": ["resourceDictionaryList"] } } ] -}
\ No newline at end of file +};
\ 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<any>; + getAllblueprints(): Promise<any>; } export class BlueprintServiceProvider implements Provider<BlueprintService> { 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<JSON>; - getSourceMapping(authtoken: string): Promise<JSON>; - getByTags(tags: string, authtoken: string): Promise<JSON>; - save(authtoken: string, resourceDictionary: JSON): Promise<JSON>; - searchbyNames(authtoken: string, resourceDictionaryList: JSON): Promise<JSON>; + getByName(name: string): Promise<JSON>; + getSourceMapping(): Promise<JSON>; + getByTags(tags: string): Promise<JSON>; + save(resourceDictionary: JSON): Promise<JSON>; + searchbyNames(resourceDictionaryList: JSON): Promise<JSON>; } export class ResourceDictionaryServiceProvider implements Provider<ResourceDictionaryService> { |