Fix missing authentication check for invite revocation (#1666)
* Fix missing authentication check for invite revocation * Toast invite revocation error
This commit is contained in:
		
							parent
							
								
									55d1f2c952
								
							
						
					
					
						commit
						0837460c53
					
				| @ -1,7 +1,7 @@ | |||||||
| import { inviteSchema, validateSchema } from '@/lib/validate' | import { inviteSchema, validateSchema } from '@/lib/validate' | ||||||
| import { msatsToSats } from '@/lib/format' | import { msatsToSats } from '@/lib/format' | ||||||
| import assertApiKeyNotPermitted from './apiKey' | import assertApiKeyNotPermitted from './apiKey' | ||||||
| import { GqlAuthenticationError } from '@/lib/error' | import { GqlAuthenticationError, GqlInputError } from '@/lib/error' | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
|   Query: { |   Query: { | ||||||
| @ -46,10 +46,17 @@ export default { | |||||||
|         throw new GqlAuthenticationError() |         throw new GqlAuthenticationError() | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       return await models.invite.update({ |       try { | ||||||
|         where: { id }, |         return await models.invite.update({ | ||||||
|         data: { revoked: true } |           where: { id, userId: me.id }, | ||||||
|       }) |           data: { revoked: true } | ||||||
|  |         }) | ||||||
|  |       } catch (err) { | ||||||
|  |         if (err.code === 'P2025') { | ||||||
|  |           throw new GqlInputError('invite not found') | ||||||
|  |         } | ||||||
|  |         throw err | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ import { CopyInput } from './form' | |||||||
| import { gql, useMutation } from '@apollo/client' | import { gql, useMutation } from '@apollo/client' | ||||||
| import { INVITE_FIELDS } from '@/fragments/invites' | import { INVITE_FIELDS } from '@/fragments/invites' | ||||||
| import styles from '@/styles/invites.module.css' | import styles from '@/styles/invites.module.css' | ||||||
|  | import { useToast } from '@/components/toast' | ||||||
| 
 | 
 | ||||||
| export default function Invite ({ invite, active }) { | export default function Invite ({ invite, active }) { | ||||||
|   const [revokeInvite] = useMutation( |   const [revokeInvite] = useMutation( | ||||||
| @ -13,6 +14,7 @@ export default function Invite ({ invite, active }) { | |||||||
|         } |         } | ||||||
|       }` |       }` | ||||||
|   ) |   ) | ||||||
|  |   const toaster = useToast() | ||||||
| 
 | 
 | ||||||
|   return ( |   return ( | ||||||
|     <div |     <div | ||||||
| @ -33,7 +35,13 @@ export default function Invite ({ invite, active }) { | |||||||
|               <span> \ </span> |               <span> \ </span> | ||||||
|               <span |               <span | ||||||
|                 className={styles.revoke} |                 className={styles.revoke} | ||||||
|                 onClick={() => revokeInvite({ variables: { id: invite.id } })} |                 onClick={async () => { | ||||||
|  |                   try { | ||||||
|  |                     await revokeInvite({ variables: { id: invite.id } }) | ||||||
|  |                   } catch (err) { | ||||||
|  |                     toaster.danger(err.message) | ||||||
|  |                   } | ||||||
|  |                 }} | ||||||
|               >revoke |               >revoke | ||||||
|               </span> |               </span> | ||||||
|             </>) |             </>) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user