Fix Auth Header + Firefox Bug in Emulator (#22)

This commit is contained in:
Steve Faulkner 2020-06-10 16:08:05 -05:00 committed by GitHub
parent 582ac865ff
commit 1662d20e8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 16 deletions

15
package-lock.json generated
View File

@ -5,9 +5,9 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@azure/cosmos": { "@azure/cosmos": {
"version": "3.6.3", "version": "3.7.0",
"resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-3.6.3.tgz", "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-3.7.0.tgz",
"integrity": "sha512-JoCDxl0TnL6EHL4xD3KC9r2bMivK13q1jl7h69wd/YFLlt3aBTTCehtAX+y4alNSENpL53XdRdw/cna0mI2XDw==", "integrity": "sha512-3SRxnmy6NncdX5eYqGuRTack52hloS9YhQ0aOKwWJ8Z4dDSrVH3XB2Mcp/WokoIpVm0Bq5nUC8FsvLBZKfRkyg==",
"requires": { "requires": {
"@types/debug": "^4.1.4", "@types/debug": "^4.1.4",
"debug": "^4.1.1", "debug": "^4.1.1",
@ -18,7 +18,14 @@
"priorityqueuejs": "^1.0.0", "priorityqueuejs": "^1.0.0",
"semaphore": "^1.0.5", "semaphore": "^1.0.5",
"tslib": "^1.10.0", "tslib": "^1.10.0",
"uuid": "^3.3.2" "uuid": "^8.1.0"
},
"dependencies": {
"uuid": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz",
"integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg=="
}
} }
}, },
"@azure/cosmos-language-service": { "@azure/cosmos-language-service": {

View File

@ -4,7 +4,7 @@
"description": "Cosmos Explorer", "description": "Cosmos Explorer",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"@azure/cosmos": "3.6.3", "@azure/cosmos": "3.7.0",
"@azure/cosmos-language-service": "0.0.4", "@azure/cosmos-language-service": "0.0.4",
"@jupyterlab/services": "4.2.0", "@jupyterlab/services": "4.2.0",
"@jupyterlab/terminal": "1.2.1", "@jupyterlab/terminal": "1.2.1",

View File

@ -21,13 +21,15 @@ const _global = typeof self === "undefined" ? window : self;
export const tokenProvider = async (requestInfo: RequestInfo) => { export const tokenProvider = async (requestInfo: RequestInfo) => {
const { verb, resourceId, resourceType, headers } = requestInfo; const { verb, resourceId, resourceType, headers } = requestInfo;
if (config.platform === Platform.Emulator) { if (config.platform === Platform.Emulator) {
// TODO Remove any. SDK expects a return value for tokenProvider, but we are mutating the header object instead. // TODO This SDK method mutates the headers object. Find a better one or fix the SDK.
return setAuthorizationTokenHeaderUsingMasterKey(verb, resourceId, resourceType, headers, EmulatorMasterKey) as any; await setAuthorizationTokenHeaderUsingMasterKey(verb, resourceId, resourceType, headers, EmulatorMasterKey);
return decodeURIComponent(headers.authorization);
} }
if (_masterKey) { if (_masterKey) {
// TODO Remove any. SDK expects a return value for tokenProvider, but we are mutating the header object instead. // TODO This SDK method mutates the headers object. Find a better one or fix the SDK.
return setAuthorizationTokenHeaderUsingMasterKey(verb, resourceId, resourceType, headers, _masterKey) as any; await setAuthorizationTokenHeaderUsingMasterKey(verb, resourceId, resourceType, headers, EmulatorMasterKey);
return decodeURIComponent(headers.authorization);
} }
if (_resourceToken) { if (_resourceToken) {
@ -47,7 +49,9 @@ export const requestPlugin: Cosmos.Plugin<any> = async (requestContext, next) =>
export const endpoint = () => { export const endpoint = () => {
if (config.platform === Platform.Emulator) { if (config.platform === Platform.Emulator) {
return config.EMULATOR_ENDPOINT || window.parent.location.origin; // In worker scope, _global(self).parent does not exist
const location = _global.parent ? _global.parent.location : _global.location;
return config.EMULATOR_ENDPOINT || location.origin;
} }
return _endpoint || (_databaseAccount && _databaseAccount.properties && _databaseAccount.properties.documentEndpoint); return _endpoint || (_databaseAccount && _databaseAccount.properties && _databaseAccount.properties.documentEndpoint);
}; };

View File

@ -32,6 +32,7 @@ import DocumentId from "./DocumentId";
import StoredProcedure from "./StoredProcedure"; import StoredProcedure from "./StoredProcedure";
import Trigger from "./Trigger"; import Trigger from "./Trigger";
import UserDefinedFunction from "./UserDefinedFunction"; import UserDefinedFunction from "./UserDefinedFunction";
import { config } from "../../Config";
export default class Collection implements ViewModels.Collection { export default class Collection implements ViewModels.Collection {
public nodeKind: string; public nodeKind: string;
@ -1416,7 +1417,7 @@ export default class Collection implements ViewModels.Collection {
masterKey: CosmosClient.masterKey(), masterKey: CosmosClient.masterKey(),
endpoint: CosmosClient.endpoint(), endpoint: CosmosClient.endpoint(),
accessToken: CosmosClient.accessToken(), accessToken: CosmosClient.accessToken(),
platform: window.dataExplorerPlatform, platform: config.platform,
databaseAccount: CosmosClient.databaseAccount() databaseAccount: CosmosClient.databaseAccount()
} }
}; };

View File

@ -1,5 +1,5 @@
import { DatabaseAccount } from "../../Contracts/DataModels"; import { DatabaseAccount } from "../../Contracts/DataModels";
import { PlatformType } from "../../PlatformType"; import { Platform } from "../../Config";
export interface StartUploadMessageParams { export interface StartUploadMessageParams {
files: FileList; files: FileList;
@ -12,7 +12,7 @@ export interface DocumentClientParams {
masterKey: string; masterKey: string;
endpoint: string; endpoint: string;
accessToken: string; accessToken: string;
platform: PlatformType; platform: Platform;
databaseAccount: DatabaseAccount; databaseAccount: DatabaseAccount;
} }

View File

@ -1,6 +1,7 @@
import "babel-polyfill"; import "babel-polyfill";
import { DocumentClientParams, UploadDetailsRecord, UploadDetails } from "./definitions"; import { DocumentClientParams, UploadDetailsRecord, UploadDetails } from "./definitions";
import { CosmosClient } from "../../Common/CosmosClient"; import { CosmosClient } from "../../Common/CosmosClient";
import { config } from "../../Config";
let numUploadsSuccessful = 0; let numUploadsSuccessful = 0;
let numUploadsFailed = 0; let numUploadsFailed = 0;
@ -33,8 +34,7 @@ onmessage = (event: MessageEvent) => {
CosmosClient.endpoint(clientParams.endpoint); CosmosClient.endpoint(clientParams.endpoint);
CosmosClient.accessToken(clientParams.accessToken); CosmosClient.accessToken(clientParams.accessToken);
CosmosClient.databaseAccount(clientParams.databaseAccount); CosmosClient.databaseAccount(clientParams.databaseAccount);
self.dataExplorerPlatform = clientParams.platform; config.platform = clientParams.platform;
console.log(event);
if (!!files && files.length > 0) { if (!!files && files.length > 0) {
numFiles = files.length; numFiles = files.length;
for (let i = 0; i < numFiles; i++) { for (let i = 0; i < numFiles; i++) {
@ -87,7 +87,7 @@ function createDocumentsFromFile(fileName: string, documentContent: string): voi
numUploadsSuccessful++; numUploadsSuccessful++;
}) })
.catch(error => { .catch(error => {
console.log(error); console.error(error);
recordUploadDetailErrorForFile(fileName, JSON.stringify(error)); recordUploadDetailErrorForFile(fileName, JSON.stringify(error));
numUploadsFailed++; numUploadsFailed++;
}) })
@ -106,6 +106,7 @@ function createDocumentsFromFile(fileName: string, documentContent: string): voi
triggerCreateDocument(content); triggerCreateDocument(content);
} }
} catch (e) { } catch (e) {
console.log(e);
recordUploadDetailErrorForFile(fileName, e.message); recordUploadDetailErrorForFile(fileName, e.message);
transmitResultIfUploadComplete(); transmitResultIfUploadComplete();
} }