aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-09-01 14:03:32 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-09-01 14:03:32 -0400
commit5e12b7d816f1778af112ce69f3029e2f4a72bb08 (patch)
tree5700c5eab4bed2f1e69462a460aebe0dd0ad4e7a
parent77e08a4362ba8fab4cab361fcb472702c97edf15 (diff)
authentication working
-rw-r--r--src/server/apis/google/GoogleApiServerUtils.ts25
-rw-r--r--src/server/apis/google/GooglePhotosUtils.ts22
-rw-r--r--src/server/authentication/config/passport.ts13
-rw-r--r--src/server/credentials/auth.json12
-rw-r--r--src/server/credentials/google_photos_credentials.ts35
-rw-r--r--src/server/index.ts11
6 files changed, 29 insertions, 89 deletions
diff --git a/src/server/apis/google/GoogleApiServerUtils.ts b/src/server/apis/google/GoogleApiServerUtils.ts
index 2fb44d9a2..c1bd3300e 100644
--- a/src/server/apis/google/GoogleApiServerUtils.ts
+++ b/src/server/apis/google/GoogleApiServerUtils.ts
@@ -1,7 +1,7 @@
import { google, docs_v1, slides_v1 } from "googleapis";
import { createInterface } from "readline";
import { readFile, writeFile } from "fs";
-import { OAuth2Client } from "google-auth-library";
+import { OAuth2Client, Credentials } from "google-auth-library";
import { Opt } from "../../../new_fields/Doc";
import { GlobalOptions } from "googleapis-common";
import { GaxiosResponse } from "gaxios";
@@ -48,14 +48,14 @@ export namespace GoogleApiServerUtils {
export const GetEndpoint = async (sector: string, paths: CredentialPaths) => {
return new Promise<Opt<Endpoint>>((resolve, reject) => {
- readFile(paths.credentials, (err, credentials) => {
+ readFile(paths.credentials, async (err, credentials) => {
if (err) {
reject(err);
return console.log('Error loading client secret file:', err);
}
- return authorize(parseBuffer(credentials), paths.token).then(async auth => {
+ authorize(parseBuffer(credentials), paths.token).then(async result => {
let routed: Opt<Endpoint>;
- let parameters: EndpointParameters = { auth, version: "v1" };
+ let parameters: EndpointParameters = { auth: result.client, version: "v1" };
switch (sector) {
case Service.Documents:
routed = google.docs(parameters).documents;
@@ -64,7 +64,7 @@ export namespace GoogleApiServerUtils {
routed = google.slides(parameters).presentations;
break;
case Service.Photos:
- const photos = new Photos(auth);
+ const photos = new Photos(result.token.access_token);
let response = await photos.albums.list();
console.log("WE GOT SOMETHING!", response);
}
@@ -74,24 +74,25 @@ export namespace GoogleApiServerUtils {
});
};
-
+ type TokenResult = { token: Credentials, client: OAuth2Client };
/**
* Create an OAuth2 client with the given credentials, and returns the promise resolving to the authenticated client
* @param {Object} credentials The authorization client credentials.
*/
- export function authorize(credentials: any, token_path: string): Promise<OAuth2Client> {
+ export function authorize(credentials: any, token_path: string): Promise<TokenResult> {
const { client_secret, client_id, redirect_uris } = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(
client_id, client_secret, redirect_uris[0]);
- return new Promise<OAuth2Client>((resolve, reject) => {
+ return new Promise<TokenResult>((resolve, reject) => {
readFile(token_path, (err, token) => {
// Check if we have previously stored a token.
if (err) {
return getNewToken(oAuth2Client, token_path).then(resolve, reject);
}
- oAuth2Client.setCredentials(parseBuffer(token));
- resolve(oAuth2Client);
+ let parsed = parseBuffer(token);
+ oAuth2Client.setCredentials(parsed);
+ resolve({ token: parsed, client: oAuth2Client });
});
});
}
@@ -103,7 +104,7 @@ export namespace GoogleApiServerUtils {
* @param {getEventsCallback} callback The callback for the authorized client.
*/
function getNewToken(oAuth2Client: OAuth2Client, token_path: string) {
- return new Promise<OAuth2Client>((resolve, reject) => {
+ return new Promise<TokenResult>((resolve, reject) => {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES.map(relative => prefix + relative),
@@ -129,7 +130,7 @@ export namespace GoogleApiServerUtils {
}
console.log('Token stored to', token_path);
});
- resolve(oAuth2Client);
+ resolve({ token, client: oAuth2Client });
});
});
});
diff --git a/src/server/apis/google/GooglePhotosUtils.ts b/src/server/apis/google/GooglePhotosUtils.ts
index c33ad2dd9..7f9ffb6f3 100644
--- a/src/server/apis/google/GooglePhotosUtils.ts
+++ b/src/server/apis/google/GooglePhotosUtils.ts
@@ -1,12 +1,12 @@
-import request = require('request-promise');
-const key = require("../../credentials/auth.json");
+// import request = require('request-promise');
+// const key = require("../../credentials/auth.json");
-export const PhotosLibraryQuery = async (authToken: any, parameters: any) => {
- let options = {
- headers: { 'Content-Type': 'application/json' },
- json: parameters,
- auth: { 'bearer': authToken },
- };
- const result = await request.post(config.apiEndpoint + '/v1/mediaItems:search', options);
- return result;
-}; \ No newline at end of file
+// export const PhotosLibraryQuery = async (authToken: any, parameters: any) => {
+// let options = {
+// headers: { 'Content-Type': 'application/json' },
+// json: parameters,
+// auth: { 'bearer': authToken },
+// };
+// const result = await request.post(config.apiEndpoint + '/v1/mediaItems:search', options);
+// return result;
+// }; \ No newline at end of file
diff --git a/src/server/authentication/config/passport.ts b/src/server/authentication/config/passport.ts
index 97ded8785..6e0e01b9e 100644
--- a/src/server/authentication/config/passport.ts
+++ b/src/server/authentication/config/passport.ts
@@ -5,7 +5,6 @@ import { default as User } from '../models/user_model';
import { Request, Response, NextFunction } from "express";
import { RouteStore } from '../../RouteStore';
import * as GoogleOAuth from "passport-google-oauth20";
-const config = require("../../credentials/google_photos_credentials");
const LocalStrategy = passportLocal.Strategy;
const GoogleOAuthStrategy = GoogleOAuth.Strategy;
@@ -34,18 +33,6 @@ passport.use(new LocalStrategy({ usernameField: 'email', passReqToCallback: true
});
}));
-
-passport.use(new GoogleOAuthStrategy(
- {
- clientID: config.oAuthClientID,
- clientSecret: config.oAuthclientSecret,
- callbackURL: config.oAuthCallbackUrl,
- // Set the correct profile URL that does not require any additional APIs
- userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo'
- },
- (token, refreshToken, profile, done) => done(undefined, { profile, token })
-));
-
export let isAuthenticated = (req: Request, res: Response, next: NextFunction) => {
if (req.isAuthenticated()) {
return next();
diff --git a/src/server/credentials/auth.json b/src/server/credentials/auth.json
deleted file mode 100644
index 557eca4b6..000000000
--- a/src/server/credentials/auth.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "type": "service_account",
- "project_id": "brown-dash",
- "private_key_id": "ddf0473a9ac56956b5818e04a7ee406a64d5b0a6",
- "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCueRfxic2oL9nr\nnWSLgl7XR/BKikm4p2sib6szaoTO+q6itcJgt2TDleK/7Y4KW/KhvCfhWVet0Hz0\nIDyg4N/gc2yxuDA6/m8DPWU9kDj8VFR7LVFawOKgo1WbgLcC0Qu8qHzAffrlg8si\nhj3vGuoS/YDn/mz0krwFmCfIx+S0lJ9a7FUjJL5C+CIwAEEYiU7xnTW7pVVNXAm/\n/YKD17ToAjREOtlfVVYO7tZ7V5BiW0I0jJvxw+t1pgrZZe7WPBSBJg9KKGIl+mRi\ndtUMR9Hyt3nMKNZIrSm0OkAz82HxfcapRdSB3wkVjoyW63YaTVHKoBOqRElfMtoM\nqu8wbhhNAgMBAAECggEAA41wJ8kg8J8peQMZ/b7gZvzuPy+h0M/J3j2MrG3rY9qA\nrUv1oqoBSXvhuNDhtEN12oYIqtg6m+L+Sas8CMuOC2rWPafM2u/80IGoGtDhtCjp\nv8inBX8ew4YSiL7IxdbTU2/70Es7DVV5u0t6ndsmr88ibYwwPupGR/fhPCpDyssg\n7lFAEpOwnbKG9a7E7axHpXBRSIE54sh+ESyf6MHH/oyKOLhZ0v4PjRDKaKuMDRst\nMOClgNjD/4bzKpfWljuPYemXz1oIBQitBW5aXnCdsmdrmOLDQpz3qOgIo+RRiyki\nvVU5N54L65sj4WisLt1TT45wbhrkQUz+8GmhV5rHwQKBgQDow32/gSb/M0BKFk5y\n+pSeoLkYp/dwfBFWYT6CNBaKePARFVCdr3db8yOEQD4hrmTOU0EP9c4FSLcaa0Xy\n7n2crhhfZWFpIpRMyXhpeKpqdjQFimfBOK6cIdjnWrtJ6Ik3m4E9p7kKThIsInTc\n/TETwAyzFN+J2ADRdrUdCukOwQKBgQC/4+1Rk8a++Jr9Sznx+JH4vj/J2cGsu7uQ\n0nikcOAFO5HzG7+mt9Wv9/MiPtEYwmc7YziDXldKLpshT2m6wrS1uzzOXAnvXFAh\npiCXQsmVA3gmrVd53k+eZfqrZ1n/rL1kCewRS5LX8xIhM28VIkGqkVy4ZEifMotG\nZKSbH0b4jQKBgQCsJ6rh8Uw+hFGQel8be2pgyM8eBV1lvN213ca11oC1ei1U9Ubi\n2dyWDYa/UiSiFLJKSBlfDJaMIfQLfjwGKY6OS9WK+RjLAeBdysVcfPrOMw7W6j9D\nEgFTSVV8CAdt6qdSkZlNWLfrf0LBkdqNeFbMHMdHzLBo63HverUJ/f/SAQKBgHIk\n2t5T0T14FHnnbaiJ/ArC4J7pcVOWuJQFHs5ydk+mh8LdFrvNTsdF7tLIGwlnWpDx\nDITYcYQnBRBjdLkraONRZXI7PY2sk93wPCK+D7scPTSEmCxeGW5XqyyaZea4klAX\nttzy336lkHs/ZSxlHDqiDU2CGdDY+A//fgroKAdhAoGAA5FXfMzTQLGqxg4J2B1z\nFEXNbrqZZFGgKiveUhhZLm4zPiHXtZXvDtSLwGgcO8oGfTfYueTcHb/Eiar7mKv+\n+SqpAqkINJTthIFVIiD39S9jPFUXzBkf5ZJKPLKQArhzEGxen+SD6ZUO058fA94L\n9FblRGlMtr2o5z0NC7H5zaU=\n-----END PRIVATE KEY-----\n",
- "client_email": "google-photos-api@brown-dash.iam.gserviceaccount.com",
- "client_id": "112995422877175743408",
- "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_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/google-photos-api%40brown-dash.iam.gserviceaccount.com"
-} \ No newline at end of file
diff --git a/src/server/credentials/google_photos_credentials.ts b/src/server/credentials/google_photos_credentials.ts
deleted file mode 100644
index 11c1c766c..000000000
--- a/src/server/credentials/google_photos_credentials.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-const config: any = {};
-
-// The OAuth client ID from the Google Developers console.
-config.oAuthClientID = '1005546247619-l40012sl4idpq17b5emielcs1delffog.apps.googleusercontent.com';
-
-// The OAuth client secret from the Google Developers console.
-config.oAuthclientSecret = 'xEUJ0OBvhlCKA6SLt8TvWBs3';
-
-// The callback to use for OAuth requests. This is the URL where the app is
-// running. For testing and running it locally, use 127.0.0.1.
-config.oAuthCallbackUrl = 'http://localhost:1050/auth/google/callback';
-
-// The port where the app should listen for requests.
-config.port = 1050;
-
-// The scopes to request. The app requires the photoslibrary.readonly and
-// plus.me scopes.
-config.scopes = [
- 'https://www.googleapis.com/auth/photoslibrary.readonly',
- 'profile',
-];
-
-// The number of photos to load for search requests.
-config.photosToLoad = 150;
-
-// The page size to use for search requests. 100 is reccommended.
-config.searchPageSize = 100;
-
-// The page size to use for the listing albums request. 50 is reccommended.
-config.albumPageSize = 50;
-
-// The API end point to use. Do not change.
-config.apiEndpoint = 'https://photoslibrary.googleapis.com';
-
-module.exports = config; \ No newline at end of file
diff --git a/src/server/index.ts b/src/server/index.ts
index 6105dedcc..1f105e9d2 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -29,7 +29,6 @@ import { RouteStore } from './RouteStore';
import v4 = require('uuid/v4');
const app = express();
const config = require('../../webpack.config');
-const OAuthConfig = require('../server/credentials/google_photos_credentials');
import { createCanvas, loadImage, Canvas } from "canvas";
const compiler = webpack(config);
const port = 1050; // default port to listen
@@ -43,11 +42,11 @@ var AdmZip = require('adm-zip');
import * as YoutubeApi from "./apis/youtube/youtubeApiSample";
import { Response } from 'express-serve-static-core';
import { GoogleApiServerUtils } from "./apis/google/GoogleApiServerUtils";
-import { GaxiosResponse } from 'gaxios';
-import { Opt } from '../new_fields/Doc';
-import { docs_v1 } from 'googleapis';
-import { Endpoint } from 'googleapis-common';
-import { PhotosLibraryQuery } from './apis/google/GooglePhotosUtils';
+// import { GaxiosResponse } from 'gaxios';
+// import { Opt } from '../new_fields/Doc';
+// import { docs_v1 } from 'googleapis';
+// import { Endpoint } from 'googleapis-common';
+// import { PhotosLibraryQuery } from './apis/google/GooglePhotosUtils';
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
const probe = require("probe-image-size");