diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 9bf83f1be..c99dd13ed 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -8,7 +8,6 @@ "name": "carboncode_nextjs", "version": "0.1.0", "dependencies": { - "@fief/fief": "^0.15.0", "@radix-ui/react-dialog": "^1.1.14", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-label": "^2.1.7", @@ -236,16 +235,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fief/fief": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@fief/fief/-/fief-0.15.0.tgz", - "integrity": "sha512-lY3mk3/+U1gxijh+7BGU4CdmR6eaWyo9j/kNODPzsciL5CpOfDJayX7DFo3wYkISeUcjDFWpav245Kv2cHVZAw==", - "dependencies": { - "encoding": "^0.1.13", - "jose": "^5.4.0", - "path-to-regexp": "^6.2.1" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -3401,14 +3390,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/es-abstract": { "version": "1.23.9", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", @@ -4523,17 +4504,6 @@ "node": ">= 0.4" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5028,14 +4998,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5649,11 +5611,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6268,11 +6225,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", diff --git a/webapp/package.json b/webapp/package.json index 1d984f26c..8ea26a2fd 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -10,7 +10,6 @@ "lint": "next lint" }, "dependencies": { - "@fief/fief": "^0.15.0", "@radix-ui/react-dialog": "^1.1.14", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-label": "^2.1.7", diff --git a/webapp/src/app/(dashboard)/profile/page.tsx b/webapp/src/app/(dashboard)/profile/page.tsx index 60d5a9ee9..0aad4f7c7 100644 --- a/webapp/src/app/(dashboard)/profile/page.tsx +++ b/webapp/src/app/(dashboard)/profile/page.tsx @@ -2,11 +2,11 @@ import ErrorMessage from "@/components/error-message"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; -import { fiefAuth } from "@/helpers/fief"; import { User } from "@/types/user"; async function getUser(): Promise { - const userId = await fiefAuth.getUserId(); + // TODO: implement without fief + const userId = null; if (!userId) { return null; } diff --git a/webapp/src/app/layout.tsx b/webapp/src/app/layout.tsx index 76fd18f2e..217fb44de 100644 --- a/webapp/src/app/layout.tsx +++ b/webapp/src/app/layout.tsx @@ -1,6 +1,4 @@ "use client"; - -import { FiefAuthProvider } from "@fief/fief/nextjs/react"; import { IBM_Plex_Mono } from "next/font/google"; import "./globals.css"; import { SWRProvider } from "../helpers/swr"; @@ -19,23 +17,15 @@ export default function RootLayout({ {/* suppressHydrationWarning is a Next theme recommendation */} - - - {children} - - - + {children} + + diff --git a/webapp/src/components/navbar.tsx b/webapp/src/components/navbar.tsx index 8ae42cc63..2894a1a84 100644 --- a/webapp/src/components/navbar.tsx +++ b/webapp/src/components/navbar.tsx @@ -251,18 +251,20 @@ export default function NavBar({ onClose={() => setNewOrgModalOpen(false)} onOrganizationCreated={refreshOrgList} /> - { - setSelected("profile"); - setSheetOpened?.(false); - window.location.href = USER_PROFILE_URL!; // Redirect to Fief profile to handle profile updates there - }} - paddingY={1.5} - icon={} - > - Profile - + {USER_PROFILE_URL && ( + { + setSelected("profile"); + setSheetOpened?.(false); + window.location.href = USER_PROFILE_URL!; // Redirect to Fief profile to handle profile updates there + }} + paddingY={1.5} + icon={} + > + Profile + + )} { setSheetOpened?.(false); diff --git a/webapp/src/helpers/api-server.ts b/webapp/src/helpers/api-server.ts index ee1ec2c21..0a610ad5d 100644 --- a/webapp/src/helpers/api-server.ts +++ b/webapp/src/helpers/api-server.ts @@ -1,7 +1,7 @@ "use server"; import { cookies } from "next/headers"; -import { SESSION_COOKIE_NAME } from "./fief"; +import { SESSION_COOKIE_NAME } from "./auth"; const API_BASE = process.env.NEXT_PUBLIC_API_URL; diff --git a/webapp/src/helpers/auth.ts b/webapp/src/helpers/auth.ts new file mode 100644 index 000000000..69bdd06c7 --- /dev/null +++ b/webapp/src/helpers/auth.ts @@ -0,0 +1 @@ +export const SESSION_COOKIE_NAME = "user_session"; diff --git a/webapp/src/helpers/fief.ts b/webapp/src/helpers/fief.ts deleted file mode 100644 index 9fd50e2c5..000000000 --- a/webapp/src/helpers/fief.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Fief, FiefUserInfo } from "@fief/fief"; -import { FiefAuth, IUserInfoCache } from "@fief/fief/nextjs"; - -export const SESSION_COOKIE_NAME = "user_session"; - -export const fiefClient = new Fief({ - baseURL: process.env.FIEF_BASE_URL as string, - clientId: process.env.FIEF_CLIENT_ID as string, - clientSecret: process.env.FIEF_CLIENT_SECRET as string, - requestInit: { next: { revalidate: 3600 } }, -}); - -class MemoryUserInfoCache implements IUserInfoCache { - private storage: Record; - - constructor() { - this.storage = {}; - } - - async get(id: string): Promise { - const userinfo = this.storage[id]; - if (userinfo) { - return userinfo; - } - return null; - } - - async set(id: string, userinfo: FiefUserInfo): Promise { - this.storage[id] = userinfo; - } - - async remove(id: string): Promise { - this.storage[id] = undefined; - } - - async clear(): Promise { - this.storage = {}; - } -} - -export const fiefAuth = new FiefAuth({ - client: fiefClient, - sessionCookieName: SESSION_COOKIE_NAME, - redirectURI: `${process.env.NEXT_PUBLIC_API_URL}/auth/login`, - returnToDefault: `${process.env.NEXT_PUBLIC_BASE_URL}/home?auth=true`, - logoutRedirectURI: `${process.env.NEXT_PUBLIC_BASE_URL}`, - userInfoCache: new MemoryUserInfoCache(), -}); diff --git a/webapp/src/middleware.ts b/webapp/src/middleware.ts index 472995f54..4251a2463 100644 --- a/webapp/src/middleware.ts +++ b/webapp/src/middleware.ts @@ -1,15 +1,5 @@ import type { NextRequest } from "next/server"; -import { fiefAuth } from "./helpers/fief"; - -const authMiddleware = fiefAuth.middleware([ - { - matcher: - "/((?!api|_next/static|_next/image|favicon.ico|icons/|public/).*)", - parameters: {}, - }, -]); - export async function middleware(request: NextRequest) { const pathname = request.nextUrl.pathname; @@ -21,6 +11,4 @@ export async function middleware(request: NextRequest) { ) { return; } - - return authMiddleware(request); }