@functionalcms/svelte-components 5.14.0 → 5.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-server.d.ts +2 -2
- package/dist/index-server.js +2 -2
- package/dist/server-side/auth/{user_authentication.d.ts → userAuthenticationHandle.d.ts} +2 -1
- package/dist/server-side/auth/{user_authentication.js → userAuthenticationHandle.js} +13 -28
- package/dist/server-side/auth/userAuthenticationProvider.d.ts +1 -1
- package/dist/server-side/auth/userAuthenticationProvider.js +1 -0
- package/dist/server-side/functionalSequence.d.ts +2 -1
- package/dist/server-side/functionalSequence.js +2 -2
- package/dist/server-side/handlers/accessTokenHandler.d.ts +2 -1
- package/dist/server-side/handlers/accessTokenHandler.js +7 -5
- package/dist/server-side/handlers/userHandler.d.ts +1 -1
- package/dist/server-side/handlers/userHandler.js +6 -15
- package/dist/server-side/tokenToUserParser.d.ts +1 -0
- package/dist/server-side/tokenToUserParser.js +10 -0
- package/package.json +1 -1
- /package/dist/server-side/auth/{machine_authentication.d.ts → machineAuthenticationHandle.d.ts} +0 -0
- /package/dist/server-side/auth/{machine_authentication.js → machineAuthenticationHandle.js} +0 -0
package/dist/index-server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { default as authorizationHandle } from './server-side/auth/authorizationHandle.js';
|
|
2
2
|
export { default as errorHandler } from './server-side/auth/errorHandle.js';
|
|
3
|
-
export {
|
|
4
|
-
export { machineAuthenticationHandle } from './server-side/auth/
|
|
3
|
+
export { userAuthenticationHandle } from './server-side/auth/userAuthenticationHandle.js';
|
|
4
|
+
export { machineAuthenticationHandle } from './server-side/auth/machineAuthenticationHandle.js';
|
|
5
5
|
export { userAuthenticationProvider } from './server-side/auth/userAuthenticationProvider.js';
|
|
6
6
|
export { hookSequence } from './server-side/functionalSequence.js';
|
|
7
7
|
export { sessionStorageHandler } from './server-side/handlers/sessionStorageHandler.js';
|
package/dist/index-server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { default as authorizationHandle } from './server-side/auth/authorizationHandle.js';
|
|
2
2
|
export { default as errorHandler } from './server-side/auth/errorHandle.js';
|
|
3
|
-
export {
|
|
4
|
-
export { machineAuthenticationHandle } from './server-side/auth/
|
|
3
|
+
export { userAuthenticationHandle } from './server-side/auth/userAuthenticationHandle.js';
|
|
4
|
+
export { machineAuthenticationHandle } from './server-side/auth/machineAuthenticationHandle.js';
|
|
5
5
|
export { userAuthenticationProvider } from './server-side/auth/userAuthenticationProvider.js';
|
|
6
6
|
export { hookSequence } from './server-side/functionalSequence.js';
|
|
7
7
|
export { sessionStorageHandler } from './server-side/handlers/sessionStorageHandler.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Handle } from "@sveltejs/kit";
|
|
2
|
+
import { Redis } from "@upstash/redis";
|
|
2
3
|
export type CallbackResponse = {
|
|
3
4
|
access_token: string;
|
|
4
5
|
id_token?: string;
|
|
@@ -13,4 +14,4 @@ export type AuthenticationProvider = {
|
|
|
13
14
|
handleLogin(callbackUrl: URL): Promise<SigninResponse>;
|
|
14
15
|
handleCallback: (state: string, codeVerifier: string, eventUrl: URL) => Promise<CallbackResponse>;
|
|
15
16
|
};
|
|
16
|
-
export declare const
|
|
17
|
+
export declare const userAuthenticationHandle: (secret: string, serverUrl: string, clientId: string, redis: Redis) => Handle;
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { deleteCookie, loadCookie, saveCookie } from "../cookies";
|
|
2
2
|
import { userAuthenticationProvider } from "./userAuthenticationProvider";
|
|
3
|
-
import {
|
|
3
|
+
import { Redis } from "@upstash/redis";
|
|
4
|
+
import { parseJwtToken } from "../tokenToUserParser";
|
|
4
5
|
const pkceCookieName = "functionalcms_pkce";
|
|
5
6
|
const stateCookieName = "functionalcms_state";
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const refreshTokenCookie = "functionalcms_refresh_token";
|
|
9
|
-
export const authenticationHandle = (secret, serverUrl, clientId) => {
|
|
7
|
+
const sessionCookieName = "functionalcms_sessionId";
|
|
8
|
+
export const userAuthenticationHandle = (secret, serverUrl, clientId, redis) => {
|
|
10
9
|
const provider = userAuthenticationProvider(serverUrl, clientId);
|
|
11
10
|
return async ({ event, resolve }) => {
|
|
12
11
|
try {
|
|
13
12
|
if (event.url.pathname === '/auth/callback') {
|
|
14
|
-
const headers = await handleCallback(event, secret, provider);
|
|
13
|
+
const headers = await handleCallback(event, secret, provider, redis);
|
|
15
14
|
return new Response(null, { status: 302, headers });
|
|
16
15
|
}
|
|
17
16
|
else if (event.url.pathname === '/auth/login') {
|
|
@@ -29,22 +28,12 @@ export const authenticationHandle = (secret, serverUrl, clientId) => {
|
|
|
29
28
|
};
|
|
30
29
|
};
|
|
31
30
|
function handleLogout(event) {
|
|
32
|
-
event.cookies.delete(
|
|
33
|
-
event.cookies.delete(idTokenCookie, { path: "/" });
|
|
34
|
-
event.cookies.delete(refreshTokenCookie, { path: "/" });
|
|
31
|
+
event.cookies.delete(sessionCookieName, { path: "/" });
|
|
32
|
+
// event.cookies.delete(idTokenCookie, { path: "/" });
|
|
33
|
+
// event.cookies.delete(refreshTokenCookie, { path: "/" });
|
|
35
34
|
event.locals.user = null;
|
|
36
35
|
event.locals.session = {};
|
|
37
36
|
}
|
|
38
|
-
function parseJwt(token) {
|
|
39
|
-
const base64 = token.split('.')[1]
|
|
40
|
-
.replace(/-/g, '+')
|
|
41
|
-
.replace(/_/g, '/');
|
|
42
|
-
const json = decodeURIComponent(atob(base64)
|
|
43
|
-
.split('')
|
|
44
|
-
.map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
|
45
|
-
.join(''));
|
|
46
|
-
return JSON.parse(json);
|
|
47
|
-
}
|
|
48
37
|
async function handleLogin(event, provider, secret) {
|
|
49
38
|
const callbackUrl = new URL(`${event.url.origin}/auth/callback`);
|
|
50
39
|
const response = await provider.handleLogin(callbackUrl);
|
|
@@ -54,20 +43,16 @@ async function handleLogin(event, provider, secret) {
|
|
|
54
43
|
await saveCookie(headers, secret, stateCookieName, response.state);
|
|
55
44
|
return headers;
|
|
56
45
|
}
|
|
57
|
-
async function handleCallback(event, secret, provider) {
|
|
46
|
+
async function handleCallback(event, secret, provider, redis) {
|
|
58
47
|
const expectedState = await loadCookie(event.cookies, secret, stateCookieName);
|
|
59
48
|
const codeVerifier = await loadCookie(event.cookies, secret, pkceCookieName);
|
|
60
49
|
const response = await provider.handleCallback(expectedState, codeVerifier, event.url);
|
|
61
50
|
const headers = new Headers();
|
|
62
51
|
headers.set('Location', event.url.origin);
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
if (response.refresh_token) {
|
|
69
|
-
await saveCookie(headers, secret, refreshTokenCookie, response.refresh_token);
|
|
70
|
-
}
|
|
52
|
+
const sessionId = crypto.randomUUID();
|
|
53
|
+
const accessToken = parseJwtToken(response.access_token);
|
|
54
|
+
await saveCookie(headers, secret, sessionCookieName, sessionId, accessToken.exp - Math.floor(Date.now() / 1000));
|
|
55
|
+
redis.set(sessionId, JSON.stringify(response.access_token), { ex: accessToken.exp - Math.floor(Date.now() / 1000) });
|
|
71
56
|
await deleteCookie(event.cookies, headers, pkceCookieName);
|
|
72
57
|
await deleteCookie(event.cookies, headers, stateCookieName);
|
|
73
58
|
return headers;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { AuthenticationProvider } from "./
|
|
1
|
+
import type { AuthenticationProvider } from "./userAuthenticationHandle";
|
|
2
2
|
export declare const userAuthenticationProvider: (serverUrl: string, clientId: string) => AuthenticationProvider;
|
|
@@ -21,6 +21,7 @@ export const userAuthenticationProvider = (serverUrl, clientId) => {
|
|
|
21
21
|
authUrl.searchParams.set('state', state);
|
|
22
22
|
authUrl.searchParams.set('code_challenge', code_challenge);
|
|
23
23
|
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
24
|
+
authUrl.searchParams.set('scope', 'openid profile email user.extended properties');
|
|
24
25
|
return { state, codeVerifier: code_verifier, authorisationUrl: authUrl.toString() };
|
|
25
26
|
};
|
|
26
27
|
const handleCallback = async (state, codeVerifier, callbackUrl) => {
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { Handle } from "@sveltejs/kit";
|
|
2
|
-
|
|
2
|
+
import type { Redis } from "@upstash/redis";
|
|
3
|
+
export declare const hookSequence: (secret: string, redis: Redis, paraglideMiddleware: any, getTextDirection: any, settings: any, customHooks: Handle[]) => Handle;
|
|
@@ -5,6 +5,6 @@ import authorizationHandle from "./auth/authorizationHandle";
|
|
|
5
5
|
import { userHandler } from "./handlers/userHandler";
|
|
6
6
|
import { accessTokenHandler } from "./handlers/accessTokenHandler";
|
|
7
7
|
import { sitemapHandle } from "./handlers/sitemapHandler";
|
|
8
|
-
export const hookSequence = (secret, paraglideMiddleware, getTextDirection, settings, customHooks) => {
|
|
9
|
-
return sequence(
|
|
8
|
+
export const hookSequence = (secret, redis, paraglideMiddleware, getTextDirection, settings, customHooks) => {
|
|
9
|
+
return sequence(accessTokenHandler(secret, redis), userHandler(), paraglideHandler(paraglideMiddleware, getTextDirection), authorizationHandle(), sitemapHandle(settings), ...customHooks, errorHandler);
|
|
10
10
|
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {} from '@sveltejs/kit';
|
|
2
2
|
import { loadCookie } from '../cookies';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { Redis } from '@upstash/redis';
|
|
4
|
+
const accessTokenCookie = "functionalcms_sessionId";
|
|
5
|
+
export const accessTokenHandler = (secret, redis) => {
|
|
5
6
|
return async ({ event, resolve }) => {
|
|
6
7
|
try {
|
|
7
|
-
let
|
|
8
|
-
if (
|
|
9
|
-
|
|
8
|
+
let sessionId = await loadCookie(event.cookies, secret, accessTokenCookie);
|
|
9
|
+
if (sessionId) {
|
|
10
|
+
const accessToken = await redis.get(sessionId);
|
|
11
|
+
event.locals.token = accessToken;
|
|
10
12
|
}
|
|
11
13
|
}
|
|
12
14
|
finally {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type Handle } from '@sveltejs/kit';
|
|
2
|
-
export declare const userHandler: (
|
|
2
|
+
export declare const userHandler: () => Handle;
|
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
import {} from '@sveltejs/kit';
|
|
2
2
|
import { loadCookie } from '../cookies';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
8
|
-
// Use TextDecoder (available in Node.js 11+)
|
|
9
|
-
const binString = globalThis.atob(base64);
|
|
10
|
-
const bytes = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
11
|
-
const payload = JSON.parse(new TextDecoder().decode(bytes));
|
|
12
|
-
return payload;
|
|
13
|
-
};
|
|
14
|
-
export const userHandler = (secret) => {
|
|
3
|
+
import { Redis } from '@upstash/redis';
|
|
4
|
+
import { parseJwtToken } from '../tokenToUserParser';
|
|
5
|
+
const accessTokenCookie = "functionalcms_sessionId";
|
|
6
|
+
export const userHandler = () => {
|
|
15
7
|
return async ({ event, resolve }) => {
|
|
16
8
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
let user = await retrieveUser(idToken);
|
|
9
|
+
if (event.locals.token) {
|
|
10
|
+
const user = parseJwtToken(event.locals.token);
|
|
20
11
|
event.locals.user = user;
|
|
21
12
|
}
|
|
22
13
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseJwtToken(token: string): any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function parseJwtToken(token) {
|
|
2
|
+
const base64 = token.split('.')[1]
|
|
3
|
+
.replace(/-/g, '+')
|
|
4
|
+
.replace(/_/g, '/');
|
|
5
|
+
const json = decodeURIComponent(atob(base64)
|
|
6
|
+
.split('')
|
|
7
|
+
.map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
|
8
|
+
.join(''));
|
|
9
|
+
return JSON.parse(json);
|
|
10
|
+
}
|
package/package.json
CHANGED
/package/dist/server-side/auth/{machine_authentication.d.ts → machineAuthenticationHandle.d.ts}
RENAMED
|
File without changes
|
|
File without changes
|