diff --git a/backend/controllers/userGoogle.ts b/backend/controllers/userGoogle.ts index 1b9058c..7639c99 100644 --- a/backend/controllers/userGoogle.ts +++ b/backend/controllers/userGoogle.ts @@ -1,6 +1,7 @@ import { Request, Response } from "express"; import { UserInterface } from "../models/user"; import UserServiceGoogle from "../services/UserGoogle"; +import { createLoginCookie } from "../cookies/createCookies"; const UserProviderGoogle = new UserServiceGoogle(); @@ -64,8 +65,11 @@ class UserGoogleController { const user = req.user; const code = req.body.code; + const ipAddress = req.clientIp; - await UserProviderGoogle.addGoogleStorage(user, code); + const {accessToken, refreshToken} = await UserProviderGoogle.addGoogleStorage(user, code, ipAddress); + + createLoginCookie(res, accessToken, refreshToken); res.send(); @@ -85,8 +89,11 @@ class UserGoogleController { try { const user = req.user + const ipAddress = req.clientIp; - await UserProviderGoogle.removeGoogleStorage(user); + const {accessToken, refreshToken} = await UserProviderGoogle.removeGoogleStorage(user, ipAddress); + + createLoginCookie(res, accessToken, refreshToken); res.send(); diff --git a/backend/controllers/userPersonal.ts b/backend/controllers/userPersonal.ts index cc3b462..5d6f7d0 100644 --- a/backend/controllers/userPersonal.ts +++ b/backend/controllers/userPersonal.ts @@ -1,6 +1,7 @@ import { Request, Response } from "express"; import { UserInterface } from "../models/user"; import UserServicePersonal from "../services/UserPersonalService"; +import { createLoginCookie } from "../cookies/createCookies"; const UserProviderPersonal = new UserServicePersonal() @@ -42,8 +43,11 @@ class UserPersonalController { const user = req.user; const s3Data = req.body; + const ipAddress = req.clientIp; - await UserProviderPersonal.addS3Storage(user, s3Data); + const {accessToken, refreshToken} = await UserProviderPersonal.addS3Storage(user, s3Data, ipAddress); + + createLoginCookie(res, accessToken, refreshToken); res.send(); @@ -63,8 +67,11 @@ class UserPersonalController { try { const user = req.user; + const ipAddress = req.clientIp; - await UserProviderPersonal.removeS3Storage(user); + const {accessToken, refreshToken} = await UserProviderPersonal.removeS3Storage(user, ipAddress); + + createLoginCookie(res, accessToken, refreshToken); res.send(); diff --git a/backend/express-routers/googleFile.ts b/backend/express-routers/googleFile.ts index a76ff02..ec74f88 100644 --- a/backend/express-routers/googleFile.ts +++ b/backend/express-routers/googleFile.ts @@ -2,6 +2,7 @@ import {Router} from "express"; import auth from "../middleware/auth"; import GoogleFileController from "../controllers/googleFile"; import authFullUser from "../middleware/authFullUser"; +import authStreamVideo from "../middleware/authStreamVideo"; const googleController = new GoogleFileController(); @@ -21,15 +22,15 @@ router.patch("/file-service-google/rename", authFullUser, googleController.renam router.delete("/file-service-google/remove", authFullUser, googleController.removeFile); -router.get("/file-service-google/download/:id/:tempToken", authFullUser, googleController.downloadFile); +router.get("/file-service-google/download/:id", authFullUser, googleController.downloadFile); -router.get("/file-service-google-doc/download/:id/:tempToken", authFullUser, googleController.downloadDoc); +router.get("/file-service-google-doc/download/:id", authFullUser, googleController.downloadDoc); router.get("/file-service-google/thumbnail/:id", authFullUser, googleController.getThumbnail); router.get("/file-service-google/full-thumbnail/:id", authFullUser, googleController.getFulllThumbnail); -router.get("/file-service-google/stream-video/:id/:tempToken/:uuid", authFullUser, googleController.streamVideo); +router.get("/file-service-google/stream-video/:id", authStreamVideo, googleController.streamVideo); router.post("/file-service-google/upload", authFullUser, googleController.uploadFile); diff --git a/backend/models/user.ts b/backend/models/user.ts index 001b5c9..5fbca33 100644 --- a/backend/models/user.ts +++ b/backend/models/user.ts @@ -296,7 +296,7 @@ userSchema.methods.generateAuthToken = async function(ipAddress: string | undefi const date = new Date(); const time = date.getTime(); - const userObj = {_id: user._id, emailVerified: user.emailVerified, email: user.email, s3Enabled: user.s3Enabled} + const userObj = {_id: user._id, emailVerified: user.emailVerified, email: user.email, s3Enabled: user.s3Enabled, googleDriveEnabled: user.googleDriveEnabled} let accessToken = jwt.sign({user: userObj, iv}, env.passwordAccess!, {expiresIn: maxAgeAccess.toString()}); let refreshToken = jwt.sign({_id:user._id.toString(), iv, time}, env.passwordRefresh!, {expiresIn: maxAgeRefresh.toString()}); diff --git a/backend/services/UserGoogle/index.ts b/backend/services/UserGoogle/index.ts index e0639e7..f5ecadc 100644 --- a/backend/services/UserGoogle/index.ts +++ b/backend/services/UserGoogle/index.ts @@ -27,7 +27,7 @@ class UserGoogleService { return url; } - addGoogleStorage = async(user: UserInterface, code: string) => { + addGoogleStorage = async(user: UserInterface, code: string, ipAddress: string | undefined) => { const redirectURL = env.remoteURL + "/add-google-account"; @@ -42,7 +42,7 @@ class UserGoogleService { redirectURL, ); - return new Promise((resolve, reject) => { + return new Promise<{accessToken: string, refreshToken: string}>((resolve, reject) => { oauth2Client.getToken(code, async(err, tokens) => { if (!err) { @@ -51,7 +51,9 @@ class UserGoogleService { user.encryptDriveTokenData(token); - resolve(); + const {accessToken, refreshToken} = await user.generateAuthToken(ipAddress); + + resolve({accessToken, refreshToken}); } else { reject("Get Google Token Error") @@ -60,12 +62,14 @@ class UserGoogleService { }) } - removeGoogleStorage = async(user: UserInterface) => { + removeGoogleStorage = async(user: UserInterface, ipAddress: string | undefined) => { user.googleDriveEnabled = undefined; user.googleDriveData = undefined; await user.save(); + + return await user.generateAuthToken(ipAddress); } } diff --git a/backend/services/UserPersonalService/index.ts b/backend/services/UserPersonalService/index.ts index 3fad6af..bbcf4a5 100644 --- a/backend/services/UserPersonalService/index.ts +++ b/backend/services/UserPersonalService/index.ts @@ -18,7 +18,7 @@ class UserPeronsalService { } - addS3Storage = async(user: UserInterface, s3Data: any) => { + addS3Storage = async(user: UserInterface, s3Data: any, ipAddress: string | undefined) => { const {id, key, bucket} = s3Data; @@ -28,9 +28,11 @@ class UserPeronsalService { await user.encryptS3Data(id, key, bucket); await user.save(); + + return await user.generateAuthToken(ipAddress); } - removeS3Storage = async(user: UserInterface) => { + removeS3Storage = async(user: UserInterface, ipAddress: string | undefined) => { const date = new Date(); @@ -40,6 +42,8 @@ class UserPeronsalService { user.personalStorageCanceledDate = date.getTime(); await user.save(); + + return await user.generateAuthToken(ipAddress); } downloadPersonalFileList = async(user: userAccessType) => { diff --git a/src/actions/files.js b/src/actions/files.js index 83c4919..577425d 100644 --- a/src/actions/files.js +++ b/src/actions/files.js @@ -176,6 +176,8 @@ export const startSetAllItems = (clearCache, parent="/", sortby="DEFAULT", searc `/folder-service/list?parent=${parent}&sortby=${sortby}&search=${search}&storageType=${storageType}`; const quickItemsURL = !env.googleDriveEnabled ? `/file-service/quick-list` : `/file-service-google-mongo/quick-list`; + + console.log("google drive enabled", env.googleDriveEnabled); dispatch(setFiles([])) dispatch(setFolders([])) @@ -224,6 +226,8 @@ export const startSetFiles = (parent="/", sortby="DEFAULT", search="", isGoogle= if (isGoogle) { + console.log("is google") + axios.get(`/file-service-google/list?parent=${parent}&sortby=${sortby}&search=${search}&limit=${limit}&storageType=${storageType}`).then((results) => { const googleList = results.data; @@ -242,6 +246,8 @@ export const startSetFiles = (parent="/", sortby="DEFAULT", search="", isGoogle= }) } else if (env.googleDriveEnabled && parent === "/") { + console.log("is not google") + // Temp Google Drive API axios.get(`/file-service-google-mongo/list?parent=${parent}&sortby=${sortby}&search=${search}&limit=${limit}&storageType=${storageType}`).then((results) => { // console.log("Google Data", results.data.data.files); @@ -264,6 +270,9 @@ export const startSetFiles = (parent="/", sortby="DEFAULT", search="", isGoogle= }) } else { + console.log("is not google") + + axios.get(`/file-service/list?parent=${parent}&sortby=${sortby}&search=${search}&limit=${limit}&storageType=${storageType}`).then((results) => { const mongoData = results.data; @@ -303,6 +312,8 @@ export const startLoadMoreFiles = (parent="/", sortby="DEFAULT", search="", star if (isGoogle) { + console.log("is google") + // Temp Google Drive API axios.get(`/file-service-google/list?limit=${limit}&parent=${parent}&sortby=${sortby}&search=${search}&startAt=${true}&startAtDate=${startAtDate}&startAtName=${startAtName}&pageToken=${pageToken}`).then((results) => { @@ -325,6 +336,8 @@ export const startLoadMoreFiles = (parent="/", sortby="DEFAULT", search="", star } else { + console.log("is not google") + axios.get(`/file-service/list?limit=${limit}&parent=${parent}&sortby=${sortby}&search=${search}&startAt=${true}&startAtDate=${startAtDate}&startAtName=${startAtName}`).then((results) => { //console.log("load more files result", results.data.length) diff --git a/src/components/FileItem/index.js b/src/components/FileItem/index.js index 8a31ba8..01d8191 100644 --- a/src/components/FileItem/index.js +++ b/src/components/FileItem/index.js @@ -43,8 +43,8 @@ class FileItemContainer extends React.Component { // const imageClassname = this.props.listView ? "file__image__listview--no-opacity" : "file__image--no-opacity" const imageClassname = "noSelect" - if (this.props.metadata.drive) { - + if (this.props.metadata.drive && !this.props.metadata.googleDoc) { + return await this.setState(() => ({ ...this.state, imageSrc: this.props.metadata.thumbnailID, diff --git a/src/components/PopupWindow/PopupWindow.js b/src/components/PopupWindow/PopupWindow.js index 9de9080..0d143f8 100644 --- a/src/components/PopupWindow/PopupWindow.js +++ b/src/components/PopupWindow/PopupWindow.js @@ -24,7 +24,7 @@ class PopupWindow extends React.Component { {!this.props.popupFile.metadata.hasThumbnail ?