Add webhook management command
Handles managing stripe webhooks
This commit is contained in:
		
					parent
					
						
							
								c6db34efdd
							
						
					
				
			
			
				commit
				
					
						50043f8283
					
				
			
		
					 1 changed files with 81 additions and 0 deletions
				
			
		
							
								
								
									
										81
									
								
								webhook/management/commands/webhook.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								webhook/management/commands/webhook.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,81 @@ | ||||||
|  | import logging | ||||||
|  | 
 | ||||||
|  | import stripe | ||||||
|  | from django.core.management.base import BaseCommand | ||||||
|  | 
 | ||||||
|  | logger = logging.getLogger(__name__) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Command(BaseCommand): | ||||||
|  |     help = '''creates webhook with the supplied arguments and returns the  | ||||||
|  |     webhook secret | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     def add_arguments(self, parser): | ||||||
|  |         parser.add_argument( | ||||||
|  |             '--webhook_endpoint', | ||||||
|  |             help="The url of the webhook endpoint that accepts the events " | ||||||
|  |                  "from stripe", | ||||||
|  |             dest="webhook_endpoint", | ||||||
|  |             required=False | ||||||
|  |         ) | ||||||
|  |         parser.add_argument('--events_csv', dest="events_csv", required=False) | ||||||
|  |         parser.add_argument('--webhook_id', dest="webhook_id", required=False) | ||||||
|  |         parser.add_argument('--create', dest='create', action='store_true') | ||||||
|  |         parser.add_argument('--list', dest='list', action='store_true') | ||||||
|  |         parser.add_argument('--delete', dest='delete', action='store_true') | ||||||
|  | 
 | ||||||
|  |     def handle(self, *args, **options): | ||||||
|  |         wep_exists = False | ||||||
|  |         if options['list']: | ||||||
|  |             logger.debug("Listing webhooks") | ||||||
|  |             we_list = stripe.WebhookEndpoint.list(limit=100) | ||||||
|  |             for wep in we_list.data: | ||||||
|  |                 msg = wep.id + " -- " + ",".join(wep.enabled_events) | ||||||
|  |                 logger.debug(msg) | ||||||
|  |                 self.stdout.write( | ||||||
|  |                     self.style.SUCCESS(msg) | ||||||
|  |                 ) | ||||||
|  |         elif options['delete']: | ||||||
|  |             logger.debug("Deleting webhook") | ||||||
|  |             if 'webhook_id' in options: | ||||||
|  |                 stripe.WebhookEndpoint.delete(options['webhook_id']) | ||||||
|  |                 msg = "Deleted " + options['webhook_id'] | ||||||
|  |                 logger.debug(msg) | ||||||
|  |                 self.stdout.write( | ||||||
|  |                     self.style.SUCCESS(msg) | ||||||
|  |                 ) | ||||||
|  |             else: | ||||||
|  |                 msg = "Supply webhook_id to delete a webhook" | ||||||
|  |                 logger.debug(msg) | ||||||
|  |                 self.stdout.write( | ||||||
|  |                     self.style.SUCCESS(msg) | ||||||
|  |                 ) | ||||||
|  |                 exit(0) | ||||||
|  |         elif options['create']: | ||||||
|  |             logger.debug("Creating webhook") | ||||||
|  |             try: | ||||||
|  |                 we_list = stripe.WebhookEndpoint.list(limit=100) | ||||||
|  |                 for wep in we_list.data: | ||||||
|  |                     if set(wep.enabled_events) == set(options['events_csv'].split(",")): | ||||||
|  |                         if wep.url == options['webhook_endpoint']: | ||||||
|  |                             logger.debug("We have this webhook already") | ||||||
|  |                             wep_exists = True | ||||||
|  |                             break | ||||||
|  |                 if wep_exists is False: | ||||||
|  |                     logger.debug( | ||||||
|  |                         "No webhook exists for {} at {}. Creatting a new endpoint " | ||||||
|  |                         "now".format( | ||||||
|  |                             options['webhook_endpoint'], options['events_csv'] | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|  |                     wep = stripe.WebhookEndpoint.create( | ||||||
|  |                         url=options['webhook_endpoint'], | ||||||
|  |                         enabled_events=options['events_csv'].split(",") | ||||||
|  |                     ) | ||||||
|  |                     self.stdout.write( | ||||||
|  |                         self.style.SUCCESS('Creation successful. ' | ||||||
|  |                                            'webhook_secret = %s' % wep.secret) | ||||||
|  |                     ) | ||||||
|  |             except Exception as e: | ||||||
|  |                 print(" *** Error occurred. Details {}".format(str(e))) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue