[ARVADOS-WORKBENCH2] created: 1.1.4-641-g964b7f2

Git user git at public.curoverse.com
Mon Aug 20 03:47:51 EDT 2018


        at  964b7f2cea81f087bbaddc94c9eeb08bab945742 (commit)


commit 964b7f2cea81f087bbaddc94c9eeb08bab945742
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Mon Aug 20 09:47:41 2018 +0200

    Obtain configuration from discovery endpoint
    
    Feature #14078
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/.env b/.env
index df56fb2..ed397c5 100644
--- a/.env
+++ b/.env
@@ -4,5 +4,4 @@
 
 REACT_APP_ARVADOS_CONFIG_URL=/config.json
 REACT_APP_ARVADOS_API_HOST=qr1hi.arvadosapi.com
-REACT_APP_ARVADOS_KEEP_WEB_HOST=collections.qr1hi.arvadosapi.com
 HTTPS=true
\ No newline at end of file
diff --git a/src/common/config.ts b/src/common/config.ts
index 759a201..061f9c0 100644
--- a/src/common/config.ts
+++ b/src/common/config.ts
@@ -7,8 +7,48 @@ import Axios from "axios";
 export const CONFIG_URL = process.env.REACT_APP_ARVADOS_CONFIG_URL || "/config.json";
 
 export interface Config {
-    apiHost: string;
-    keepWebHost: string;
+    auth: {};
+    basePath: string;
+    baseUrl: string;
+    batchPath: string;
+    blobSignatureTtl: number;
+    crunchLimitLogBytesPerJob: number;
+    crunchLogBytesPerEvent: number;
+    crunchLogPartialLineThrottlePeriod: number;
+    crunchLogSecondsBetweenEvents: number;
+    crunchLogThrottleBytes: number;
+    crunchLogThrottleLines: number;
+    crunchLogThrottlePeriod: number;
+    defaultCollectionReplication: number;
+    defaultTrashLifetime: number;
+    description: string;
+    discoveryVersion: string;
+    dockerImageFormats: string[];
+    documentationLink: string;
+    generatedAt: string;
+    gitUrl: string;
+    id: string;
+    keepWebServiceUrl: string;
+    kind: string;
+    maxRequestSize: number;
+    name: string;
+    packageVersion: string;
+    parameters: {};
+    protocol: string;
+    remoteHosts: string;
+    remoteHostsViaDNS: boolean;
+    resources: {};
+    revision: string;
+    rootUrl: string;
+    schemas: {};
+    servicePath: string;
+    sourceVersion: string;
+    source_version: string;
+    title: string;
+    uuidPrefix: string;
+    version: string;
+    websocketUrl: string;
+    workbenchUrl: string;
 }
 
 export const fetchConfig = () => {
@@ -16,22 +56,62 @@ export const fetchConfig = () => {
         .get<ConfigJSON>(CONFIG_URL + "?nocache=" + (new Date()).getTime())
         .then(response => response.data)
         .catch(() => Promise.resolve(getDefaultConfig()))
-        .then(mapConfig);
+        .then(config => Axios.get<Config>(getDiscoveryURL(config.API_HOST)))
+        .then(response => response.data);
 };
 
+export const mockConfig = (config: Partial<Config>): Config => ({
+    auth: {},
+    basePath: '',
+    baseUrl: '',
+    batchPath: '',
+    blobSignatureTtl: 0,
+    crunchLimitLogBytesPerJob: 0,
+    crunchLogBytesPerEvent: 0,
+    crunchLogPartialLineThrottlePeriod: 0,
+    crunchLogSecondsBetweenEvents: 0,
+    crunchLogThrottleBytes: 0,
+    crunchLogThrottleLines: 0,
+    crunchLogThrottlePeriod: 0,
+    defaultCollectionReplication: 0,
+    defaultTrashLifetime: 0,
+    description: '',
+    discoveryVersion: '',
+    dockerImageFormats: [],
+    documentationLink: '',
+    generatedAt: '',
+    gitUrl: '',
+    id: '',
+    keepWebServiceUrl: '',
+    kind: '',
+    maxRequestSize: 0,
+    name: '',
+    packageVersion: '',
+    parameters: {},
+    protocol: '',
+    remoteHosts: '',
+    remoteHostsViaDNS: false,
+    resources: {},
+    revision: '',
+    rootUrl: '',
+    schemas: {},
+    servicePath: '',
+    sourceVersion: '',
+    source_version: '',
+    title: '',
+    uuidPrefix: '',
+    version: '',
+    websocketUrl: '',
+    workbenchUrl: '',
+    ...config
+});
+
 interface ConfigJSON {
     API_HOST: string;
-    KEEP_WEB_HOST: string;
 }
 
-const mapConfig = (config: ConfigJSON): Config => ({
-    apiHost: addProtocol(config.API_HOST),
-    keepWebHost: addProtocol(config.KEEP_WEB_HOST)
-});
-
 const getDefaultConfig = (): ConfigJSON => ({
     API_HOST: process.env.REACT_APP_ARVADOS_API_HOST || "",
-    KEEP_WEB_HOST: process.env.REACT_APP_ARVADOS_KEEP_WEB_HOST || ""
 });
 
-const addProtocol = (url: string) => `${window.location.protocol}//${url}`;
+const getDiscoveryURL = (apiHost: string) => `${window.location.protocol}//${apiHost}/discovery/v1/apis/arvados/v1/rest`;
diff --git a/src/services/services.ts b/src/services/services.ts
index 61dd399..8ddc3f4 100644
--- a/src/services/services.ts
+++ b/src/services/services.ts
@@ -19,12 +19,12 @@ export type ServiceRepository = ReturnType<typeof createServices>;
 
 export const createServices = (config: Config) => {
     const apiClient = Axios.create();
-    apiClient.defaults.baseURL = `${config.apiHost}/arvados/v1`;
+    apiClient.defaults.baseURL = config.baseUrl;
 
     const webdavClient = new WebDAV();
-    webdavClient.defaults.baseURL = config.keepWebHost;
+    webdavClient.defaults.baseURL = config.keepWebServiceUrl;
 
-    const authService = new AuthService(apiClient, config.apiHost);
+    const authService = new AuthService(apiClient, config.rootUrl);
     const keepService = new KeepService(apiClient);
     const groupsService = new GroupsService(apiClient);
     const projectService = new ProjectService(apiClient);
diff --git a/src/store/auth/auth-actions.test.ts b/src/store/auth/auth-actions.test.ts
index 217a27c..4ac48a0 100644
--- a/src/store/auth/auth-actions.test.ts
+++ b/src/store/auth/auth-actions.test.ts
@@ -17,15 +17,16 @@ import 'jest-localstorage-mock';
 import { createServices } from "~/services/services";
 import { configureStore, RootStore } from "../store";
 import createBrowserHistory from "history/createBrowserHistory";
+import { mockConfig } from '~/common/config';
 
 describe('auth-actions', () => {
     let reducer: (state: AuthState | undefined, action: AuthAction) => any;
     let store: RootStore;
 
     beforeEach(() => {
-        store = configureStore(createBrowserHistory(), createServices({ apiHost: "/arvados/v1", keepWebHost: "" }));
+        store = configureStore(createBrowserHistory(), createServices(mockConfig({})));
         localStorage.clear();
-        reducer = authReducer(createServices({ apiHost: "/arvados/v1", keepWebHost: "" }));
+        reducer = authReducer(createServices(mockConfig({})));
     });
 
     it('should initialise state with user and api token from local storage', () => {
@@ -72,3 +73,5 @@ describe('auth-actions', () => {
     });
     */
 });
+
+
diff --git a/src/store/auth/auth-reducer.test.ts b/src/store/auth/auth-reducer.test.ts
index 8eeb7c3..2b1920a 100644
--- a/src/store/auth/auth-reducer.test.ts
+++ b/src/store/auth/auth-reducer.test.ts
@@ -7,13 +7,14 @@ import { AuthAction, authActions } from "./auth-action";
 
 import 'jest-localstorage-mock';
 import { createServices } from "~/services/services";
+import { mockConfig } from '~/common/config';
 
 describe('auth-reducer', () => {
     let reducer: (state: AuthState | undefined, action: AuthAction) => any;
 
     beforeAll(() => {
         localStorage.clear();
-        reducer = authReducer(createServices({ apiHost: "/arvados/v1", keepWebHost: "" }));
+        reducer = authReducer(createServices(mockConfig({})));
     });
 
     it('should correctly initialise state', () => {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list