diff --git a/client/src/actions/connection.js b/client/src/actions/connection.js index 09466669..86269eaa 100644 --- a/client/src/actions/connection.js +++ b/client/src/actions/connection.js @@ -31,6 +31,7 @@ export const SET_ACL_ENABLED = "connection/SET_ACL_ENABLED"; export const SET_BACKUP_ENABLED = "connection/SET_BACKUP_ENABLED"; export const SET_QUERY_TIMEOUT = "connection/SET_QUERY_TIMEOUT"; export const SET_SLASH_API_KEY = "connection/SET_SLASH_API_KEY"; +export const SET_AUTH_TOKEN = "connection/SET_AUTH_TOKEN"; export const REMOVE_URL = "connection/REMOVE_URL"; export const UPDATE_URL = "connection/UPDATE_URL"; export const UPDATE_ACL_STATE = "connection/UPDATE_ACL_STATE"; @@ -70,6 +71,14 @@ export function setSlashApiKey(url, slashApiKey) { }; } +export function setAuthToken(url, authToken) { + return { + type: SET_AUTH_TOKEN, + url, + authToken, + }; +} + export function setAclEnabled(url, isAclEnabled) { return { type: SET_ACL_ENABLED, diff --git a/client/src/components/ServerConnectionModal.js b/client/src/components/ServerConnectionModal.js index ca77e101..5474dd21 100644 --- a/client/src/components/ServerConnectionModal.js +++ b/client/src/components/ServerConnectionModal.js @@ -153,6 +153,22 @@ export default function ServerConnectionModal() { } /> + + Auth Token: + + dispatch( + actions.setAuthToken( + activeServer.url, + e.target.value, + ), + ) + } + /> + ); diff --git a/client/src/containers/AppProvider.js b/client/src/containers/AppProvider.js index 3c50af8c..d10f4be9 100644 --- a/client/src/containers/AppProvider.js +++ b/client/src/containers/AppProvider.js @@ -22,7 +22,12 @@ import ReduxThunk from "redux-thunk"; import { getAddrParam, getHashParams } from "lib/helpers"; import { runQuery, setResultsTab } from "actions/frames"; -import { loginUser, setSlashApiKey, updateUrl } from "actions/connection"; +import { + loginUser, + setSlashApiKey, + setAuthToken, + updateUrl +} from "actions/connection"; import { migrateToServerConnection, migrateToHaveZeroUrl, @@ -119,6 +124,14 @@ export default class AppProvider extends React.Component { ), ); } + if (hashParams.authToken) { + store.dispatch( + setAuthToken( + hashParams.addr || addrParam, + hashParams.authToken, + ), + ); + } if (hashParams.query) { store.dispatch(updateAction("query")); store.dispatch(updateQuery(hashParams.query)); diff --git a/client/src/lib/helpers.js b/client/src/lib/helpers.js index 0f4e1d78..4a6e192b 100644 --- a/client/src/lib/helpers.js +++ b/client/src/lib/helpers.js @@ -111,6 +111,10 @@ export function setCurrentServerSlashApiKey(slashApiKey) { clientStubOptions.headers["X-Auth-Token"] = slashApiKey; } +export function setCurrentServerAuthToken(authToken) { + clientStubOptions.headers["X-Dgraph-AuthToken"] = authToken; +} + export const getDgraphClient = async () => (await createDgraphClient(dgraphServerUrl)).client; diff --git a/client/src/reducers/connection.js b/client/src/reducers/connection.js index 0403c9f9..8b2844d1 100644 --- a/client/src/reducers/connection.js +++ b/client/src/reducers/connection.js @@ -25,6 +25,7 @@ import { SET_BACKUP_ENABLED, SET_QUERY_TIMEOUT, SET_SLASH_API_KEY, + SET_AUTH_TOKEN, REMOVE_URL, UPDATE_URL, UPDATE_ACL_STATE, @@ -41,6 +42,7 @@ import { getDefaultUrl, setCurrentServerQueryTimeout, setCurrentServerSlashApiKey, + setCurrentServerAuthToken, setCurrentServerUrl, sanitizeUrl, } from "lib/helpers"; @@ -71,6 +73,7 @@ const makeServerRecord = url => ({ aclState: Unknown, queryTimeout: QUERY_TIMEOUT_DEFAULT, slashApiKey: null, + accessToken: null, isAclEnabled: true, isBackupEnabled: true, @@ -189,6 +192,13 @@ export default (state = defaultState, action) => setCurrentServerSlashApiKey(activeServer.slashApiKey); } break; + case SET_AUTH_TOKEN: + assert(action.url, "This action requires url " + action.type); + activeServer.authToken = action.authToken; + if (action.url === currentServer.url) { + setCurrentServerAuthToken(activeServer.authToken); + } + break; case DO_LOGOUT: logoutServer(currentServer);