Commit b53145b0 authored by Lê Bảo Hồng Đức's avatar Lê Bảo Hồng Đức

[tag]0.1-vcci

parents 1189286d 88ac0a9e
Pipeline #50761 passed with stages
in 2 minutes and 48 seconds
...@@ -22,15 +22,15 @@ const nextConfig: NextConfig = { ...@@ -22,15 +22,15 @@ const nextConfig: NextConfig = {
}, },
{ {
protocol: "https", protocol: "https",
hostname: "vccihcm.vn", hostname: "news.vccihcm.vn",
port: "", port: "",
pathname: "/images/**", pathname: "/uploads/**",
}, },
{ {
protocol: "https", protocol: "https",
hostname: "news.vccihcm.vn", hostname: "vccihcm.vn",
port: "", port: "",
pathname: "/uploads/**", pathname: "/images/**",
}, },
], ],
}, },
......
...@@ -22,6 +22,26 @@ const extractUploadPath = (pathname: string) => { ...@@ -22,6 +22,26 @@ const extractUploadPath = (pathname: string) => {
return null; return null;
}; };
const normalizeUploadPath = (pathname: string) => {
if (pathname.includes("/api/uploads/")) {
return pathname.replace(/^.*\/api\/uploads\//, "/uploads/");
}
if (pathname.includes("/images/")) {
return pathname.replace(/^.*\/images\//, "/uploads/images/");
}
if (pathname.includes("/uploads/")) {
return pathname.replace(/^.*\/uploads\//, "/uploads/");
}
if (pathname.includes("/wp-content/uploads/")) {
return pathname.replace(/^.*\/wp-content\/uploads\//, "/uploads/");
}
return pathname;
};
const readOrigin = (key: "NEXT_PUBLIC_BACKEND_HOST" | "NEXT_PUBLIC_FRONTEND_HOST") => { const readOrigin = (key: "NEXT_PUBLIC_BACKEND_HOST" | "NEXT_PUBLIC_FRONTEND_HOST") => {
const envOrigin = normalizeOrigin( const envOrigin = normalizeOrigin(
key === "NEXT_PUBLIC_BACKEND_HOST" key === "NEXT_PUBLIC_BACKEND_HOST"
...@@ -71,18 +91,19 @@ export const resolveUploadUrl = (value?: string | null) => { ...@@ -71,18 +91,19 @@ export const resolveUploadUrl = (value?: string | null) => {
const trimmed = value?.trim(); const trimmed = value?.trim();
if (!trimmed) return ""; if (!trimmed) return "";
if ( if (trimmed.startsWith("blob:") || trimmed.startsWith("data:")) {
trimmed.startsWith("http://") ||
trimmed.startsWith("https://") ||
trimmed.startsWith("blob:") ||
trimmed.startsWith("data:")
) {
return trimmed; return trimmed;
} }
if (/^https?:\/\//i.test(trimmed)) { if (/^https?:\/\//i.test(trimmed)) {
try { try {
const url = new URL(trimmed); const url = new URL(trimmed);
const normalizedPath = normalizeUploadPath(url.pathname);
if (normalizedPath !== url.pathname) {
return backendOrigin ? `${backendOrigin}${normalizedPath}` : normalizedPath;
}
if (LEGACY_MEDIA_HOSTS.has(url.hostname)) { if (LEGACY_MEDIA_HOSTS.has(url.hostname)) {
const uploadPath = extractUploadPath(url.pathname); const uploadPath = extractUploadPath(url.pathname);
if (uploadPath) { if (uploadPath) {
...@@ -100,17 +121,22 @@ export const resolveUploadUrl = (value?: string | null) => { ...@@ -100,17 +121,22 @@ export const resolveUploadUrl = (value?: string | null) => {
if ( if (
trimmed.startsWith("/uploads/") || trimmed.startsWith("/uploads/") ||
trimmed.startsWith("/api/uploads/") || trimmed.startsWith("/api/uploads/") ||
trimmed.startsWith("/images/") trimmed.startsWith("/images/") ||
trimmed.startsWith("/wp-content/uploads/")
) { ) {
const cleanPath = trimmed.replace(/^\/+/, "").replace(/^api\/uploads\//, "uploads/"); const cleanPath = normalizeUploadPath(trimmed).replace(/^\/+/, "");
return backendOrigin ? `${backendOrigin}/${cleanPath}` : `/${cleanPath}`; return backendOrigin ? `${backendOrigin}/${cleanPath}` : `/${cleanPath}`;
} }
return trimmed; return trimmed;
} }
const cleanPath = trimmed.replace(/^\/+/, "").replace(/^api\/uploads\//, "uploads/"); const cleanPath = normalizeUploadPath(trimmed).replace(/^\/+/, "");
if (cleanPath.startsWith("uploads/") || cleanPath.startsWith("images/")) { if (
cleanPath.startsWith("uploads/") ||
cleanPath.startsWith("images/") ||
cleanPath.startsWith("wp-content/uploads/")
) {
return backendOrigin ? `${backendOrigin}/${cleanPath}` : `/${cleanPath}`; return backendOrigin ? `${backendOrigin}/${cleanPath}` : `/${cleanPath}`;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment