Fix stuff to not prematurely initialize Firebase when imported

This commit is contained in:
Marshall Polaris 2022-08-19 17:27:47 -07:00
parent 03d98a7ad7
commit ba23e69ec1
2 changed files with 7 additions and 10 deletions

View File

@ -23,13 +23,8 @@ type JwtCredentials = { kind: 'jwt'; data: admin.auth.DecodedIdToken }
type KeyCredentials = { kind: 'key'; data: string }
type Credentials = JwtCredentials | KeyCredentials
const auth = admin.auth()
const firestore = admin.firestore()
const privateUsers = firestore.collection(
'private-users'
) as admin.firestore.CollectionReference<PrivateUser>
export const parseCredentials = async (req: Request): Promise<Credentials> => {
const auth = admin.auth()
const authHeader = req.get('Authorization')
if (!authHeader) {
throw new APIError(403, 'Missing Authorization header.')
@ -57,6 +52,8 @@ export const parseCredentials = async (req: Request): Promise<Credentials> => {
}
export const lookupUser = async (creds: Credentials): Promise<AuthedUser> => {
const firestore = admin.firestore()
const privateUsers = firestore.collection('private-users')
switch (creds.kind) {
case 'jwt': {
if (typeof creds.data.user_id !== 'string') {
@ -70,7 +67,7 @@ export const lookupUser = async (creds: Credentials): Promise<AuthedUser> => {
if (privateUserQ.empty) {
throw new APIError(403, `No private user exists with API key ${key}.`)
}
const privateUser = privateUserQ.docs[0].data()
const privateUser = privateUserQ.docs[0].data() as PrivateUser
return { uid: privateUser.id, creds: { privateUser, ...creds } }
}
default:

View File

@ -21,6 +21,7 @@ const bodySchema = z.object({
})
export const creategroup = newEndpoint({}, async (req, auth) => {
const firestore = admin.firestore()
const { name, about, memberIds, anyoneCanJoin } = validate(
bodySchema,
req.body
@ -67,7 +68,7 @@ export const creategroup = newEndpoint({}, async (req, auth) => {
return { status: 'success', group: group }
})
const getSlug = async (name: string) => {
export const getSlug = async (name: string) => {
const proposedSlug = slugify(name)
const preexistingGroup = await getGroupFromSlug(proposedSlug)
@ -75,9 +76,8 @@ const getSlug = async (name: string) => {
return preexistingGroup ? proposedSlug + '-' + randomString() : proposedSlug
}
const firestore = admin.firestore()
export async function getGroupFromSlug(slug: string) {
const firestore = admin.firestore()
const snap = await firestore
.collection('groups')
.where('slug', '==', slug)