81 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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)))
 |