Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions frontend/src/lib/config/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// So far let's keep it simple and log to console

/* eslint-disable @typescript-eslint/no-explicit-any */

interface Logger {
debug(...args: any[]): void;
info(...args: any[]): void;
warn(...args: any[]): void;
error(...args: any[]): void;
}

class ConsoleLogger implements Logger {
debug(...args: any[]): void {
console.debug(...args);
}
info(...args: any[]): void {
console.info(...args);
}
warn(...args: any[]): void {
console.warn(...args);
}
error(...args: any[]): void {
console.error(...args);
}
}

export const logger: Logger = new ConsoleLogger();
2 changes: 2 additions & 0 deletions frontend/src/routes/user/login/LoginForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import { cfg } from '$lib/config/config';
import { userStore } from '$lib/stores';
import type { UserWithTokenResponse } from '$lib/schemas/types';
import { logger } from '$lib/config/logger';

let { goto2fa } = $props();

Expand Down Expand Up @@ -47,6 +48,7 @@
}

toast.error('Login failed, please try again later.');
logger.error('Login error:', error);
} finally {
form.data.password = '';
}
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/routes/user/login/TwoFaForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import { Input } from '$lib/components/ui/input';
import { Button } from '$lib/components/ui/button';
import { Spinner } from '$lib/components/ui/spinner';
import { logger } from '$lib/config/logger';

const { sessionToken } = $props();

Expand Down Expand Up @@ -42,6 +43,7 @@
}

toast.error('Login failed, please try again later.');
logger.error('2FA Login error:', error);
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion frontend/src/routes/user/oauth-callback-google/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import { userStore } from '$lib/stores';
import { getUserProfile } from '$lib/service/authApiService';
import { toast } from 'svelte-sonner';
import { logger } from '$lib/config/logger';

onMount(async () => {
const token = page.url.searchParams.get('token');
Expand All @@ -17,13 +18,15 @@
userStore.login({ ...user, token });
toast.success('Successfully logged in with Google OAuth!');
goto('/', { replaceState: true });
} catch {
} catch (error) {
toast.error('Failed to log in with Google OAuth, please try again.');
logger.error('OAuth login error:', error);
userStore.logout();
goto('/user/login', { replaceState: true });
}
} else {
toast.error('Failed to log in with Google OAuth, please try again.');
logger.error('OAuth callback missing token parameter');
goto('/user/login', { replaceState: true });
}
});
Expand Down
6 changes: 4 additions & 2 deletions frontend/src/routes/user/profile/Friends.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@
import { defaults, setError, superForm } from 'sveltekit-superforms';
import { zod4 } from 'sveltekit-superforms/adapters';
import { userStore } from '$lib/stores';
import { logger } from '$lib/config/logger';

let friends: GetFriendsResponse = [];
let users: UsersResponse = [];

onMount(async () => {
try {
[users, friends] = await Promise.all([getAllUsers(), getFriends()]);
} catch {
} catch (error) {
logger.error('Failed to load friends list:', error);
toast.error('Failed to load friends list');
}
});
Expand Down Expand Up @@ -49,12 +51,12 @@

friends = await getFriends();
} catch (error) {
console.error(error);
if (error instanceof AuthError && (error.status === 400 || error.status === 404)) {
setError(form, 'username', 'Invalid username');
return;
}

logger.error('Failed to add friend:', error);
toast.error('Failed to add friend, please try again later.');
}
}
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/routes/user/profile/ProfileTitle.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import { Spinner } from '$lib/components/ui/spinner';
import type { UpdateUserRequest } from '$lib/schemas/types';
import { fly } from 'svelte/transition';
import { logger } from '$lib/config/logger';

let editing = false;

Expand Down Expand Up @@ -51,6 +52,7 @@
return;
}

logger.error('Avatar update failed:', error);
toast.error('Avatar update failed, please try again later.');
}
}
Expand Down
1 change: 1 addition & 0 deletions frontend/src/routes/user/register/RegisterForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
return;
}

console.error('Registration error:', error);
toast.error('Registration failed, please try again later.');
} finally {
form.data.password = '';
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/routes/user/settings/ChangePasswordForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import { Input } from '$lib/components/ui/input';
import { Button } from '$lib/components/ui/button';
import { Spinner } from '$lib/components/ui/spinner';
import { logger } from '$lib/config/logger';

const { form, constraints, errors, enhance, submitting } = superForm(
defaults(zod4(UpdateUserPasswordFormSchema)),
Expand All @@ -25,7 +26,6 @@

try {
const user = await updatePassword(payload);
console.log(user);

toast.success('Password updated successfully! Redirecting to home page...');
userStore.login(user);
Expand All @@ -34,12 +34,12 @@
goto('/');
}, 0);
} catch (error) {
console.error(error);
if (error instanceof AuthError && error.status === 401) {
setError(form, 'oldPassword', 'Invalid password');
return;
}

logger.error('Password update failed:', error);
toast.error('Login failed, please try again later.');
} finally {
form.data.oldPassword = '';
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/routes/user/settings/DeleteAccount.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import { buttonVariants } from '$lib/components/ui/button/button.svelte';
import * as AlertDialog from '$lib/components/ui/alert-dialog/index.js';
import { Spinner } from '$lib/components/ui/spinner';
import { logger } from '$lib/config/logger';

let deleting = false;

Expand All @@ -17,7 +18,8 @@
toast.success('Account deleted successfully, navigating to home page...');

goto('/');
} catch {
} catch (error) {
logger.error('Failed to delete account:', error);
toast.error('Failed to delete account. Please try again.');
} finally {
deleting = false;
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/routes/user/settings/DisableTwoFa.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import { Input } from '$lib/components/ui/input';
import { Button } from '$lib/components/ui/button';
import { Spinner } from '$lib/components/ui/spinner';
import { logger } from '$lib/config/logger';

const { closeShowTwoFaForm } = $props();

Expand All @@ -34,6 +35,7 @@
return;
}

logger.error('Disabling 2FA error:', error);
toast.error('Disabling 2FA failed, please try again later.');
} finally {
form.data.password = '';
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/routes/user/settings/Logout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { goto } from '$app/navigation';
import { Button } from '$lib/components/ui/button';
import Spinner from '$lib/components/ui/spinner/spinner.svelte';
import { logger } from '$lib/config/logger';
import { logoutUser } from '$lib/service/authApiService';
import { userStore } from '$lib/stores';
import { toast } from 'svelte-sonner';
Expand All @@ -14,10 +15,11 @@
await logoutUser();

toast.success('Logged out successfully, redirecting to home page...');
} catch {
} catch (error) {
toast.warning(
'Failed to log out on server, try to log out locally, redirecting to home page...'
);
logger.error('Logout error:', error);
} finally {
userStore.logout();
logoutInProgress = false;
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/routes/user/settings/TwoFaConfirmForm.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import { Input } from '$lib/components/ui/input';
import { Button } from '$lib/components/ui/button';
import { Spinner } from '$lib/components/ui/spinner';
import { logger } from '$lib/config/logger';

const { twoFaSetupData, closeShowTwoFaForm } = $props();

Expand Down Expand Up @@ -50,6 +51,7 @@
return;
}

logger.error('Enabling 2FA error:', error);
toast.error('Enabling 2FA failed, please try again later.');
} finally {
form.data.twoFaCode = '';
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/routes/user/settings/TwoFaSetup.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import type { TwoFaSetupResponse } from '$lib/schemas/types';
import TwoFaConfirmForm from './TwoFaConfirmForm.svelte';
import { fly } from 'svelte/transition';
import { logger } from '$lib/config/logger';

$: twoFaEnabled = $userStore.user?.twoFa ?? false;
let showTwoFaForm = false;
Expand All @@ -15,7 +16,8 @@
const twoFaHandler = async () => {
try {
twoFaSetupData = await startTwoFaSetup();
} catch {
} catch (error) {
logger.error('Failed to start 2FA setup:', error);
toast.error('Failed to start 2FA setup, please try again later.');
}
};
Expand Down