From 5a7f3f56fc39ab231982435d29b8f15e819748fe Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Thu, 9 Aug 2018 16:44:26 +0200 Subject: [PATCH] Add webdavClient to ServiceRepository Feature #13990 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .env | 1 + src/common/config.ts | 4 +++- src/index.tsx | 4 ++-- src/services/services.ts | 28 +++++++++++----------------- src/store/auth/auth-action.ts | 17 ++++++++++------- src/store/auth/auth-actions.test.ts | 4 ++-- src/store/auth/auth-reducer.test.ts | 4 ++-- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.env b/.env index ed397c5c..de1444c0 100644 --- a/.env +++ b/.env @@ -4,4 +4,5 @@ REACT_APP_ARVADOS_CONFIG_URL=/config.json REACT_APP_ARVADOS_API_HOST=qr1hi.arvadosapi.com +REACT_APP_ARVADOS_KEEP_WEB_HOST=download.qr1hi.arvadosapi.com HTTPS=true \ No newline at end of file diff --git a/src/common/config.ts b/src/common/config.ts index 775b1145..5391927e 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -8,6 +8,7 @@ export const CONFIG_URL = process.env.REACT_APP_ARVADOS_CONFIG_URL || "/config.j export interface Config { API_HOST: string; + KEEP_WEB_HOST: string; } export const fetchConfig = () => { @@ -24,7 +25,8 @@ const mapConfig = (config: Config): Config => ({ }); const getDefaultConfig = (): Config => ({ - API_HOST: process.env.REACT_APP_ARVADOS_API_HOST || "" + 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}`; diff --git a/src/index.tsx b/src/index.tsx index aac275f9..49cb0646 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -38,12 +38,12 @@ addMenuActionSet(ContextMenuKind.COLLECTION, collectionActionSet); fetchConfig() .then(config => { const history = createBrowserHistory(); - const services = createServices(config.API_HOST); + const services = createServices(config); const store = configureStore(history, services); store.dispatch(initAuth()); store.dispatch(getProjectList(services.authService.getUuid())); - + console.log(services.webdavClient); const TokenComponent = (props: any) => ; const WorkbenchComponent = (props: any) => ; diff --git a/src/services/services.ts b/src/services/services.ts index e77b5d3a..d2a8ce43 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -7,32 +7,24 @@ import { GroupsService } from "./groups-service/groups-service"; import { ProjectService } from "./project-service/project-service"; import { LinkService } from "./link-service/link-service"; import { FavoriteService } from "./favorite-service/favorite-service"; -import { AxiosInstance } from "axios"; import { CollectionService } from "./collection-service/collection-service"; import { TagService } from "./tag-service/tag-service"; import Axios from "axios"; import { CollectionFilesService } from "./collection-files-service/collection-files-service"; import { KeepService } from "./keep-service/keep-service"; +import { WebDAV } from "../common/webdav"; +import { Config } from "../common/config"; -export interface ServiceRepository { - apiClient: AxiosInstance; +export type ServiceRepository = ReturnType; - authService: AuthService; - keepService: KeepService; - groupsService: GroupsService; - projectService: ProjectService; - linkService: LinkService; - favoriteService: FavoriteService; - tagService: TagService; - collectionService: CollectionService; - collectionFilesService: CollectionFilesService; -} - -export const createServices = (baseUrl: string): ServiceRepository => { +export const createServices = (config: Config) => { const apiClient = Axios.create(); - apiClient.defaults.baseURL = `${baseUrl}/arvados/v1`; + apiClient.defaults.baseURL = `${config.API_HOST}/arvados/v1`; + + const webdavClient = WebDAV.create(); + webdavClient.defaults.baseUrl = config.KEEP_WEB_HOST; - const authService = new AuthService(apiClient, baseUrl); + const authService = new AuthService(apiClient, config.API_HOST); const keepService = new KeepService(apiClient); const groupsService = new GroupsService(apiClient); const projectService = new ProjectService(apiClient); @@ -44,6 +36,7 @@ export const createServices = (baseUrl: string): ServiceRepository => { return { apiClient, + webdavClient, authService, keepService, groupsService, @@ -55,3 +48,4 @@ export const createServices = (baseUrl: string): ServiceRepository => { collectionFilesService }; }; + diff --git a/src/store/auth/auth-action.ts b/src/store/auth/auth-action.ts index 6b81c317..8bf4c3f7 100644 --- a/src/store/auth/auth-action.ts +++ b/src/store/auth/auth-action.ts @@ -17,12 +17,15 @@ export const authActions = unionize({ USER_DETAILS_REQUEST: {}, USER_DETAILS_SUCCESS: ofType() }, { - tag: 'type', - value: 'payload' -}); + tag: 'type', + value: 'payload' + }); -function setAuthorizationHeader(client: AxiosInstance, token: string) { - client.defaults.headers.common = { +function setAuthorizationHeader(services: ServiceRepository, token: string) { + services.apiClient.defaults.headers.common = { + Authorization: `OAuth2 ${token}` + }; + services.webdavClient.defaults.headers = { Authorization: `OAuth2 ${token}` }; } @@ -35,7 +38,7 @@ export const initAuth = () => (dispatch: Dispatch, getState: () => RootState, se const user = services.authService.getUser(); const token = services.authService.getApiToken(); if (token) { - setAuthorizationHeader(services.apiClient, token); + setAuthorizationHeader(services, token); } if (token && user) { dispatch(authActions.INIT({ user, token })); @@ -44,7 +47,7 @@ export const initAuth = () => (dispatch: Dispatch, getState: () => RootState, se export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { services.authService.saveApiToken(token); - setAuthorizationHeader(services.apiClient, token); + setAuthorizationHeader(services, token); dispatch(authActions.SAVE_API_TOKEN(token)); }; diff --git a/src/store/auth/auth-actions.test.ts b/src/store/auth/auth-actions.test.ts index 1ded88ea..2b28cd08 100644 --- a/src/store/auth/auth-actions.test.ts +++ b/src/store/auth/auth-actions.test.ts @@ -23,9 +23,9 @@ describe('auth-actions', () => { let store: RootStore; beforeEach(() => { - store = configureStore(createBrowserHistory(), createServices("/arvados/v1")); + store = configureStore(createBrowserHistory(), createServices({ API_HOST: "/arvados/v1", KEEP_WEB_HOST: "" })); localStorage.clear(); - reducer = authReducer(createServices("/arvados/v1")); + reducer = authReducer(createServices({ API_HOST: "/arvados/v1", KEEP_WEB_HOST: "" })); }); it('should initialise state with user and api token from local storage', () => { diff --git a/src/store/auth/auth-reducer.test.ts b/src/store/auth/auth-reducer.test.ts index 0e05263d..28cfbb2e 100644 --- a/src/store/auth/auth-reducer.test.ts +++ b/src/store/auth/auth-reducer.test.ts @@ -13,7 +13,7 @@ describe('auth-reducer', () => { beforeAll(() => { localStorage.clear(); - reducer = authReducer(createServices("/arvados/v1")); + reducer = authReducer(createServices({ API_HOST: "/arvados/v1", KEEP_WEB_HOST: "" })); }); it('should correctly initialise state', () => { @@ -25,7 +25,7 @@ describe('auth-reducer', () => { uuid: "uuid", ownerUuid: "ownerUuid" }; - const state = reducer(initialState, authActions.INIT({user, token: "token"})); + const state = reducer(initialState, authActions.INIT({ user, token: "token" })); expect(state).toEqual({ apiToken: "token", user -- 2.30.2