adding bunch of stuff for user getting

This commit is contained in:
Arjun Patel
2022-01-13 22:33:05 -08:00
parent 9f5b3d072a
commit 4e4bc2bcc9
11 changed files with 2202 additions and 51 deletions
+7
View File
@@ -0,0 +1,7 @@
export default interface IFirestoreSerializable {
id: string;
serialize: () => {};
// deserialize: (firestoreData: {}) => {};
}
+20 -2
View File
@@ -1,12 +1,30 @@
import { documentId, Firestore, serverTimestamp, Timestamp } from "firebase/firestore";
import IFirestoreSerializable from "./firestoreSerializable";
export class User {
id: string;
nickname: string;
nickName: string;
firstName: string;
lastName: string;
createdDate: Date
lastUpdatedDate: Date
// serialize() {
// return {
// createdDate: Timestamp.fromDate(this.createdDate),
// lastUpdatedDate: Timestamp.fromDate(this.lastUpdatedDate)
// }
// }
// deserialize(firestoreData: {}) {
// this.lastUpdatedDate = firestoreData.lastUpdatedDate.toDate()
// }
}
export enum UserStatus {
online = "online",
offline = "offline",
inCall = "in call",
busy = "busy"
busy = "busy"
}
@@ -0,0 +1,12 @@
{
"type": "service_account",
"project_id": "nirvana-for-business",
"private_key_id": "8720d0ab82c42545bb151e3e394d03d81acdb208",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9aX62Q555qu4D\nUCmyl3NZda5XDJt5Y+ogpE+ModB8poGiiywX2P/zzR6FhmuCVSKseI4ehHsZn2T8\nBAokBJy6ovsg5UhSQ0Q6vbeJ7mVvyEbyofAElz651CTHk2Tx5iQZbE27vgFRD9zn\nuMyNuCaVpc4D1It1zDxwNNk0y5Na5Pitke21h4NznAh5KTfmbc6L0Sf+E1NvhybO\n+DHSgBBTHOiXAgxWMlCH6/XFGo0kEQmykMVzJKaTQPdWVUrNrw8jW5WVb31PldGn\nCqONy7owo/Ik4f29+9hpIfjf6Ti7y+v3lH+sNrfojDvbv/Xw+Qyy7qBUg9jW4RG3\n9HjG0qNPAgMBAAECggEACKGmkxK4xY2bBA6in89UA9cfhzr9WMZLVIp4T43OLOf/\nj1MtQrbyTv9hbS9HdeyARIDH5S8fVvcTCIL8nVCSfdTQgdrA9XK4SL79fq0c9T+Y\nsBTeFa94vcojlO6sEnPs4DW1wyDw+WsyI2Mh+zFRnM8t+LG2Wztf47Mc1NGUGPey\n+La5EW8ZXTFVFYBe+9TlKrvxT506NRdursg+bO6GMbzpHgWHuFj/fx6ij+t2a3I8\nxWcV6uJnoYEHteeQNRAh2pITqaEAQ2Z2iglg3eny/IKhN6I/5ryBBvYknwR1sY/2\n7RVVqxRNav/cmxTc9j6sVlHudil+j/0hmqZyFfysrQKBgQD7S5sdMaL3I4E6KB9A\npw4bHAuQM6zoFkFHIl8oBTJOKU4LESIAiJk6rP7DwJnrNDmtDhTYkxXfCPIU4KNs\n7bW2JOQOiAR/stPAPZnvrAhaBqM3kw4yK3WwVhIDoQq74+PP3XVeLhrOx+ncp/rS\naJFNzLTfTHPR/KtzxFL1rIgpzQKBgQDA9Uxsd7TR5EvQQm18puPWRTPzziAlHhJr\nNNrEWr6YyAlWkGfu1y4JHaXGm12sRhqh+iwt2lRsxYa2Ue0sucHPDfzt5c075UzE\nQ8YWTiC7dVcHQ/9LbG4W+fmUBsJPlPJPs2hmKTTw2/MGRgfpBTNdRBCgqh5HnVUR\nZCIHEq61iwKBgELZWAgqHioUXdo0tiuixRPdIA5aUNLkqLTdpealiz5TqpkzE5KE\nxA5h2twELm3tVLJ+nnkGl7jfTlbTc2YUzlQH+EsNT/UQg1gOixbA8u/P+DdefVZH\nTWV9YAlrG8nj08SGKyTEqwj7EXFLlmPGwXCq1irY0a64wntnbJJCNW65AoGATmNY\nqLf4vUwBgJl74SfrZyC1+lXCuVF+Kg9O0HYM+ARLxt7jWiQQj6N7tTNo2pOgPi1j\nxTztD0MvduHReFn+Yh9MoVi6B5sflJvz3RvgMEd7E3iMPhfOoYbr3TbhuXLI/Zfk\n0Zvr5e10zRemHwP92eXM23hA1NcVt/r11+m/EAECgYEA+AAxyEaaTv63j2PImwvO\nKsqtzpHsf97PbsVnj6A9UAGXm80vU3678X8OdJAw0zFlub7LqcL7ses9MXHgxJmb\n7WYWWJSt6phDXgrQeBx9imLZpPywQKCg2Xsstum9veCyfGB6UHfvDWPK8vIF15lz\nV0IUN4EnE6YsG9dbeYEGX+0=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-e05xh@nirvana-for-business.iam.gserviceaccount.com",
"client_id": "109842603410185922994",
"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/firebase-adminsdk-e05xh%40nirvana-for-business.iam.gserviceaccount.com"
}
+2030 -12
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -10,6 +10,7 @@
"dependencies": {
"antd": "^4.18.3",
"firebase": "^9.6.2",
"firebase-admin": "^10.0.1",
"next": "12.0.7",
"react": "17.0.2",
"react-dom": "17.0.2",
+34
View File
@@ -0,0 +1,34 @@
import { credential } from 'firebase-admin';
import { initializeApp } from 'firebase-admin/app';
import { NextApiRequest, NextApiResponse } from 'next';
import serviceAccount from '../../../nirvana-for-business-firebase-adminsdk.json'
initializeApp({
credential: credential.cert({
privateKey: serviceAccount.private_key,
clientEmail: serviceAccount.client_email,
projectId: serviceAccount.project_id,
})
});
export default validateToken = async (req: NextApiRequest, res: NextApiResponse) => {
console.log('Validating token...');
try {
const { token } = JSON.parse(req.headers.authorization || '{}');
if (!token) {
return res.status(403).send({
errorCode: 403,
message: 'Auth token missing.'
});
}
const result = await validate(token);
return res.status(200).send(result);
} catch (err) {
return res.status(err.code).send({
errorCode: err.code,
message: err.message,
});
}
}
-30
View File
@@ -1,30 +0,0 @@
import { useAuth } from "../../contexts/authContext"
import { useRouter } from "next/router"
import { useEffect } from "react"
/**
* figure out where to take the user based on everything
*/
function RouteHandler() {
const { currUser, logOut } = useAuth()
const router = useRouter()
useEffect(() => {
// if not authenticated, take user to the login
if (!currUser) {
console.log('not authenticated...routing from dashboard to teams home')
router.push('/teams/login')
}
}, [currUser])
return (
<div className="text-white">this is the route handler page</div>
)
}
export async function getServerSideProps() {
// Pass data to the page via props
return { props: { } }
}
export default RouteHandler
+51
View File
@@ -0,0 +1,51 @@
import { useAuth } from "../../contexts/authContext"
import { useRouter } from "next/router"
import { useEffect } from "react"
import UserService from '../../services/userService'
import { User } from "../../models/user"
import { GetServerSidePropsContext } from "next"
/**
* figure out where to take the user based on everything
*/
function RouteHandler({ user }) {
const { currUser, logOut } = useAuth()
const router = useRouter()
useEffect(() => {
// if not authenticated, take user to the login
if (!currUser) {
console.log('not authenticated...routing from dashboard to teams home')
router.push('/teams/login')
}
// if user has no profile, then go to create profile
}, [currUser])
return (
<div className="text-black">this is the route handler page</div>
)
}
export async function getServerSideProps(context: GetServerSidePropsContext) {
// get user data
const userService: UserService = new UserService()
var user: User | null = null
try {
user = await userService.getUser("asdf")
} catch(error) {
console.log(error)
}
// Pass data to the page via props
return { props: {
user
}
}
}
export default RouteHandler
View File
+11 -3
View File
@@ -11,8 +11,11 @@
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import * as firebase from 'firebase/app';
import { getAnalytics } from "firebase/analytics";
import { getFirestore } from "firebase/firestore";
import { browserSessionPersistence, getAuth, setPersistence } from 'firebase/auth';
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
@@ -29,5 +32,10 @@ const firebaseConfig = {
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
const app = firebase.initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
console.log('initialized firebase')
setPersistence(getAuth(), browserSessionPersistence)
+36 -4
View File
@@ -1,5 +1,37 @@
class UserService {
}
import { User as FirUser } from "firebase/auth";
import { Firestore, getFirestore, doc, getDoc } from "firebase/firestore";
import { User } from '../models/user'
export {}
export default class UserService {
private db : Firestore = getFirestore()
private static collectionName: string = "users"
constructor() {
}
// give back the avatar based on the person's google account avatar or if they set one then
getUserAvatar(firstName: string, lastName: string, avatar: string = null) {
if (avatar) {
return avatar
}
return `https://ui-avatars.com/api/?name=${firstName}+${lastName}`
}
async getUser(userId: string) : Promise<User | null> {
const docRef = doc(this.db, UserService.collectionName, userId);
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log("Document data:", docSnap.data());
let user: User = docSnap.data() as User
return user
} else {
// doc.data() will be undefined in this case
console.log("user not found!");
return null
}
}
}