mig
This commit is contained in:
@@ -751,5 +751,79 @@ class IntegrationViewSet(SiteSectorModelViewSet):
|
||||
status.HTTP_400_BAD_REQUEST,
|
||||
request
|
||||
)
|
||||
|
||||
@action(detail=False, methods=['post'], url_path='generate-api-key')
|
||||
def generate_api_key(self, request):
|
||||
"""
|
||||
Generate a new API key for a site's WordPress integration.
|
||||
|
||||
POST /api/v1/integration/integrations/generate-api-key/
|
||||
|
||||
Body:
|
||||
{
|
||||
"site_id": 5
|
||||
}
|
||||
"""
|
||||
site_id = request.data.get('site_id')
|
||||
if not site_id:
|
||||
return error_response(
|
||||
'Site ID is required',
|
||||
None,
|
||||
status.HTTP_400_BAD_REQUEST,
|
||||
request
|
||||
)
|
||||
|
||||
try:
|
||||
site = Site.objects.get(id=site_id)
|
||||
except Site.DoesNotExist:
|
||||
return error_response(
|
||||
f'Site with ID {site_id} not found',
|
||||
None,
|
||||
status.HTTP_404_NOT_FOUND,
|
||||
request
|
||||
)
|
||||
|
||||
# Generate API key with format: igny8_site_{site_id}_{timestamp}_{random}
|
||||
import time
|
||||
import random
|
||||
import string
|
||||
|
||||
timestamp = int(time.time() * 1000)
|
||||
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
|
||||
api_key = f"igny8_site_{site_id}_{timestamp}_{random_suffix}"
|
||||
|
||||
# Get or create SiteIntegration
|
||||
integration, created = SiteIntegration.objects.get_or_create(
|
||||
site=site,
|
||||
defaults={
|
||||
'integration_type': 'wordpress',
|
||||
'is_active': True,
|
||||
'credentials_json': {'api_key': api_key},
|
||||
'config_json': {}
|
||||
}
|
||||
)
|
||||
|
||||
# If integration already exists, update the API key
|
||||
if not created:
|
||||
credentials = integration.get_credentials()
|
||||
credentials['api_key'] = api_key
|
||||
integration.credentials_json = credentials
|
||||
integration.save()
|
||||
|
||||
logger.info(
|
||||
f"Generated new API key for site {site.name} (ID: {site_id}), "
|
||||
f"integration {'created' if created else 'updated'}"
|
||||
)
|
||||
|
||||
# Serialize the integration with the new key
|
||||
serializer = self.get_serializer(integration)
|
||||
|
||||
return success_response({
|
||||
'integration': serializer.data,
|
||||
'api_key': api_key,
|
||||
'message': f"API key {'generated' if created else 'regenerated'} successfully",
|
||||
}, request=request)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user