You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2024/03/08 17:29:51 UTC
(camel-karavan) branch main updated: Login improvement
This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 012fd901 Login improvement
012fd901 is described below
commit 012fd901d30a4489c6aeb7ca4618efeb8776ebef
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Fri Mar 8 12:29:33 2024 -0500
Login improvement
---
.../src/main/resources/application.properties | 4 +-
karavan-app/src/main/webui/src/api/KaravanApi.tsx | 8 ++--
karavan-app/src/main/webui/src/api/ProjectStore.ts | 2 +-
karavan-app/src/main/webui/src/api/SsoApi.tsx | 4 +-
karavan-app/src/main/webui/src/main/Main.tsx | 52 ++++++++++------------
.../src/main/webui/src/main/PageNavigation.tsx | 14 ------
.../src/main/webui/src/main/useMainHook.tsx | 6 +--
7 files changed, 35 insertions(+), 55 deletions(-)
diff --git a/karavan-app/src/main/resources/application.properties b/karavan-app/src/main/resources/application.properties
index 7815c76c..aa43273b 100644
--- a/karavan-app/src/main/resources/application.properties
+++ b/karavan-app/src/main/resources/application.properties
@@ -36,10 +36,10 @@ karavan.docker.network=karavan
# Keycloak configuration
karavan.keycloak.url=http://localhost:8079
-karavan.keycloak.realm=karavan
+karavan.keycloak.realm=talisman
karavan.keycloak.frontend.clientId=frontend
karavan.keycloak.backend.clientId=backend
-karavan.keycloak.backend.secret=backend
+karavan.keycloak.backend.secret=KJTyO4ukg8c3x0TZvG0ZPCerw7jEbze
# Git repository Configuration
karavan.git.repository=http://gitea:3000/karavan/karavan.git
diff --git a/karavan-app/src/main/webui/src/api/KaravanApi.tsx b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index 1738290f..3bdb20f8 100644
--- a/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -38,7 +38,6 @@ export class KaravanApi {
static me?: any;
static authType?: string = undefined;
- static isAuthorized: boolean = false;
static basicToken: string = '';
static getInstance() {
@@ -61,7 +60,7 @@ export class KaravanApi {
}
static setAuthType(authType: string) {
- console.log("setAuthType", authType)
+ console.log("SetAuthType", authType)
KaravanApi.authType = authType;
switch (authType){
case "public": {
@@ -129,7 +128,6 @@ export class KaravanApi {
{headers: {'content-type': 'application/x-www-form-urlencoded'}})
.then(res => {
if (res.status === 200) {
- KaravanApi.isAuthorized = true;
KaravanApi.basicToken = Buffer.from(username + ":" + password).toString('base64');
KaravanApi.setBasicAuthentication();
KaravanApi.getMe(user => {
@@ -177,7 +175,9 @@ export class KaravanApi {
instance.get('/public/auth', {headers: {'Accept': 'text/plain'}})
.then(res => {
if (res.status === 200) {
- KaravanApi.setAuthType(res.data);
+ const authType = res.data;
+ KaravanApi.setAuthType(authType);
+ useAppConfigStore.setState({isAuthorized: authType === 'public'})
after(res.data);
}
}).catch(err => {
diff --git a/karavan-app/src/main/webui/src/api/ProjectStore.ts b/karavan-app/src/main/webui/src/api/ProjectStore.ts
index 5bf4a103..00434f84 100644
--- a/karavan-app/src/main/webui/src/api/ProjectStore.ts
+++ b/karavan-app/src/main/webui/src/api/ProjectStore.ts
@@ -364,7 +364,7 @@ export const useLogStore = createWithEqualityFn<LogState>((set) => ({
},
}), shallow)
-console.log("Start log subscriber");
+console.log("Start Log Subscriber");
const sub = ProjectEventBus.onLog()?.subscribe((result: ["add" | "set", string]) => {
if (result[0] === 'add') {
unstable_batchedUpdates(() => {
diff --git a/karavan-app/src/main/webui/src/api/SsoApi.tsx b/karavan-app/src/main/webui/src/api/SsoApi.tsx
index 9ac7ed61..6bf480c5 100644
--- a/karavan-app/src/main/webui/src/api/SsoApi.tsx
+++ b/karavan-app/src/main/webui/src/api/SsoApi.tsx
@@ -17,6 +17,7 @@
import Keycloak from "keycloak-js";
import {KaravanApi} from "./KaravanApi";
+import {useAppConfigStore} from "./ProjectStore";
export class SsoApi {
@@ -27,7 +28,6 @@ export class SsoApi {
SsoApi.keycloak = new Keycloak({url: config.url, realm: config.realm, clientId: config.clientId});
SsoApi.keycloak.init({onLoad: 'login-required', flow: 'hybrid', checkLoginIframe: false}).then(value => {
console.log('SsoApi', 'User is now authenticated.');
- KaravanApi.isAuthorized = true;
after();
}).catch(reason => {
console.log('SsoApi', 'Error:', reason);
@@ -40,7 +40,7 @@ export class SsoApi {
if (SsoApi.keycloak) {
SsoApi.keycloak.logout().then(value => {
console.log('SsoApi', 'User is now logout.');
- KaravanApi.isAuthorized = false;
+ useAppConfigStore.setState({isAuthorized: false})
window.location.reload();
}).catch(reason => {
console.log('SsoApi', 'Error:', reason);
diff --git a/karavan-app/src/main/webui/src/main/Main.tsx b/karavan-app/src/main/webui/src/main/Main.tsx
index d08f5dc8..1b29db59 100644
--- a/karavan-app/src/main/webui/src/main/Main.tsx
+++ b/karavan-app/src/main/webui/src/main/Main.tsx
@@ -34,13 +34,24 @@ import {NotificationApi} from "../api/NotificationApi";
export function Main() {
- const [readiness, setReadiness] = useAppConfigStore((s) => [s.readiness, s.setReadiness], shallow)
+ const [readiness, setReadiness, isAuthorized] = useAppConfigStore((s) => [s.readiness, s.setReadiness, s.isAuthorized], shallow)
const {getData} = useMainHook();
- const initialized = useRef(false);
+ useEffect(() => {
+ checkAuthType();
+ const interval = setInterval(() => {
+ KaravanApi.getReadiness((r: any) => {
+ setReadiness(r);
+ })
+ }, 10000)
+ return () => {
+ clearInterval(interval);
+ };
+ }, []);
useEffect(() => {
if (showMain()) {
+ getData();
console.log("Start Notification fetcher");
const controller = new AbortController();
NotificationApi.notification(controller);
@@ -48,35 +59,18 @@ export function Main() {
console.log("Stop Notification fetcher");
controller.abort();
};
+ } else if (KaravanApi.authType === 'oidc') {
+ SsoApi.auth(() => {
+ KaravanApi.getMe((user: any) => {
+ useAppConfigStore.setState({isAuthorized: true});
+ });
+ });
}
- }, [readiness]);
-
- useEffect(() => {
- if (!initialized.current) {
- initialized.current = true
- effect()
- }
- const interval = setInterval(() => {
- KaravanApi.getReadiness((r: any) => {
- setReadiness(r);
- })
- }, 10000)
- return () => {
- clearInterval(interval);
- };
- }, [])
+ }, [readiness, isAuthorized]);
- function effect() {
+ function checkAuthType() {
KaravanApi.getAuthType((authType: string) => {
- console.log("authType", authType);
- if (authType === 'oidc') {
- SsoApi.auth(() => {
- KaravanApi.getMe((user: any) => {
- getData();
- });
- });
- }
- getData();
+ console.log("Main AuthType", authType);
});
}
@@ -89,7 +83,7 @@ export function Main() {
}
function showMain() {
- return !showStepper() && !showSpinner() && (KaravanApi.isAuthorized || KaravanApi.authType === 'public');
+ return KaravanApi.authType !== undefined && readiness?.status === true && isAuthorized;
}
return (
diff --git a/karavan-app/src/main/webui/src/main/PageNavigation.tsx b/karavan-app/src/main/webui/src/main/PageNavigation.tsx
index cbe27f56..cbf4db84 100644
--- a/karavan-app/src/main/webui/src/main/PageNavigation.tsx
+++ b/karavan-app/src/main/webui/src/main/PageNavigation.tsx
@@ -141,18 +141,6 @@ export function PageNavigation () {
<DescriptionListTerm>Display Name</DescriptionListTerm>
<DescriptionListDescription>{KaravanApi.me?.displayName}</DescriptionListDescription>
</DescriptionListGroup>
- <DescriptionListGroup>
- <DescriptionListTerm>Roles</DescriptionListTerm>
- <DescriptionListDescription>
- <Flex direction={{default: "row"}} gap={{default: "gapXs"}}>
- {KaravanApi.me?.roles && Array.isArray(KaravanApi.me?.roles)
- && KaravanApi.me?.roles
- .filter((r: string) => ['administrator', 'developer', 'viewer'].includes(r))
- .map((role: string) => <Badge key={role} id={role}
- isRead>{role}</Badge>)}
- </Flex>
- </DescriptionListDescription>
- </DescriptionListGroup>
</DescriptionList>
}
footerContent={
@@ -160,8 +148,6 @@ export function PageNavigation () {
<Button size="sm"
variant={"primary"}
icon={<LogoutIcon/>}
- // component={'a'}
- // href={KaravanApi.me.logoutUrl}
onClick={e => {
setShowUser(false);
SsoApi.logout(() => {});
diff --git a/karavan-app/src/main/webui/src/main/useMainHook.tsx b/karavan-app/src/main/webui/src/main/useMainHook.tsx
index f5ce1015..6570e19d 100644
--- a/karavan-app/src/main/webui/src/main/useMainHook.tsx
+++ b/karavan-app/src/main/webui/src/main/useMainHook.tsx
@@ -27,13 +27,13 @@ import {ProjectService} from "../api/ProjectService";
export function useMainHook () {
- const [setConfig] = useAppConfigStore((state) => [state.setConfig], shallow)
+ const [setConfig, isAuthorized] = useAppConfigStore((s) => [s.setConfig, s.isAuthorized], shallow)
const [setProjects] = useProjectsStore((s) => [s.setProjects], shallow)
const [setContainers] = useStatusesStore((state) => [state.setContainers], shallow);
const [selectedEnv, selectEnvironment] = useAppConfigStore((state) => [state.selectedEnv, state.selectEnvironment], shallow)
const getStatuses = () => {
- if (KaravanApi.isAuthorized || KaravanApi.authType === 'public') {
+ if (isAuthorized || KaravanApi.authType === 'public') {
KaravanApi.getAllContainerStatuses((statuses: ContainerStatus[]) => {
setContainers(statuses);
});
@@ -41,7 +41,7 @@ export function useMainHook () {
}
const getData = () => {
- if (KaravanApi.isAuthorized || KaravanApi.authType === 'public') {
+ if (isAuthorized) {
KaravanApi.getConfiguration((config: AppConfig) => {
setConfig(config);
if (!selectedEnv || selectedEnv.length == 0) {