Merge branch 'dev' of github.com:fosrl/pangolin into dev

This commit is contained in:
Owen
2025-08-04 20:02:08 -07:00
51 changed files with 1691 additions and 237 deletions

View File

@@ -734,7 +734,7 @@ export default function Page() {
<Link
className="text-sm text-primary flex items-center gap-1"
href="https://docs.fossorial.io/Pangolin/tcp-udp"
href="https://docs.digpangolin.com/manage/resources/tcp-udp-resources"
target="_blank"
rel="noopener noreferrer"
>

View File

@@ -64,7 +64,7 @@ export const SitesSplashCard = () => {
<div className="mt-4">
<Link
href="https://docs.fossorial.io/Newt/install"
href="https://docs.digpangolin.com/manage/sites/install-site"
target="_blank"
rel="noopener noreferrer"
>

View File

@@ -65,7 +65,7 @@ export default function GeneralPage() {
defaultValues: {
name: site?.name,
dockerSocketEnabled: site?.dockerSocketEnabled ?? false,
remoteSubnets: site?.remoteSubnets
remoteSubnets: site?.remoteSubnets
? site.remoteSubnets.split(',').map((subnet, index) => ({
id: subnet.trim(),
text: subnet.trim()
@@ -144,7 +144,7 @@ export default function GeneralPage() {
</FormItem>
)}
/>
<FormField
control={form.control}
name="remoteSubnets"
@@ -208,7 +208,7 @@ export default function GeneralPage() {
"enableDockerSocketDescription"
)}{" "}
<Link
href="https://docs.fossorial.io/Newt/overview#docker-socket-integration"
href="https://docs.digpangolin.com/manage/sites/configure-site#docker-socket-integration"
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline inline-flex items-center"

View File

@@ -326,7 +326,7 @@ export default function PoliciesPage() {
{/*TODO(vlalx): Validate replacing */}
{t('orgPoliciesAboutDescription')}{" "}
<Link
href="https://docs.fossorial.io/Pangolin/Identity%20Providers/auto-provision"
href="https://docs.digpangolin.com/manage/identity-providers/auto-provisioning"
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline"

View File

@@ -59,9 +59,14 @@ export default async function ResourceAuthPage(props: {
try {
const serverResourceHost = new URL(authInfo.url).host;
const redirectHost = new URL(searchParams.redirect).host;
const redirectPort = new URL(searchParams.redirect).port;
const serverResourceHostWithPort = `${serverResourceHost}:${redirectPort}`;
if (serverResourceHost === redirectHost) {
redirectUrl = searchParams.redirect;
} else if ( serverResourceHostWithPort === redirectHost ) {
redirectUrl = searchParams.redirect;
}
} catch (e) {}
}

View File

@@ -126,7 +126,7 @@ export function LayoutSidebar({
</div>
<div className="text-xs text-muted-foreground ">
<Link
href="https://docs.fossorial.io/"
href="https://docs.digpangolin.com/"
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center gap-1"

View File

@@ -219,7 +219,7 @@ export default function SupporterStatus({ isCollapsed = false }: SupporterStatus
</Link>{" "}
{t('supportKeyPurchase2')}{" "}
<Link
href="https://docs.fossorial.io/supporter-program"
href="https://docs.digpangolin.com/self-host/supporter-program"
target="_blank"
rel="noopener noreferrer"
className="underline"

View File

@@ -1,16 +1,36 @@
'use server';
import {cookies} from 'next/headers';
import {Locale, defaultLocale} from '@/i18n/config';
import { cookies, headers } from 'next/headers';
import { Locale, defaultLocale, locales } from '@/i18n/config';
// In this example the locale is read from a cookie. You could alternatively
// also read it from a database, backend service, or any other source.
const COOKIE_NAME = 'NEXT_LOCALE';
export async function getUserLocale() {
return (await cookies()).get(COOKIE_NAME)?.value || defaultLocale;
export async function getUserLocale(): Promise<Locale> {
const cookieLocale = (await cookies()).get(COOKIE_NAME)?.value;
if (cookieLocale && locales.includes(cookieLocale as Locale)) {
return cookieLocale as Locale;
}
const headerList = await headers();
const acceptLang = headerList.get('accept-language');
if (acceptLang) {
const browserLang = acceptLang.split(',')[0];
const matched = locales.find((locale) =>
browserLang.toLowerCase().startsWith(locale.split('-')[0].toLowerCase())
);
if (matched) {
return matched;
}
}
return defaultLocale;
}
export async function setUserLocale(locale: Locale) {
(await cookies()).set(COOKIE_NAME, locale);
}