Skip to content

Commit dfeb277

Browse files
authored
Handle empty url and oauth_host on login page (#5434)
1 parent af5ae4f commit dfeb277

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

web/src/views/Login.vue

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,23 @@
2323
<h1 class="text-wp-text-100 text-xl">{{ $t('login_to_woodpecker_with') }}</h1>
2424
<div class="flex flex-col gap-2">
2525
<Button
26-
v-for="forge in forges"
26+
v-for="forge in forgesWithNameAndFavicon"
2727
:key="forge.id"
2828
:start-icon="forge.type === 'addon' ? 'repo' : forge.type"
2929
class="whitespace-normal!"
3030
@click="doLogin(forge.id)"
3131
>
3232
<div class="mr-2 w-4">
3333
<img
34-
v-if="!failedForgeFavicons.has(forge.id)"
35-
:src="getFaviconUrl(forge)"
36-
:alt="$t('login_to_woodpecker_with', { forge: getHostFromUrl(forge) })"
34+
v-if="forge.favicon && !failedForgeFavicons.has(forge.id)"
35+
:src="forge.favicon"
36+
:alt="$t('login_to_woodpecker_with', { forge: forge.name })"
3737
@error="() => failedForgeFavicons.add(forge.id)"
3838
/>
3939
<Icon v-else :name="forge.type === 'addon' ? 'repo' : forge.type" />
4040
</div>
4141

42-
{{ getHostFromUrl(forge) }}
42+
{{ forge.name }}
4343
</Button>
4444
</div>
4545
</div>
@@ -103,18 +103,24 @@ onMounted(async () => {
103103
104104
useWPTitle(computed(() => [i18n.t('login')]));
105105
106-
function getHostFromUrl(forge: Forge) {
107-
if (!forge.url && !forge.oauth_host) {
108-
return forge.type.charAt(0).toUpperCase() + forge.type.slice(1);
109-
}
110-
111-
const url = new URL(forge.oauth_host ?? forge.url);
112-
return url.hostname;
113-
}
114-
115106
const failedForgeFavicons = ref(new Set<number>()); // Track which favicons failed to load
116-
function getFaviconUrl(forge: Forge) {
117-
const url = new URL(forge.oauth_host ?? forge.url);
118-
return `${url.origin}/favicon.ico`;
119-
}
107+
108+
const forgesWithNameAndFavicon = computed(() =>
109+
forges.value.map((forge) => {
110+
let name = forge.type.charAt(0).toUpperCase() + forge.type.slice(1);
111+
let favicon: null | string = null;
112+
113+
if (forge.url || forge.oauth_host) {
114+
const url = new URL(forge.oauth_host || forge.url);
115+
name = url.hostname;
116+
favicon = `${url.origin}/favicon.ico`;
117+
}
118+
119+
return {
120+
...forge,
121+
name,
122+
favicon,
123+
};
124+
}),
125+
);
120126
</script>

0 commit comments

Comments
 (0)