diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e144f8d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +summerizer.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..684b75e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM ubuntu:latest +LABEL authors="hzhang" + +ENTRYPOINT ["top", "-b"] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0964988..e8afce5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "oidc-client-ts": "^3.1.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^7.0.1" @@ -4521,6 +4522,14 @@ "node": ">=6" } }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4829,6 +4838,17 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, + "node_modules/oidc-client-ts": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/oidc-client-ts/-/oidc-client-ts-3.1.0.tgz", + "integrity": "sha512-IDopEXjiwjkmJLYZo6BTlvwOtnlSniWZkKZoXforC/oLZHC9wkIxd25Kwtmo5yKFMMVcsp3JY6bhcNJqdYk8+g==", + "dependencies": { + "jwt-decode": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", diff --git a/package.json b/package.json index db92e28..d26a0b7 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "author": "", "license": "ISC", "dependencies": { + "oidc-client-ts": "^3.1.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^7.0.1" diff --git a/src/AuthProvider.js b/src/AuthProvider.js new file mode 100644 index 0000000..668d852 --- /dev/null +++ b/src/AuthProvider.js @@ -0,0 +1,30 @@ +import React, { createContext, useEffect, useState } from "react"; +import { UserManager } from "oidc-client-ts"; +import {oidcConfig} from "./oicdConfig"; + + +export const AuthContext = createContext(); + +const AuthProvider = ({ children }) => { + const [user, setUser] = useState(null); + const userManager = new UserManager(oidcConfig); + + useEffect(() => { + userManager.getUser().then((user) => { + if (user && !user.expired) { + setUser(user); + } + }); + }, [userManager]); + + const login = () => userManager.signinRedirect(); + const logout = () => userManager.signoutRedirect(); + + return ( + + {children} + + ); +}; + +export default AuthProvider; \ No newline at end of file diff --git a/src/Callback.js b/src/Callback.js new file mode 100644 index 0000000..7e8a466 --- /dev/null +++ b/src/Callback.js @@ -0,0 +1,17 @@ +import React, { useEffect } from "react"; +import { UserManager } from "oidc-client-ts"; +import {oidcConfig} from "./oicdConfig"; + + +const Callback = () => { + useEffect(() => { + const userManager = new UserManager(oidcConfig); + userManager.signinRedirectCallback().then(() => { + window.location.href = "/"; + }); + }, []); + + return
Logging in...
; +}; + +export default Callback; \ No newline at end of file diff --git a/src/components/MainNavigation.js b/src/components/MainNavigation.js index 2e41d65..34e6b04 100644 --- a/src/components/MainNavigation.js +++ b/src/components/MainNavigation.js @@ -1,16 +1,28 @@ //src/components/MainNavigation.js -import React from "react"; +import React, {useContext} from "react"; import { Link } from "react-router-dom"; import "./MainNavigation.css"; +import {AuthContext} from "../AuthProvider"; const MainNavigation = () => { + const { user, login, logout } = useContext(AuthContext); return (