Merge pull request #69 from bknd-io/fix/admin-config-secrets-missing

fix clearing schema on unauthorized secrets fetching
This commit is contained in:
dswbx
2025-02-06 09:01:47 +01:00
committed by GitHub

View File

@@ -23,6 +23,12 @@ type BkndContext = {
const BkndContext = createContext<BkndContext>(undefined!); const BkndContext = createContext<BkndContext>(undefined!);
export type { TSchemaActions }; export type { TSchemaActions };
enum Fetching {
None = 0,
Schema = 1,
Secrets = 2
}
export function BkndProvider({ export function BkndProvider({
includeSecrets = false, includeSecrets = false,
adminOverride, adminOverride,
@@ -38,6 +44,7 @@ export function BkndProvider({
const [fetched, setFetched] = useState(false); const [fetched, setFetched] = useState(false);
const [error, setError] = useState<boolean>(); const [error, setError] = useState<boolean>();
const errorShown = useRef<boolean>(); const errorShown = useRef<boolean>();
const fetching = useRef<Fetching>(Fetching.None);
const [local_version, set_local_version] = useState(0); const [local_version, set_local_version] = useState(0);
const api = useApi(); const api = useApi();
@@ -46,7 +53,12 @@ export function BkndProvider({
} }
async function fetchSchema(_includeSecrets: boolean = false, force?: boolean) { async function fetchSchema(_includeSecrets: boolean = false, force?: boolean) {
const requesting = withSecrets ? Fetching.Secrets : Fetching.Schema;
if (fetching.current === requesting) return;
if (withSecrets && !force) return; if (withSecrets && !force) return;
fetching.current = requesting;
const res = await api.system.readSchema({ const res = await api.system.readSchema({
config: true, config: true,
secrets: _includeSecrets secrets: _includeSecrets
@@ -57,12 +69,13 @@ export function BkndProvider({
errorShown.current = true; errorShown.current = true;
setError(true); setError(true);
//return; // if already has schema, don't overwrite
if (fetched && schema?.schema) return;
} else if (error) { } else if (error) {
setError(false); setError(false);
} }
const schema = res.ok const newSchema = res.ok
? res.body ? res.body
: ({ : ({
version: 0, version: 0,
@@ -72,17 +85,18 @@ export function BkndProvider({
} as any); } as any);
if (adminOverride) { if (adminOverride) {
schema.config.server.admin = { newSchema.config.server.admin = {
...schema.config.server.admin, ...newSchema.config.server.admin,
...adminOverride ...adminOverride
}; };
} }
startTransition(() => { startTransition(() => {
setSchema(schema); setSchema(newSchema);
setWithSecrets(_includeSecrets); setWithSecrets(_includeSecrets);
setFetched(true); setFetched(true);
set_local_version((v) => v + 1); set_local_version((v) => v + 1);
fetching.current = Fetching.None;
}); });
} }