aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Utils.ts7
-rw-r--r--src/client/cognitive_services/CognitiveServices.ts28
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx2
-rw-r--r--src/client/views/nodes/AudioBox.tsx3
-rw-r--r--src/client/views/nodes/CollectionFreeFormDocumentView.tsx2
-rw-r--r--src/client/views/nodes/DocumentView.tsx6
-rw-r--r--src/client/views/nodes/FormattedTextBox.tsx2
-rw-r--r--src/client/views/nodes/ImageBox.tsx4
-rw-r--r--src/client/views/pdf/PDFViewer.tsx4
-rw-r--r--src/server/ActionUtilities.ts8
-rw-r--r--src/server/ApiManagers/DownloadManager.ts (renamed from src/server/ApiManagers/ExportManager.ts)0
-rw-r--r--src/server/ApiManagers/GeneralGoogleManager.ts16
-rw-r--r--src/server/ApiManagers/GooglePhotosManager.ts1
-rw-r--r--src/server/apis/google/GoogleApiServerUtils.ts12
-rw-r--r--src/server/authentication/config/passport.ts2
-rw-r--r--src/server/credentials/google_project_credentials.json11
-rw-r--r--src/server/index.ts13
17 files changed, 60 insertions, 61 deletions
diff --git a/src/Utils.ts b/src/Utils.ts
index 4f4db854d..13d1be767 100644
--- a/src/Utils.ts
+++ b/src/Utils.ts
@@ -48,6 +48,11 @@ export namespace Utils {
return prepend("/corsProxy/") + encodeURIComponent(url);
}
+ export async function getApiKey(target: string): Promise<string> {
+ const response = await fetch(prepend(`environment/${target.toUpperCase()}`));
+ return response.text();
+ }
+
export function CopyText(text: string) {
var textArea = document.createElement("textarea");
textArea.value = text;
@@ -197,7 +202,7 @@ export namespace Utils {
}
let idString = (message.id || "").padStart(36, ' ');
prefix = prefix.padEnd(16, ' ');
- console.log(`${prefix}: ${idString}, ${receiving ? 'receiving' : 'sending'} ${messageName} with data ${JSON.stringify(message)}`);
+ console.log(`${prefix}: ${idString}, ${receiving ? 'receiving' : 'sending'} ${messageName} with data ${JSON.stringify(message)} `);
}
function loggingCallback(prefix: string, func: (args: any) => any, messageName: string) {
diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts
index e74aef998..5a7f5e991 100644
--- a/src/client/cognitive_services/CognitiveServices.ts
+++ b/src/client/cognitive_services/CognitiveServices.ts
@@ -38,21 +38,19 @@ export enum Confidence {
export namespace CognitiveServices {
const ExecuteQuery = async <D>(service: Service, manager: APIManager<D>, data: D): Promise<any> => {
- return fetch(Utils.prepend(`environment/${service}`)).then(async response => {
- let apiKey = await response.text();
- if (!apiKey) {
- console.log(`No API key found for ${service}: ensure index.ts has access to a .env file in your root directory`);
- return undefined;
- }
-
- let results: any;
- try {
- results = await manager.requester(apiKey, manager.converter(data), service).then(json => JSON.parse(json));
- } catch {
- results = undefined;
- }
- return results;
- });
+ const apiKey = await Utils.getApiKey(service);
+ if (!apiKey) {
+ console.log(`No API key found for ${service}: ensure index.ts has access to a .env file in your root directory.`);
+ return undefined;
+ }
+
+ let results: any;
+ try {
+ results = await manager.requester(apiKey, manager.converter(data), service).then(json => JSON.parse(json));
+ } catch {
+ results = undefined;
+ }
+ return results;
};
export namespace Image {
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index 2a63a3074..210a5132a 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -844,7 +844,7 @@ export class CollectionFreeFormView extends CollectionSubView(PanZoomDocument) {
return eles;
}
render() {
- trace();
+ // trace();
// update the actual dimensions of the collection so that they can inquired (e.g., by a minimap)
this.Document.fitX = this.contentBounds && this.contentBounds.x;
this.Document.fitY = this.contentBounds && this.contentBounds.y;
diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx
index 86bd23b67..77b10e395 100644
--- a/src/client/views/nodes/AudioBox.tsx
+++ b/src/client/views/nodes/AudioBox.tsx
@@ -8,7 +8,6 @@ import { DocExtendableComponent } from "../DocComponent";
import { makeInterface, createSchema } from "../../../new_fields/Schema";
import { documentSchema } from "../../../new_fields/documentSchemas";
import { Utils, returnTrue, emptyFunction, returnOne, returnTransparent } from "../../../Utils";
-import { RouteStore } from "../../../server/RouteStore";
import { runInAction, observable, reaction, IReactionDisposer, computed, action } from "mobx";
import { DateField } from "../../../new_fields/DateField";
import { SelectionManager } from "../../util/SelectionManager";
@@ -140,7 +139,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume
self._recorder.ondataavailable = async function (e: any) {
const formData = new FormData();
formData.append("file", e.data);
- const res = await fetch(Utils.prepend(RouteStore.upload), {
+ const res = await fetch(Utils.prepend("/upload"), {
method: 'POST',
body: formData
});
diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
index d0e1d1922..bbd9859a8 100644
--- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
+++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
@@ -87,7 +87,7 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF
finalPanelHeight = () => this.dataProvider ? this.dataProvider.height : this.panelHeight();
render() {
- trace();
+ // trace();
return <div className="collectionFreeFormDocumentView-container"
style={{
boxShadow:
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 411d6bdea..338cf6202 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -540,7 +540,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
@computed get finalLayoutKey() { return this.props.layoutKey || "layout"; }
childScaling = () => (this.layoutDoc.fitWidth ? this.props.PanelWidth() / this.nativeWidth : this.props.ContentScaling());
@computed get contents() {
- trace();
+ // trace();
return (<DocumentContentsView ContainingCollectionView={this.props.ContainingCollectionView}
ContainingCollectionDoc={this.props.ContainingCollectionDoc}
Document={this.props.Document}
@@ -584,7 +584,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
}
@computed get innards() {
- trace();
+ // trace();
const showOverlays = this.props.showOverlays ? this.props.showOverlays(this.Document) : undefined;
const showTitle = showOverlays && "title" in showOverlays ? showOverlays.title : this.getLayoutPropStr("showTitle");
const showCaption = showOverlays && "caption" in showOverlays ? showOverlays.caption : this.getLayoutPropStr("showCaption");
@@ -640,7 +640,7 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
}
render() {
if (!this.props.Document) return (null);
- trace();
+ // trace();
const ruleColor = this.props.ruleProvider ? StrCast(this.props.ruleProvider["ruleColor_" + this.Document.heading]) : undefined;
const ruleRounding = this.props.ruleProvider ? StrCast(this.props.ruleProvider["ruleRounding_" + this.Document.heading]) : undefined;
const colorSet = this.setsLayoutProp("backgroundColor");
diff --git a/src/client/views/nodes/FormattedTextBox.tsx b/src/client/views/nodes/FormattedTextBox.tsx
index 31919f192..0e5fae4af 100644
--- a/src/client/views/nodes/FormattedTextBox.tsx
+++ b/src/client/views/nodes/FormattedTextBox.tsx
@@ -1016,7 +1016,7 @@ export class FormattedTextBox extends DocAnnotatableComponent<(FieldViewProps &
@computed get sidebarWidth() { return Number(this.sidebarWidthPercent.substring(0, this.sidebarWidthPercent.length - 1)) / 100 * this.props.PanelWidth(); }
@computed get annotationsKey() { return "annotations"; }
render() {
- trace();
+ // trace();
let rounded = StrCast(this.layoutDoc.borderRounding) === "100%" ? "-rounded" : "";
let interactive = InkingControl.Instance.selectedTool || this.layoutDoc.isBackground;
if (this.props.isSelected()) {
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 3341a1bf1..86dc4fccc 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -8,7 +8,7 @@ import { Doc, DocListCast, HeightSym, WidthSym } from '../../../new_fields/Doc';
import { List } from '../../../new_fields/List';
import { createSchema, listSpec, makeInterface } from '../../../new_fields/Schema';
import { ComputedField } from '../../../new_fields/ScriptField';
-import { BoolCast, Cast, FieldValue, NumCast, StrCast } from '../../../new_fields/Types';
+import { Cast, NumCast } from '../../../new_fields/Types';
import { AudioField, ImageField } from '../../../new_fields/URLField';
import { Utils, returnOne, emptyFunction } from '../../../Utils';
import { CognitiveServices, Confidence, Service, Tag } from '../../cognitive_services/CognitiveServices';
@@ -267,7 +267,7 @@ export class ImageBox extends DocAnnotatableComponent<FieldViewProps, ImageDocum
}
@computed get content() {
- trace();
+ // trace();
const extensionDoc = this.extensionDoc;
if (!extensionDoc) return (null);
// let transform = this.props.ScreenToLocalTransform().inverse();
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 77790a708..c56422076 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -620,7 +620,7 @@ export class PDFViewer extends DocAnnotatableComponent<IViewerProps, PdfDocument
}
@computed get annotationLayer() {
- trace();
+ // trace();
return <div className="pdfViewer-annotationLayer" style={{ height: (this.Document.nativeHeight || 0), transform: `scale(${this._zoomed})` }} ref={this._annotationLayer}>
{this.nonDocAnnotations.sort((a, b) => NumCast(a.y) - NumCast(b.y)).map((anno, index) =>
<Annotation {...this.props} focus={this.props.focus} extensionDoc={this.extensionDoc!} anno={anno} key={`${anno[Id]}-annotation`} />)}
@@ -673,7 +673,7 @@ export class PDFViewer extends DocAnnotatableComponent<IViewerProps, PdfDocument
visibleHeight = () => this.props.PanelHeight() / this.props.ContentScaling() * 72 / 96;
contentZoom = () => this._zoomed;
render() {
- trace();
+ // trace();
return !this.extensionDoc ? (null) :
<div className={"pdfViewer-viewer" + (this._zoomed !== 1 ? "-zoomed" : "")} ref={this._mainCont}
style={{
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts
index 9a009791b..b418772a6 100644
--- a/src/server/ActionUtilities.ts
+++ b/src/server/ActionUtilities.ts
@@ -25,4 +25,10 @@ export const write_text_file = (relativePath: string, contents: any) => {
return new Promise<void>((resolve, reject) => {
fs.writeFile(target, contents, (err) => err ? reject(err) : resolve());
});
-}; \ No newline at end of file
+};
+
+export async function log_execution(startMessage: string, endMessage: string, contents: () => void | Promise<void>) {
+ console.log('\x1b[36m%s\x1b[0m', `${startMessage}...`);
+ await contents();
+ console.log(endMessage);
+} \ No newline at end of file
diff --git a/src/server/ApiManagers/ExportManager.ts b/src/server/ApiManagers/DownloadManager.ts
index fc6ba0d22..fc6ba0d22 100644
--- a/src/server/ApiManagers/ExportManager.ts
+++ b/src/server/ApiManagers/DownloadManager.ts
diff --git a/src/server/ApiManagers/GeneralGoogleManager.ts b/src/server/ApiManagers/GeneralGoogleManager.ts
index 89efebf78..171912185 100644
--- a/src/server/ApiManagers/GeneralGoogleManager.ts
+++ b/src/server/ApiManagers/GeneralGoogleManager.ts
@@ -5,11 +5,7 @@ import { Database } from "../database";
import RouteSubscriber from "../RouteSubscriber";
const deletionPermissionError = "Cannot perform specialized delete outside of the development environment!";
-const ServicesApiKeyMap = new Map<string, string | undefined>([
- ["face", process.env.FACE],
- ["vision", process.env.VISION],
- ["handwriting", process.env.HANDWRITING]
-]);
+
const EndpointHandlerMap = new Map<GoogleApiServerUtils.Action, GoogleApiServerUtils.ApiRouter>([
["create", (api, params) => api.create(params)],
["retrieve", (api, params) => api.get(params)],
@@ -54,15 +50,6 @@ export default class GeneralGoogleManager extends ApiManager {
});
register({
- method: Method.GET,
- subscription: new RouteSubscriber("/cognitiveServices").add('requestedservice'),
- onValidation: ({ req, res }) => {
- let service = req.params.requestedservice;
- res.send(ServicesApiKeyMap.get(service));
- }
- });
-
- register({
method: Method.POST,
subscription: new RouteSubscriber("/googleDocs").add("sector", "action"),
onValidation: async ({ req, res, user }) => {
@@ -79,5 +66,6 @@ export default class GeneralGoogleManager extends ApiManager {
res.send(undefined);
}
});
+
}
} \ No newline at end of file
diff --git a/src/server/ApiManagers/GooglePhotosManager.ts b/src/server/ApiManagers/GooglePhotosManager.ts
index 67eb92a18..c7af69375 100644
--- a/src/server/ApiManagers/GooglePhotosManager.ts
+++ b/src/server/ApiManagers/GooglePhotosManager.ts
@@ -110,5 +110,6 @@ export default class GooglePhotosManager extends ApiManager {
_invalid(res, requestError);
}
});
+
}
} \ No newline at end of file
diff --git a/src/server/apis/google/GoogleApiServerUtils.ts b/src/server/apis/google/GoogleApiServerUtils.ts
index b3657ee43..b0f3ba993 100644
--- a/src/server/apis/google/GoogleApiServerUtils.ts
+++ b/src/server/apis/google/GoogleApiServerUtils.ts
@@ -48,7 +48,7 @@ export namespace GoogleApiServerUtils {
* allow us to build OAuth2 clients with Dash's
* application specific credentials.
*/
- let installed: OAuth2ClientOptions;
+ let oAuthOptions: OAuth2ClientOptions;
/**
* This is a global authorization client that is never
@@ -69,7 +69,7 @@ export namespace GoogleApiServerUtils {
export function processProjectCredentials(): void {
const { client_secret, client_id, redirect_uris } = GoogleCredentialsLoader.ProjectCredentials;
// initialize the global authorization client
- installed = {
+ oAuthOptions = {
clientId: client_id,
clientSecret: client_secret,
redirectUri: redirect_uris[0]
@@ -201,7 +201,7 @@ export namespace GoogleApiServerUtils {
* @returns the newly created, potentially certified, OAuth2 client instance
*/
function generateClient(credentials?: Credentials): OAuth2Client {
- const client = new google.auth.OAuth2(installed);
+ const client = new google.auth.OAuth2(oAuthOptions);
credentials && client.setCredentials(credentials);
return client;
}
@@ -341,10 +341,12 @@ export namespace GoogleApiServerUtils {
*/
async function refreshAccessToken(credentials: Credentials, userId: string): Promise<Credentials> {
let headerParameters = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } };
+ const { client_id, client_secret } = GoogleCredentialsLoader.ProjectCredentials;
let url = `https://oauth2.googleapis.com/token?${qs.stringify({
refreshToken: credentials.refresh_token,
- grant_type: "refresh_token",
- ...installed
+ client_id,
+ client_secret,
+ grant_type: "refresh_token"
})}`;
const { access_token, expires_in } = await new Promise<any>(async resolve => {
const response = await request.post(url, headerParameters);
diff --git a/src/server/authentication/config/passport.ts b/src/server/authentication/config/passport.ts
index 0b15c3a36..726df7fd7 100644
--- a/src/server/authentication/config/passport.ts
+++ b/src/server/authentication/config/passport.ts
@@ -40,7 +40,7 @@ export let isAuthenticated = (req: Request, res: Response, next: NextFunction) =
export let isAuthorized = (req: Request, res: Response, next: NextFunction) => {
const provider = req.path.split("/").slice(-1)[0];
- if (_.find((req.user).tokens, { kind: provider })) {
+ if (_.find((req.user as any).tokens!, { kind: provider })) {
next();
} else {
res.redirect(`/auth/${provider}`);
diff --git a/src/server/credentials/google_project_credentials.json b/src/server/credentials/google_project_credentials.json
index 5d9c62eb1..955c5a3c1 100644
--- a/src/server/credentials/google_project_credentials.json
+++ b/src/server/credentials/google_project_credentials.json
@@ -1,14 +1,11 @@
{
"installed": {
- "client_id": "1005546247619-kqpnvh42mpa803tem8556b87umi4j9r0.apps.googleusercontent.com",
- "project_id": "brown-dash",
+ "client_id": "343179513178-ud6tvmh275r2fq93u9eesrnc66t6akh9.apps.googleusercontent.com",
+ "project_id": "quickstart-1565056383187",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
- "client_secret": "WshLb5TH9SdFVGGbQcnYj7IU",
- "redirect_uris": [
- "urn:ietf:wg:oauth:2.0:oob",
- "http://localhost"
- ]
+ "client_secret": "w8KIFSc0MQpmUYHed4qEzn8b",
+ "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"]
}
} \ No newline at end of file
diff --git a/src/server/index.ts b/src/server/index.ts
index 773b84403..01ebf0ac1 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -13,11 +13,12 @@ import UtilManager from './ApiManagers/UtilManager';
import SearchManager from './ApiManagers/SearchManager';
import UserManager from './ApiManagers/UserManager';
import { WebSocket } from './Websocket/Websocket';
-import DownloadManager from './ApiManagers/ExportManager';
+import DownloadManager from './ApiManagers/DownloadManager';
import { GoogleCredentialsLoader } from './credentials/CredentialsLoader';
import DeleteManager from "./ApiManagers/DeleteManager";
import PDFManager from "./ApiManagers/PDFManager";
import UploadManager from "./ApiManagers/UploadManager";
+import { log_execution } from "./ActionUtilities";
import GeneralGoogleManager from "./ApiManagers/GeneralGoogleManager";
import GooglePhotosManager from "./ApiManagers/GooglePhotosManager";
@@ -55,8 +56,7 @@ async function preliminaryFunctions() {
* with the server
*/
function routeSetter(router: RouteManager) {
- // initialize API Managers
- [
+ const managers = [
new UserManager(),
new UploadManager(),
new DownloadManager(),
@@ -66,7 +66,10 @@ function routeSetter(router: RouteManager) {
new UtilManager(),
new GeneralGoogleManager(),
new GooglePhotosManager(),
- ].forEach(manager => manager.register(router));
+ ];
+
+ // initialize API Managers
+ managers.forEach(manager => manager.register(router));
// initialize the web socket (bidirectional communication: if a user changes
// a field on one client, that change must be broadcast to all other clients)
@@ -103,6 +106,6 @@ function routeSetter(router: RouteManager) {
}
(async function start() {
- await preliminaryFunctions();
+ await log_execution("starting execution of preliminary functions", "completed preliminary functions", preliminaryFunctions);
await initializeServer({ listenAtPort: 1050, routeSetter });
})();