Merge branch '14102-actions-repository'
[arvados-workbench2.git] / src / store / auth / auth-action.ts
index 839134cf95ad73d039bac73a3a7f6d49ac8f153e..ac2e0b7e2f68c6e699e294710d582582701b5fc2 100644 (file)
@@ -2,12 +2,12 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { ofType, default as unionize, UnionOf } from "unionize";
+import { ofType, unionize, UnionOf } from '~/common/unionize';
 import { Dispatch } from "redux";
-import { User } from "../../models/user";
+import { User } from "~/models/user";
 import { RootState } from "../store";
-import { ServiceRepository } from "../../services/services";
-import { removeServerApiAuthorizationHeader, setServerApiAuthorizationHeader } from "../../common/api/server-api";
+import { ServiceRepository } from "~/services/services";
+import { AxiosInstance } from "axios";
 
 export const authActions = unionize({
     SAVE_API_TOKEN: ofType<string>(),
@@ -16,16 +16,26 @@ export const authActions = unionize({
     INIT: ofType<{ user: User, token: string }>(),
     USER_DETAILS_REQUEST: {},
     USER_DETAILS_SUCCESS: ofType<User>()
-}, {
-    tag: 'type',
-    value: 'payload'
 });
 
+function setAuthorizationHeader(services: ServiceRepository, token: string) {
+    services.apiClient.defaults.headers.common = {
+        Authorization: `OAuth2 ${token}`
+    };
+    services.webdavClient.defaults.headers = {
+        Authorization: `OAuth2 ${token}`
+    };
+}
+
+function removeAuthorizationHeader(client: AxiosInstance) {
+    delete client.defaults.headers.common.Authorization;
+}
+
 export const initAuth = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
     const user = services.authService.getUser();
     const token = services.authService.getApiToken();
     if (token) {
-        setServerApiAuthorizationHeader([services.authClient, services.apiClient], token);
+        setAuthorizationHeader(services, token);
     }
     if (token && user) {
         dispatch(authActions.INIT({ user, token }));
@@ -34,7 +44,7 @@ export const initAuth = () => (dispatch: Dispatch, getState: () => RootState, se
 
 export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
     services.authService.saveApiToken(token);
-    setServerApiAuthorizationHeader([services.authClient, services.apiClient], token);
+    setAuthorizationHeader(services, token);
     dispatch(authActions.SAVE_API_TOKEN(token));
 };
 
@@ -46,7 +56,7 @@ export const login = () => (dispatch: Dispatch, getState: () => RootState, servi
 export const logout = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
     services.authService.removeApiToken();
     services.authService.removeUser();
-    removeServerApiAuthorizationHeader([services.authClient, services.apiClient]);
+    removeAuthorizationHeader(services.apiClient);
     services.authService.logout();
     dispatch(authActions.LOGOUT());
 };