You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
import cookie from 'cookie';
|
|
import { Amplify, withSSRContext } from 'aws-amplify';
|
|
import type { GetSession, Handle } from '@sveltejs/kit';
|
|
|
|
Amplify.configure({
|
|
Auth: {
|
|
region: import.meta.env.VITE_STUFFLOG3_AWS_POOL_REGION,
|
|
userPoolId: import.meta.env.VITE_STUFFLOG3_AWS_POOL_ID,
|
|
userPoolWebClientId: import.meta.env.VITE_STUFFLOG3_AWS_POOL_CLIENT_ID,
|
|
},
|
|
ssr: true,
|
|
});
|
|
|
|
|
|
export const getSession: GetSession = ({ locals, request }) => {
|
|
return {
|
|
idToken: locals.idToken,
|
|
req: { headers: { cookie: request.headers.get("Cookie") } }
|
|
};
|
|
};
|
|
|
|
export const handle: Handle = async({ event, resolve }) => {
|
|
const {Auth} = withSSRContext({
|
|
req: { headers: { cookie: event.request.headers.get("Cookie") } }
|
|
});
|
|
|
|
const newCookies = {};
|
|
|
|
try {
|
|
const curr = await Auth.currentAuthenticatedUser();
|
|
event.locals.idToken = curr.signInUserSession?.idToken?.jwtToken;
|
|
|
|
const store = curr?.storage?.store || {};
|
|
const cookies = cookie.parse(event.request.headers.get("Cookie"));
|
|
for (const key in store) {
|
|
if (store[key] != cookies[key]) {
|
|
newCookies[key] = store[key]
|
|
console.log("Updating", key, store[key]?.slice(-8), cookies[key]?.slice(-8));
|
|
}
|
|
}
|
|
} catch(err) {
|
|
console.warn(err)
|
|
}
|
|
|
|
const response = await resolve(event);
|
|
|
|
for (const key in newCookies) {
|
|
response.headers.append("Set-Cookie", cookie.serialize(key, newCookies[key]))
|
|
}
|
|
|
|
return response;
|
|
}
|