diff --git a/src/Common/Constants.ts b/src/Common/Constants.ts index ad413db3c..1cf10c2d1 100644 --- a/src/Common/Constants.ts +++ b/src/Common/Constants.ts @@ -185,9 +185,6 @@ export class CassandraProxyAPIs { export class Queries { public static CustomPageOption: string = "custom"; public static UnlimitedPageOption: string = "unlimited"; - public static setAutomaticRBACOption: string = "Automatic"; - public static setTrueRBACOption: string = "True"; - public static setFalseRBACOption: string = "False"; public static itemsPerPage: number = 100; public static unlimitedItemsPerPage: number = 100; // TODO: Figure out appropriate value so it works for accounts with a large number of partitions public static containersPerPage: number = 50; @@ -199,6 +196,12 @@ export class Queries { public static readonly DefaultMaxWaitTimeInSeconds = 30; } +export class RBACOptions { + public static setAutomaticRBACOption: string = "Automatic"; + public static setTrueRBACOption: string = "True"; + public static setFalseRBACOption: string = "False"; +} + export class SavedQueries { public static readonly CollectionName: string = "___Query"; public static readonly DatabaseName: string = "___Cosmos"; diff --git a/src/Common/CosmosClient.ts b/src/Common/CosmosClient.ts index c24680f4b..a56f644ea 100644 --- a/src/Common/CosmosClient.ts +++ b/src/Common/CosmosClient.ts @@ -17,12 +17,23 @@ const _global = typeof self === "undefined" ? window : self; export const tokenProvider = async (requestInfo: Cosmos.RequestInfo) => { const { verb, resourceId, resourceType, headers } = requestInfo; - if (userContext.features.enableAadDataPlane && userContext.aadToken) { + console.log(`AAD Data Plane RBAC enabled "${userContext.dataPlaneRbacEnabled}" `); + if ((userContext.features.enableAadDataPlane || userContext.dataPlaneRbacEnabled) && userContext.aadToken) { + console.log(` Getting Auth token `); const AUTH_PREFIX = `type=aad&ver=1.0&sig=`; const authorizationToken = `${AUTH_PREFIX}${userContext.aadToken}`; + console.log(`Returning Auth token`); return authorizationToken; } + if ((userContext.dataPlaneRbacEnabled) && userContext.authorizationToken) { + console.log(` Getting Portal Auth token `) + const AUTH_PREFIX = `type=aad&ver=1.0&sig=`; + const authorizationToken = `${AUTH_PREFIX}${userContext.authorizationToken}`; + console.log(`Returning Portal Auth token`); + return authorizationToken; + } + if (configContext.platform === Platform.Emulator) { // TODO This SDK method mutates the headers object. Find a better one or fix the SDK. await Cosmos.setAuthorizationTokenHeaderUsingMasterKey(verb, resourceId, resourceType, headers, EmulatorMasterKey); diff --git a/src/Explorer/Panes/SettingsPane/SettingsPane.tsx b/src/Explorer/Panes/SettingsPane/SettingsPane.tsx index 8c83edff1..d8b9a82e4 100644 --- a/src/Explorer/Panes/SettingsPane/SettingsPane.tsx +++ b/src/Explorer/Panes/SettingsPane/SettingsPane.tsx @@ -45,11 +45,11 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({ : Constants.Queries.CustomPageOption, ); const [enableDataPlaneRBACOption, setEnableDataPlaneRBACOption] = useState( - LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled) === Constants.Queries.setAutomaticRBACOption - ? Constants.Queries.setAutomaticRBACOption - : LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled) === Constants.Queries.setTrueRBACOption - ? Constants.Queries.setTrueRBACOption - : Constants.Queries.setFalseRBACOption + LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled) === Constants.RBACOptions.setAutomaticRBACOption + ? Constants.RBACOptions.setAutomaticRBACOption + : LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled) === Constants.RBACOptions.setTrueRBACOption + ? Constants.RBACOptions.setTrueRBACOption + : Constants.RBACOptions.setFalseRBACOption ); const [ruThresholdEnabled, setRUThresholdEnabled] = useState(isRUThresholdEnabled()); const [ruThreshold, setRUThreshold] = useState(getRUThreshold()); @@ -222,9 +222,14 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({ ]; const dataPlaneRBACOptionsList: IChoiceGroupOption[] = [ - { key: Constants.Queries.setAutomaticRBACOption, text: "Automatic" }, - { key: Constants.Queries.setTrueRBACOption, text: "True" }, - { key: Constants.Queries.setFalseRBACOption, text: "False"} + { key: Constants.RBACOptions.setAutomaticRBACOption, text: "Automatic" }, + { key: Constants.RBACOptions.setTrueRBACOption, text: "True" }, + { key: Constants.RBACOptions.setFalseRBACOption, text: "False"} + ]; + + const defaultQueryResultsViewOptionList: IChoiceGroupOption[] = [ + { key: SplitterDirection.Vertical, text: "Vertical" }, + { key: SplitterDirection.Horizontal, text: "Horizontal" }, ]; const handleOnPriorityLevelOptionChange = ( diff --git a/src/hooks/useKnockoutExplorer.ts b/src/hooks/useKnockoutExplorer.ts index c0d1ea1fe..5be72fb6b 100644 --- a/src/hooks/useKnockoutExplorer.ts +++ b/src/hooks/useKnockoutExplorer.ts @@ -1,3 +1,4 @@ +import * as Constants from "Common/Constants"; import { createUri } from "Common/UrlUtility"; import { DATA_EXPLORER_RPC_VERSION } from "Contracts/DataExplorerMessagesContract"; import { FabricMessageTypes } from "Contracts/FabricMessageTypes"; @@ -274,7 +275,7 @@ async function configureHostedWithAAD(config: AAD): Promise { try { if(LocalStorageUtility.hasItem(StorageKey.DataPlaneRbacEnabled)) { var isDataPlaneRbacSetting = LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled); - if (isDataPlaneRbacSetting == "Automatic") + if (isDataPlaneRbacSetting == Constants.RBACOptions.setAutomaticRBACOption) { if (!account.properties.disableLocalAuth) { keys = await listKeys(subscriptionId, resourceGroup, account.name); @@ -285,7 +286,7 @@ async function configureHostedWithAAD(config: AAD): Promise { }); } } - else if(isDataPlaneRbacSetting == "True") { + else if(isDataPlaneRbacSetting == Constants.RBACOptions.setTrueRBACOption) { updateUserContext({ dataPlaneRbacEnabled: true }); @@ -456,7 +457,7 @@ async function configurePortal(): Promise { // Check for init message const message: PortalMessage = event.data?.data; - const inputs = message?.inputs; + const inputs = message?.inputs; const openAction = message?.openAction; if (inputs) { if ( @@ -475,27 +476,29 @@ async function configurePortal(): Promise { setTimeout(() => explorer.openNPSSurveyDialog(), 3000); } - let dbAccount = userContext.databaseAccount; let keys: DatabaseAccountListKeysResult = {}; const account = userContext.databaseAccount; const subscriptionId = userContext.subscriptionId; const resourceGroup = userContext.resourceGroup; + if(LocalStorageUtility.hasItem(StorageKey.DataPlaneRbacEnabled)) { var isDataPlaneRbacSetting = LocalStorageUtility.getEntryString(StorageKey.DataPlaneRbacEnabled); - if (isDataPlaneRbacSetting == "Automatic") + if (isDataPlaneRbacSetting == Constants.RBACOptions.setAutomaticRBACOption) { if (!account.properties.disableLocalAuth) { keys = await listKeys(subscriptionId, resourceGroup, account.name); } else { updateUserContext({ - dataPlaneRbacEnabled: true + dataPlaneRbacEnabled: true, + authorizationToken: message.inputs.authorizationToken }); } } - else if(isDataPlaneRbacSetting == "True") { + else if(isDataPlaneRbacSetting == Constants.RBACOptions.setTrueRBACOption) { updateUserContext({ - dataPlaneRbacEnabled: true + dataPlaneRbacEnabled: true, + authorizationToken: message.inputs.authorizationToken }); } else {