From 3175ffee312696ae78544fc596433409deba3447 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 14 Oct 2025 10:26:14 +0000 Subject: [PATCH] Allow users to upload photos using shared Cloudinary configuration Update routes to use a shared Cloudinary configuration for media uploads and adjust CloudinaryService to fetch any available config instead of user-specific config. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/vZocxw2 --- server/routes.ts | 12 ++++++------ server/services/cloudinary.ts | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/server/routes.ts b/server/routes.ts index f299c1b..a625994 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -467,7 +467,7 @@ export async function registerRoutes(app: Express): Promise { const user = req.user as User; const userId = user.id; - // Check if Cloudinary is configured (use any admin config for all users) + // Check if Cloudinary is configured (shared config used for all users) const cloudinaryConfig = await storage.getAnyCloudinaryConfig(); if (!cloudinaryConfig) { @@ -476,11 +476,11 @@ export async function registerRoutes(app: Express): Promise { }); } - // Upload to Cloudinary using admin config + // Upload to Cloudinary (service will use shared config internally) const uploadResult = await cloudinaryService.uploadMedia( req.file.buffer, req.file.originalname, - cloudinaryConfig.userId, + userId, req.file.mimetype ); @@ -667,7 +667,7 @@ export async function registerRoutes(app: Express): Promise { console.log("✅ Overlays applied, uploading to Cloudinary..."); - // Check if Cloudinary is configured (use any admin config for all users) + // Check if Cloudinary is configured (shared config used for all users) const cloudinaryConfig = await storage.getAnyCloudinaryConfig(); if (!cloudinaryConfig) { return res.status(400).json({ @@ -675,11 +675,11 @@ export async function registerRoutes(app: Express): Promise { }); } - // Upload to Cloudinary using admin config + // Upload to Cloudinary (service will use shared config internally) const uploadResult = await cloudinaryService.uploadMedia( outputBuffer, `edited_${Date.now()}.jpg`, - cloudinaryConfig.userId, + userId, 'image/jpeg' ); diff --git a/server/services/cloudinary.ts b/server/services/cloudinary.ts index 964b6f7..4561317 100644 --- a/server/services/cloudinary.ts +++ b/server/services/cloudinary.ts @@ -14,11 +14,11 @@ class CloudinaryService { instagramFeedUrl: string | null; instagramStoryUrl: string | null; }> { - // Get user's Cloudinary config - const config = await storage.getCloudinaryConfig(userId); + // Get any available Cloudinary config (shared across all users) + const config = await storage.getAnyCloudinaryConfig(); if (!config) { - throw new Error('Cloudinary configuration not found. Please configure Cloudinary in Settings.'); + throw new Error('Cloudinary configuration not found. Please ask an administrator to configure Cloudinary in Settings first.'); } // Configure Cloudinary with user's credentials @@ -81,10 +81,11 @@ class CloudinaryService { } async deleteMedia(publicId: string, userId: string, mediaType: 'image' | 'video'): Promise { - const config = await storage.getCloudinaryConfig(userId); + // Get any available Cloudinary config (shared across all users) + const config = await storage.getAnyCloudinaryConfig(); if (!config) { - throw new Error('Cloudinary configuration not found'); + throw new Error('Cloudinary configuration not found. Please ask an administrator to configure Cloudinary in Settings first.'); } cloudinary.config({