enable guest auth for local environment

This commit is contained in:
Manabu Mccloskey 2023-10-02 11:24:15 -07:00
parent 88584afd31
commit dbcc20911e
2 changed files with 58 additions and 36 deletions

View file

@ -43,24 +43,34 @@ import { KubernetesClusterPickerExtension } from '@cnoe-io/plugin-scaffolder-act
import { ThemeProvider } from '@material-ui/core/styles';
import CssBaseline from '@material-ui/core/CssBaseline';
import LightIcon from '@material-ui/icons/WbSunny';
import {CNOEHomepage, cnoeLightTheme, cnoeDarkTheme} from '@internal/cnoe-ui-plugin'
import {
CNOEHomepage,
cnoeLightTheme,
cnoeDarkTheme,
} from '@internal/cnoe-ui-plugin';
import { configApiRef, useApi } from '@backstage/core-plugin-api';
const app = createApp({
apis,
components: {
// SignInPage: (props) => <ProxiedSignInPage {...props} provider="oauth2Proxy" />,
SignInPage: props => (
<SignInPage
{...props}
auto
provider={{
id: 'keycloak-oidc',
title: 'Keycloak',
message: 'Sign in using Keycloak',
apiRef: keycloakOIDCAuthApiRef,
}}
/>
),
SignInPage: props => {
const configApi = useApi(configApiRef);
if (configApi.getString('auth.environment') === 'local') {
return <SignInPage {...props} auto providers={['guest']} />;
}
return (
<SignInPage
{...props}
auto
provider={{
id: 'keycloak-oidc',
title: 'Keycloak',
message: 'Sign in using Keycloak',
apiRef: keycloakOIDCAuthApiRef,
}}
/>
);
},
},
bindRoutes({ bind }) {
bind(catalogPlugin.externalRoutes, {
@ -100,13 +110,13 @@ const app = createApp({
</ThemeProvider>
),
},
]
],
});
const routes = (
<FlatRoutes>
<Route path="/" element={<Navigate to="home" />} />
<Route path="/home" element={<CNOEHomepage/>} />
<Route path="/home" element={<CNOEHomepage />} />
<Route path="/catalog" element={<CatalogIndexPage />} />
<Route
path="/catalog/:namespace/:kind/:name"

View file

@ -14,7 +14,7 @@ import { JsonArray } from '@backstage/types';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
return await createRouter({
const opts = {
logger: env.logger,
config: env.config,
database: env.database,
@ -22,24 +22,36 @@ export default async function createPlugin(
tokenManager: env.tokenManager,
providerFactories: {
...defaultAuthProviderFactories,
'keycloak-oidc': providers.oidc.create({
signIn: {
resolver(info, ctx) {
const userRef = stringifyEntityRef({
kind: 'User',
name: info.result.userinfo.sub,
namespace: DEFAULT_NAMESPACE,
});
return ctx.issueToken({
claims: {
sub: userRef,
ent: [userRef],
groups: (info.result.userinfo.groups as JsonArray) || [],
},
});
},
},
}),
},
});
};
const envName = env.config
.getOptionalConfig('auth')
?.getOptionalString('auth');
if (envName === 'local') {
return await createRouter(opts);
}
const keycloakAuth = (opts.providerFactories['keycloak-oidc'] =
providers.oidc.create({
signIn: {
resolver(info, ctx) {
const userRef = stringifyEntityRef({
kind: 'User',
name: info.result.userinfo.sub,
namespace: DEFAULT_NAMESPACE,
});
return ctx.issueToken({
claims: {
sub: userRef,
ent: [userRef],
groups: (info.result.userinfo.groups as JsonArray) || [],
},
});
},
},
}));
opts.providerFactories['keycloak-oidc'] = keycloakAuth;
return await createRouter(opts);
}