Files
myDrive/backend/services/UserGoogle/index.ts
T

76 lines
2.1 KiB
TypeScript

import {UserInterface} from "../../models/user";
import env from "../../enviroment/env";
import { google } from "googleapis";
class UserGoogleService {
constructor() {
}
createGoogleStorageURL = async(user: UserInterface, googleData: any) => {
const {clientID, clientKey, clientRedirect} = googleData;
const oauth2Client = new google.auth.OAuth2(
clientID, clientKey, env.remoteURL + "/add-google-account"
);
const url = oauth2Client.generateAuthUrl({
access_type: 'offline',
prompt: "consent",
scope: ["https://www.googleapis.com/auth/drive"],
});
await user.encryptDriveIDandKey(clientID, clientKey);
user.decryptDriveIDandKey();
return url;
}
addGoogleStorage = async(user: UserInterface, code: string, ipAddress: string | undefined) => {
const redirectURL = env.remoteURL + "/add-google-account";
const decrypyedIdandKey = await user.decryptDriveIDandKey();
const clientID = decrypyedIdandKey.clientID;
const clientKey = decrypyedIdandKey.clientKey
const oauth2Client = new google.auth.OAuth2(
clientID,
clientKey,
redirectURL,
);
return new Promise<{accessToken: string, refreshToken: string}>((resolve, reject) => {
oauth2Client.getToken(code, async(err, tokens) => {
if (!err) {
const token: any = tokens;
user.encryptDriveTokenData(token);
const {accessToken, refreshToken} = await user.generateAuthToken(ipAddress);
resolve({accessToken, refreshToken});
} else {
reject("Get Google Token Error")
}
})
})
}
removeGoogleStorage = async(user: UserInterface, ipAddress: string | undefined) => {
user.googleDriveEnabled = undefined;
user.googleDriveData = undefined;
await user.save();
return await user.generateAuthToken(ipAddress);
}
}
export default UserGoogleService;