fixed some google drive issues, made it so if thumbnails fail it shows default thumbnail

This commit is contained in:
kyle hoell
2020-11-29 20:16:12 -05:00
parent 01fef279af
commit 2b3e87a34a
12 changed files with 96 additions and 23 deletions
+9 -2
View File
@@ -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();
+9 -2
View File
@@ -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();
+4 -3
View File
@@ -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);
+1 -1
View File
@@ -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()});
+8 -4
View File
@@ -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);
}
}
@@ -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) => {
+13
View File
@@ -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)
+2 -2
View File
@@ -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,
+1 -1
View File
@@ -24,7 +24,7 @@ class PopupWindow extends React.Component {
{!this.props.popupFile.metadata.hasThumbnail ? <h3 className="popup-window__subtitle">No Preview Available</h3> : undefined}
{!this.props.popupFile.metadata.hasThumbnail ? <img className={this.props.state.imageClassname} src={this.props.state.image}/>
: <img className={this.props.state.imageClassname} onClick={this.props.setPhotoViewerWindow} src={this.props.state.image}/>}
: <img className={this.props.state.imageClassname} onClick={this.props.setPhotoViewerWindow} src={this.props.state.image} onError={this.props.thumbnailOnError}/>}
<div className={this.props.state.spinnerClassname}>
{!this.props.popupFile.metadata.hasThumbnail ? undefined : <Spinner />}
+28 -2
View File
@@ -84,6 +84,16 @@ class PopupWindowContainer extends React.Component {
})
}
thumbnailOnError = () => {
this.setState(() => ({
...this.state,
imageClassname: "popup-window__image",
spinnerClassname: "popup-window__spinner__wrapper popup-window--gone",
image: "/images/cloud-svg.svg"
}))
}
handleClickOutside = (e) => {
if (this.wrapperRef && !this.wrapperRef.current.contains(event.target)) {
@@ -99,6 +109,8 @@ class PopupWindowContainer extends React.Component {
// }
// };
console.log("gettings stream video token")
axios.get("/file-service/download/access-token-stream-video").then(() => {
@@ -173,11 +185,24 @@ class PopupWindowContainer extends React.Component {
document.addEventListener('mousedown', this.handleClickOutside);
if (this.props.popupFile.metadata.hasThumbnail && !this.props.popupFile.metadata.isVideo) {
if (this.props.popupFile.metadata.hasThumbnail && !this.props.popupFile.metadata.isVideo && !this.props.popupFile.metadata.drive) {
this.getThumbnail()
} else if (this.props.popupFile.metadata.isVideo) {
} else if (this.props.popupFile.metadata.drive && this.props.popupFile.metadata.hasThumbnail && !this.props.popupFile.metadata.googleDoc && !this.props.popupFile.metadata.isVideo) {
this.getThumbnail();
} else if (this.props.popupFile.metadata.drive && this.props.popupFile.metadata.hasThumbnail && !this.props.popupFile.metadata.isVideo) {
this.setState(() => ({
...this.state,
imageClassname: "popup-window__image",
spinnerClassname: "popup-window__spinner__wrapper popup-window--gone",
image: "/images/cloud-svg.svg"
}))
}else if (this.props.popupFile.metadata.isVideo) {
this.getVideo();
}
@@ -203,6 +228,7 @@ class PopupWindowContainer extends React.Component {
hidePopupWindow={this.hidePopupWindow}
state={this.state}
setPhotoViewerWindow={this.setPhotoViewerWindow}
thumbnailOnError={this.thumbnailOnError}
{...this.props}
/>
}
+6 -4
View File
@@ -36,15 +36,17 @@ class ShareModelContainer extends React.Component {
//`/file-service/info/${id}`
axios.get(`/file-service/info/${id}`).then((response) => {
const url = this.props.shareSelected.metadata.drive ? `/file-service-google/info/${id}` : `/file-service/info/${id}`;
axios.get(url).then((response) => {
console.log("file info response", response.data);
const linkType = response.data.metadata.linkType;
const shareURL = this.props.shareSelected.metadata.drive ? results.data : `/download-page/${this.props.shareSelected._id}/${this.props.shareSelected.metadata.link}`
const shareURL = this.props.shareSelected.metadata.drive ? response.data.metadata.link : `/download-page/${this.props.shareSelected._id}/${this.props.shareSelected.metadata.link}`
console.log("share link type", linkType);
console.log("share link type", linkType, response.data);
this.setState(() => ({
...this.state,
@@ -430,7 +432,7 @@ class ShareModelContainer extends React.Component {
<button onClick={this.makePublic} className="button popup-window__button">Make Public</button>
</div>
<div className="share-button__wrapper">
<button onClick={this.makeOne} className="button popup-window__button">Make One Time Link</button>
<button onClick={this.makeOne} style={this.props.shareSelected.metadata.drive ? {display: "none"} : {}} className="button popup-window__button">Make One Time Link</button>
</div>
</div>
<div class="get__share--link" style={this.state.shared ? {} : {display: "none"}}>
+9
View File
@@ -177,6 +177,9 @@
&:hover{
opacity:.7;
}
&>img{
cursor: pointer;
}
}
}
}
@@ -290,6 +293,9 @@
&:hover{
opacity:.7;
}
&>img{
cursor: pointer;
}
}
}
&>h2{
@@ -518,6 +524,9 @@
&:hover{
opacity:.7;
}
&>img{
cursor: pointer;
}
}
}
}