Fixes zoom expiry date (#1315)
* Fixes zoom expiry date * Ensure backwards compatibility with old zoom connections Co-authored-by: Bailey Pumfleet <pumfleet@hey.com>
This commit is contained in:
		
							parent
							
								
									c2a60657d4
								
							
						
					
					
						commit
						5c5d9d3406
					
				
					 2 changed files with 14 additions and 6 deletions
				
			
		|  | @ -60,7 +60,8 @@ export interface ZoomEventResult { | ||||||
| 
 | 
 | ||||||
| interface ZoomToken { | interface ZoomToken { | ||||||
|   scope: "meeting:write"; |   scope: "meeting:write"; | ||||||
|   expires_in: number; |   expiry_date: number; | ||||||
|  |   expires_in?: number; // deprecated, purely for backwards compatibility; superseeded by expiry_date.
 | ||||||
|   token_type: "bearer"; |   token_type: "bearer"; | ||||||
|   access_token: string; |   access_token: string; | ||||||
|   refresh_token: string; |   refresh_token: string; | ||||||
|  | @ -68,7 +69,7 @@ interface ZoomToken { | ||||||
| 
 | 
 | ||||||
| const zoomAuth = (credential: Credential) => { | const zoomAuth = (credential: Credential) => { | ||||||
|   const credentialKey = credential.key as unknown as ZoomToken; |   const credentialKey = credential.key as unknown as ZoomToken; | ||||||
|   const isExpired = (expiryDate: number) => expiryDate < +new Date(); |   const isExpired = (expiryDate: number) => expiryDate < Date.now(); | ||||||
|   const authHeader = |   const authHeader = | ||||||
|     "Basic " + |     "Basic " + | ||||||
|     Buffer.from(process.env.ZOOM_CLIENT_ID + ":" + process.env.ZOOM_CLIENT_SECRET).toString("base64"); |     Buffer.from(process.env.ZOOM_CLIENT_ID + ":" + process.env.ZOOM_CLIENT_SECRET).toString("base64"); | ||||||
|  | @ -87,6 +88,9 @@ const zoomAuth = (credential: Credential) => { | ||||||
|     }) |     }) | ||||||
|       .then(handleErrorsJson) |       .then(handleErrorsJson) | ||||||
|       .then(async (responseBody) => { |       .then(async (responseBody) => { | ||||||
|  |         // set expiry date as offset from current time.
 | ||||||
|  |         responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000); | ||||||
|  |         delete responseBody.expires_in; | ||||||
|         // Store new tokens in database.
 |         // Store new tokens in database.
 | ||||||
|         await prisma.credential.update({ |         await prisma.credential.update({ | ||||||
|           where: { |           where: { | ||||||
|  | @ -96,14 +100,14 @@ const zoomAuth = (credential: Credential) => { | ||||||
|             key: responseBody, |             key: responseBody, | ||||||
|           }, |           }, | ||||||
|         }); |         }); | ||||||
|  |         credentialKey.expiry_date = responseBody.expiry_date; | ||||||
|         credentialKey.access_token = responseBody.access_token; |         credentialKey.access_token = responseBody.access_token; | ||||||
|         credentialKey.expires_in = Math.round(+new Date() / 1000 + responseBody.expires_in); |  | ||||||
|         return credentialKey.access_token; |         return credentialKey.access_token; | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|   return { |   return { | ||||||
|     getToken: () => |     getToken: () => | ||||||
|       !isExpired(credentialKey.expires_in) |       !isExpired(credentialKey.expires_in || credentialKey.expiry_date) | ||||||
|         ? Promise.resolve(credentialKey.access_token) |         ? Promise.resolve(credentialKey.access_token) | ||||||
|         : refreshAccessToken(credentialKey.refresh_token), |         : refreshAccessToken(credentialKey.refresh_token), | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  | @ -30,7 +30,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) | ||||||
|       }, |       }, | ||||||
|     } |     } | ||||||
|   ); |   ); | ||||||
|   const json = await result.json(); | 
 | ||||||
|  |   const responseBody = await result.json(); | ||||||
|  | 
 | ||||||
|  |   responseBody.expiry_date = Math.round(Date.now() + responseBody.expires_in * 1000); | ||||||
|  |   delete responseBody.expires_in; | ||||||
| 
 | 
 | ||||||
|   await prisma.user.update({ |   await prisma.user.update({ | ||||||
|     where: { |     where: { | ||||||
|  | @ -40,7 +44,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) | ||||||
|       credentials: { |       credentials: { | ||||||
|         create: { |         create: { | ||||||
|           type: "zoom_video", |           type: "zoom_video", | ||||||
|           key: json, |           key: responseBody, | ||||||
|         }, |         }, | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Alex van Andel
						Alex van Andel