Everything I have
This commit is contained in:
parent
3be3b83712
commit
4b2fb40d6f
49
package-lock.json
generated
49
package-lock.json
generated
|
@ -1017,6 +1017,19 @@
|
||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/anymatch/node_modules/picomatch": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/arg": {
|
"node_modules/arg": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
||||||
|
@ -1817,6 +1830,19 @@
|
||||||
"node": ">=8.6"
|
"node": ">=8.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/micromatch/node_modules/picomatch": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/mini-svg-data-uri": {
|
"node_modules/mini-svg-data-uri": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
|
||||||
|
@ -2007,13 +2033,15 @@
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/picomatch": {
|
"node_modules/picomatch": {
|
||||||
"version": "2.3.1",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
|
||||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.6"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
@ -2698,6 +2726,19 @@
|
||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tailwindcss/node_modules/picomatch": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
|
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
|
||||||
"version": "6.1.2",
|
"version": "6.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "test",
|
"name": "fin-check-front",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
24
src/hooks.server.ts
Normal file
24
src/hooks.server.ts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// import type { Handle, HandleFetch } from "@sveltejs/kit";
|
||||||
|
import type { HandleFetch } from "@sveltejs/kit";
|
||||||
|
|
||||||
|
// export const handle: Handle = async ({ event, resolve }) => {
|
||||||
|
// console.log("handle Function")
|
||||||
|
// return await resolve(event)
|
||||||
|
// }
|
||||||
|
|
||||||
|
console.log("in hooks file: 1")
|
||||||
|
export const handleFetch: HandleFetch = async ({ request, fetch }) => {
|
||||||
|
console.log(request)
|
||||||
|
console.log("handleFetch triggered for URL:", request.url);
|
||||||
|
console.log("in handleFetch: 2")
|
||||||
|
if (request.url.startsWith("https://api.fin.qowevisa.click/api")) {
|
||||||
|
request = new Request(
|
||||||
|
request.url.replace("https://api.fin.qowevisa.click/api", "http://localhost:3000/api"),
|
||||||
|
request
|
||||||
|
)
|
||||||
|
};
|
||||||
|
console.log(request)
|
||||||
|
console.log("in handleFetch: 3")
|
||||||
|
|
||||||
|
return fetch(request);
|
||||||
|
};
|
|
@ -1,7 +1,7 @@
|
||||||
// src/lib/api.ts
|
// src/lib/api.ts
|
||||||
|
|
||||||
// Define the base URL of your API
|
// Define the base URL of your API
|
||||||
const BASE_API_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:3111/api';
|
const BASE_API_URL = import.meta.env.VITE_API_BASE_URL_SERVER || 'http://localhost:3111/api';
|
||||||
|
|
||||||
// Interface for the login response
|
// Interface for the login response
|
||||||
interface LoginResponse {
|
interface LoginResponse {
|
||||||
|
@ -20,6 +20,7 @@ interface UserData {
|
||||||
// Generic function for making API requests
|
// Generic function for making API requests
|
||||||
export async function apiFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {
|
export async function apiFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {
|
||||||
const url = `${BASE_API_URL}${endpoint}`;
|
const url = `${BASE_API_URL}${endpoint}`;
|
||||||
|
console.log("Fetching ", url)
|
||||||
|
|
||||||
const defaultHeaders = {
|
const defaultHeaders = {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
@ -57,6 +58,7 @@ export async function login(username: string, password: string): Promise<LoginRe
|
||||||
// Get user data function with type annotation for the response
|
// Get user data function with type annotation for the response
|
||||||
export async function getUserData(token: string): Promise<UserData> {
|
export async function getUserData(token: string): Promise<UserData> {
|
||||||
return apiFetch<UserData>('/user/me', {
|
return apiFetch<UserData>('/user/me', {
|
||||||
|
credentials: 'include',
|
||||||
headers: { Authorization: `Bearer ${token}` },
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,23 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import '../app.css';
|
import '../app.css';
|
||||||
let { children } = $props();
|
let { children } = $props();
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
// import { goto } from '$app/navigation';
|
||||||
|
|
||||||
|
// $effect(()=>{
|
||||||
|
// if (!isAuthenticated && $page.url.pathname != "/login"){
|
||||||
|
// // goto("/login")
|
||||||
|
// }
|
||||||
|
// });
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{#if $page.url.pathname != "/login"}
|
||||||
|
<nav>
|
||||||
|
<a href="/ping">ping</a>
|
||||||
|
<a href="/test">test</a>
|
||||||
|
<a href="/test2">test2</a>
|
||||||
|
<a href="/login">login</a>
|
||||||
|
</nav>
|
||||||
|
{/if}
|
||||||
|
|
||||||
{@render children()}
|
{@render children()}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<h1>Welcome to SvelteKit1</h1>
|
|
||||||
<p>
|
<p>
|
||||||
Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the
|
<a href="/ping">ping</a>
|
||||||
documentation123213
|
<a href="/test">test</a>
|
||||||
|
<a href="/test2">test2</a>
|
||||||
|
<a href="/login">login</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
38
src/routes/api/auth/login/+server.js
Normal file
38
src/routes/api/auth/login/+server.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
// src/routes/api/auth/login/+server.ts
|
||||||
|
import { json } from '@sveltejs/kit';
|
||||||
|
import { login } from '$lib/api';
|
||||||
|
|
||||||
|
export async function POST({ request, cookies }) {
|
||||||
|
console.log("in POST1")
|
||||||
|
const authToken = request.headers.get('App-Token');
|
||||||
|
console.log("authToken = ", authToken)
|
||||||
|
console.log("it should be = ", import.meta.env.VITE_AUTH_APP_TOKEN)
|
||||||
|
if (authToken !== import.meta.env.VITE_AUTH_APP_TOKEN) {
|
||||||
|
return json({ error: 'Forbidden' }, { status: 403 });
|
||||||
|
}
|
||||||
|
console.log("in POST2")
|
||||||
|
const { username, password } = await request.json();
|
||||||
|
|
||||||
|
console.log("in POST3")
|
||||||
|
try {
|
||||||
|
console.log("in POST4")
|
||||||
|
const loginResponse = await login(username, password); // Call the backend login
|
||||||
|
console.log("loginResponse = ", loginResponse)
|
||||||
|
|
||||||
|
const session = loginResponse.headers.get("Set-Cookie");
|
||||||
|
|
||||||
|
// Set cookie securely on the server
|
||||||
|
cookies.set('session', loginResponse.token, {
|
||||||
|
httpOnly: true, // Prevents JavaScript access
|
||||||
|
secure: process.env.NODE_ENV === 'production', // Only send over HTTPS in production
|
||||||
|
sameSite: 'Strict', // Ensures the cookie is only sent in a first-party context
|
||||||
|
maxAge: 3600 // Expiry time in seconds (e.g., 1 hour)
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("in POST5")
|
||||||
|
return json({ id: loginResponse.id, name: loginResponse.name }); // Return necessary data
|
||||||
|
} catch (error) {
|
||||||
|
return json({ error: error.message }, { status: 401 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<script>
|
<script>
|
||||||
import { login } from "$lib/api";
|
|
||||||
import { addSuccessToast } from "$lib/components/store";
|
import { addSuccessToast } from "$lib/components/store";
|
||||||
import Toasts from "$lib/components/Toasts.svelte";
|
import Toasts from "$lib/components/Toasts.svelte";
|
||||||
let username = $state("");
|
let username = $state("");
|
||||||
|
@ -14,8 +13,18 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const resp = await login(username, password);
|
const resp = await fetch("/api/auth/login", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"App-Token": import.meta.env.VITE_AUTH_APP_TOKEN,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ username, password }),
|
||||||
|
credentials: "include", // Important to send cookies with requests
|
||||||
|
});
|
||||||
addSuccessToast("Login successful!");
|
addSuccessToast("Login successful!");
|
||||||
|
// setToken(resp.token);
|
||||||
|
// goto("/test");
|
||||||
console.log(resp);
|
console.log(resp);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err instanceof Error) {
|
if (err instanceof Error) {
|
||||||
|
@ -25,8 +34,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$inspect("username = ", username);
|
|
||||||
$inspect("password = ", password);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Toasts />
|
<Toasts />
|
||||||
|
|
47
src/routes/test/+page.svelte
Normal file
47
src/routes/test/+page.svelte
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<script>
|
||||||
|
import { addSuccessToast } from "$lib/components/store";
|
||||||
|
import Toasts from "$lib/components/Toasts.svelte";
|
||||||
|
|
||||||
|
function testNotification() {
|
||||||
|
console.log("Tested!");
|
||||||
|
addSuccessToast("Test string", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test2() {
|
||||||
|
addSuccessToast("Test string", false);
|
||||||
|
const resp = await fetch("https://api.fin.qowevisa.click/api/ping");
|
||||||
|
// const resp = await fetch("http://localhost:3000/api/ping");
|
||||||
|
if (resp.ok) {
|
||||||
|
console.log(await resp.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test3() {
|
||||||
|
fetch("http://localhost:3000/api/ping")
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then(console.log)
|
||||||
|
.catch(console.error);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Toasts />
|
||||||
|
<div class="flex justify-center items-center min-h-screen bg-gray-100">
|
||||||
|
<button
|
||||||
|
onclick={testNotification}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me!
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onclick={test2}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me2!
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onclick={test3}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me3!
|
||||||
|
</button>
|
||||||
|
</div>
|
9
src/routes/test2/+page.server.js
Normal file
9
src/routes/test2/+page.server.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
export async function load({ fetch }) {
|
||||||
|
const response = await fetch("https://api.fin.qowevisa.click/api/authping", {
|
||||||
|
credentials: "include",
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
message: await response.json()
|
||||||
|
};
|
||||||
|
}
|
46
src/routes/test2/+page.svelte
Normal file
46
src/routes/test2/+page.svelte
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<script>
|
||||||
|
import { addSuccessToast } from "$lib/components/store";
|
||||||
|
import Toasts from "$lib/components/Toasts.svelte";
|
||||||
|
let { data } = $props();
|
||||||
|
|
||||||
|
function testNotification() {
|
||||||
|
console.log("Tested!");
|
||||||
|
addSuccessToast("Test string", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test2() {
|
||||||
|
addSuccessToast("Test string", false);
|
||||||
|
const resp = await fetch("https://api.fin.qowevisa.click/api/ping");
|
||||||
|
// const resp = await fetch("http://localhost:3000/api/ping");
|
||||||
|
if (resp.ok) {
|
||||||
|
console.log(await resp.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test3() {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Toasts />
|
||||||
|
<p>{data.message.message}</p>
|
||||||
|
<div class="flex justify-center items-center min-h-screen bg-gray-100">
|
||||||
|
<button
|
||||||
|
onclick={testNotification}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me!
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onclick={test2}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me2!
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onclick={test3}
|
||||||
|
class="w-1/6 bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 rounded-md focus:outline-none focus:ring focus:ring-blue-300"
|
||||||
|
>
|
||||||
|
Click Me3!
|
||||||
|
</button>
|
||||||
|
</div>
|
|
@ -2,5 +2,5 @@ import { sveltekit } from '@sveltejs/kit/vite';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [sveltekit()]
|
plugins: [sveltekit()],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user