diff --git a/packages/api/env/auth/.env b/packages/api/env/auth/.env index 9d4d60626..2f525b9bc 100644 --- a/packages/api/env/auth/.env +++ b/packages/api/env/auth/.env @@ -2,4 +2,6 @@ DEVMODE=1 OAUTH_AUTH=http://auth.metrostav.vychozi.cz/auth/realms/metrostav/protocol/openid-connect/auth OAUTH_TOKEN=http://auth.metrostav.vychozi.cz/auth/realms/metrostav/protocol/openid-connect/token OAUTH_CLIENT_ID=dbgate -OAUTH_CLIENT_SECRET=ffd5634b-b60a-4c3a-bbec-b4144c73ea2a \ No newline at end of file +OAUTH_CLIENT_SECRET=ffd5634b-b60a-4c3a-bbec-b4144c73ea2a +OAUTH_LOGIN_FIELD=given_name +OAUTH_ALLOWED_LOGINS=Student1 \ No newline at end of file diff --git a/packages/api/src/controllers/auth.js b/packages/api/src/controllers/auth.js index 8d91da83e..e6d36bb72 100644 --- a/packages/api/src/controllers/auth.js +++ b/packages/api/src/controllers/auth.js @@ -58,6 +58,10 @@ module.exports = { const payload = jwt.decode(access_token); + const login = process.env.OAUTH_LOGIN_FIELD ? payload[process.env.OAUTH_LOGIN_FIELD] : 'oauth'; + + console.log(payload); + if (access_token) { return { accessToken: jwt.sign({ user: 'oauth' }, tokenSecret, { expiresIn: '1m' }), diff --git a/packages/web/src/LoginPage.svelte b/packages/web/src/LoginPage.svelte new file mode 100644 index 000000000..705d8321b --- /dev/null +++ b/packages/web/src/LoginPage.svelte @@ -0,0 +1,97 @@ + + +
+
DbGate
+
+ +
+
Log In
+ + + + +
+ { + console.log('log in', e); + }} + /> +
+
+
+
+
+ + diff --git a/packages/web/src/NotLoggedPage.svelte b/packages/web/src/NotLoggedPage.svelte new file mode 100644 index 000000000..6c314b50f --- /dev/null +++ b/packages/web/src/NotLoggedPage.svelte @@ -0,0 +1,18 @@ + + +
Sorry, you are not authorized to run DbGate
+ + diff --git a/packages/web/src/clientAuth.ts b/packages/web/src/clientAuth.ts index 71c1b9220..5b9a304a9 100644 --- a/packages/web/src/clientAuth.ts +++ b/packages/web/src/clientAuth.ts @@ -19,7 +19,7 @@ export function handleOauthCallback() { sessionStorage.removeItem('oauthState'); apiCall('auth/oauth-token', { code: sentCode, - redirectUri: location.origin, + redirectUri: location.origin + location.pathname, }).then(authResp => { const { accessToken } = authResp; localStorage.setItem('accessToken', accessToken); @@ -50,7 +50,7 @@ export async function redirectToLogin(config = null) { console.log('Redirecting to OAUTH provider'); location.replace( `${config.oauth}?client_id=dbgate&response_type=code&redirect_uri=${encodeURIComponent( - location.origin + location.origin + location.pathname )}&state=${encodeURIComponent(state)}` ); } diff --git a/packages/web/src/main.ts b/packages/web/src/main.ts index 337d547c1..2bfcb4749 100644 --- a/packages/web/src/main.ts +++ b/packages/web/src/main.ts @@ -4,18 +4,40 @@ import './utility/changeCurrentDbByTab'; import './commands/stdCommands'; import localStorageGarbageCollector from './utility/localStorageGarbageCollector'; import { handleOauthCallback } from './clientAuth'; +import LoginPage from './LoginPage.svelte'; +import NotLoggedPage from './NotLoggedPage.svelte'; const isOauthCallback = handleOauthCallback(); +const params = new URLSearchParams(location.search); +const page = params.get('page'); + localStorageGarbageCollector(); -const app = isOauthCallback - ? null - : new App({ - target: document.body, - props: {}, - }); +function createApp() { + if (isOauthCallback) { + return null; + } -// const app = null; + switch (page) { + case 'login': + return new LoginPage({ + target: document.body, + props: {}, + }); + case 'not-logged': + return new NotLoggedPage({ + target: document.body, + props: {}, + }); + } + + return new App({ + target: document.body, + props: {}, + }); +} + +const app = createApp(); export default app;