From a9d0f625eba7cf686f2d8bbb40e53ffc414be7e9 Mon Sep 17 00:00:00 2001 From: rvdkeere Date: Fri, 15 Mar 2024 00:39:21 +0100 Subject: [PATCH] login pagina v1 (fetch token zonder redirect) --- frontend/package-lock.json | 293 ++++++++++++++++++++- frontend/package.json | 3 +- frontend/src/assets/images/delphi_full.png | Bin 0 -> 38105 bytes frontend/src/pages/login/LoginScreen.tsx | 66 ++++- frontend/vite.config.ts | 7 +- 5 files changed, 365 insertions(+), 4 deletions(-) create mode 100644 frontend/src/assets/images/delphi_full.png diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 721f50cd..3dcfbef9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,7 +26,8 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "typescript": "^5.2.2", - "vite": "^5.1.4" + "vite": "^5.1.4", + "vite-plugin-mkcert": "^1.17.4" }, "engines": { "node": "^20.0.0" @@ -998,6 +999,161 @@ "node": ">= 8" } }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", + "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", + "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "dev": true, + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "dev": true, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/request": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", + "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/rest": { + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", + "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "dev": true, + "dependencies": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@remix-run/router": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", @@ -1690,6 +1846,12 @@ "has-symbols": "^1.0.3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1705,12 +1867,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1854,6 +2033,18 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1943,6 +2134,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2641,6 +2847,26 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2650,6 +2876,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3532,6 +3772,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -3872,6 +4133,12 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4588,6 +4855,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -4682,6 +4955,24 @@ } } }, + "node_modules/vite-plugin-mkcert": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.4.tgz", + "integrity": "sha512-P/B/tXhsUdpFO4Go1f2obu8WL3xxA3lbsbz4YzflbWfqWl15uwFiXaiCCBztJu1f4WnilrdXYihGrGT9jU743A==", + "dev": true, + "dependencies": { + "@octokit/rest": "^20.0.2", + "axios": "^1.6.5", + "debug": "^4.3.4", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=v16.7.0" + }, + "peerDependencies": { + "vite": ">=3" + } + }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 249a7efa..6ddddf53 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -31,6 +31,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "typescript": "^5.2.2", - "vite": "^5.1.4" + "vite": "^5.1.4", + "vite-plugin-mkcert": "^1.17.4" } } diff --git a/frontend/src/assets/images/delphi_full.png b/frontend/src/assets/images/delphi_full.png new file mode 100644 index 0000000000000000000000000000000000000000..08e33c637f5b5700e081496e2a1c0e97815535ca GIT binary patch literal 38105 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 voPhcVA8O7m{k|T^38>%K_c>?&2YcXu}e literal 0 HcmV?d00001 diff --git a/frontend/src/pages/login/LoginScreen.tsx b/frontend/src/pages/login/LoginScreen.tsx index b109f9af..553369d7 100644 --- a/frontend/src/pages/login/LoginScreen.tsx +++ b/frontend/src/pages/login/LoginScreen.tsx @@ -1,7 +1,71 @@ import {JSX} from "react"; +import { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import apiFetch from "../../utils/ApiFetch"; +import delphi_full from '../../assets/images/delphi_full.png'; export default function LoginScreen(): JSX.Element { + const location = useLocation(); + const [ticket, setTicket] = useState(''); + const [token, setToken] = useState(''); + + useEffect(() => { + // console.log('hello from', location); + const params = new URLSearchParams(location.search); + const ticket = params.get('ticket'); + if (ticket) { + setTicket(ticket); + } + }, [location]); + + // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(() => { + async function loginUser(ticket: string) { + await apiFetch(`/api/login?ticket=${ticket}`, { + // await fetch(`http://127.0.0.1:8000/api/login?ticket=${ticket}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + .then(response => response.json()) + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + // .then(data => sessionStorage.setItem('token', data.token)); + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access + .then(data => setToken(data.token)); //TODO do something with this token + } + if (ticket) { + console.log('ticket:', ticket); + void loginUser(ticket).then(r => console.log(r)); + } + }, [ticket]); + return ( - <>Login screen + ) } \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 5a33944a..78a9d3f1 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,7 +1,12 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import mkcert from 'vite-plugin-mkcert' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [react(), mkcert()], + server: { + port: 8080, // nodig voor CAS + https: true + }, })