| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  | import type {NextApiRequest, NextApiResponse} from 'next'; | 
					
						
							| 
									
										
										
										
											2021-06-11 00:03:48 +00:00
										 |  |  | import {getSession} from "next-auth/client"; | 
					
						
							| 
									
										
										
										
											2021-06-11 00:14:36 +00:00
										 |  |  | import prisma from "../../../../lib/prisma"; | 
					
						
							| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | const client_id = process.env.ZOOM_CLIENT_ID; | 
					
						
							|  |  |  | const client_secret = process.env.ZOOM_CLIENT_SECRET; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default async function handler(req: NextApiRequest, res: NextApiResponse) { | 
					
						
							|  |  |  |     const { code } = req.query; | 
					
						
							| 
									
										
										
										
											2021-06-11 00:03:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  |     // Check that user is authenticated
 | 
					
						
							| 
									
										
										
										
											2021-06-11 00:03:48 +00:00
										 |  |  |     const session = await getSession({req: req}); | 
					
						
							| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (!session) { res.status(401).json({message: 'You must be logged in to do this'}); return; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-13 12:04:03 +00:00
										 |  |  |     const redirectUri = encodeURI(process.env.BASE_URL + '/api/integrations/zoomvideo/callback'); | 
					
						
							| 
									
										
										
										
											2021-06-11 00:03:48 +00:00
										 |  |  |     const authHeader = 'Basic ' + Buffer.from(client_id + ':' + client_secret).toString('base64'); | 
					
						
							| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 00:07:02 +00:00
										 |  |  |     return new Promise( async (resolve, reject) => { | 
					
						
							| 
									
										
										
										
											2021-06-11 00:13:02 +00:00
										 |  |  |       const result = await fetch('https://zoom.us/oauth/token?grant_type=authorization_code&code=' + code + '&redirect_uri=' + redirectUri, { | 
					
						
							| 
									
										
										
										
											2021-06-11 00:10:56 +00:00
										 |  |  |           method: 'POST', | 
					
						
							|  |  |  |           headers: { | 
					
						
							|  |  |  |               Authorization: authHeader | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2021-06-11 00:14:36 +00:00
										 |  |  |         .then(res => res.json()); | 
					
						
							| 
									
										
										
										
											2021-06-11 00:07:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 00:17:22 +00:00
										 |  |  |       await prisma.credential.create({ | 
					
						
							| 
									
										
										
										
											2021-06-11 00:07:02 +00:00
										 |  |  |         data: { | 
					
						
							| 
									
										
										
										
											2021-06-13 11:59:40 +00:00
										 |  |  |           type: 'zoom_video', | 
					
						
							| 
									
										
										
										
											2021-06-11 00:32:07 +00:00
										 |  |  |           key: result, | 
					
						
							| 
									
										
										
										
											2021-06-11 00:07:02 +00:00
										 |  |  |           userId: session.user.id | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-06-11 00:14:36 +00:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2021-06-11 00:07:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       res.redirect('/integrations'); | 
					
						
							|  |  |  |       resolve(); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-06-10 23:37:58 +00:00
										 |  |  | } |