fixed some google drive issues, made it so if thumbnails fail it shows default thumbnail
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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()});
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 />}
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
}
|
||||
|
||||
@@ -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"}}>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user