[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