blob: 7101e3f7af04b30dd7fe17ef5c0e168ac079243b [file] [log] [blame] [edit]
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
/**
* the overview, roles, issuers, certificates, and key routes all need to be aware of the whether there is a config for the engine
* if the user has not configured they are prompted to do so in each of the routes
* decorate the necessary routes to perform the check in the beforeModel hook since that may change what is returned for the model
*/
export function withConfig() {
return function decorator(SuperClass) {
if (!Object.prototype.isPrototypeOf.call(Route, SuperClass)) {
// eslint-disable-next-line
console.error(
'withConfig decorator must be used on an instance of ember Route class. Decorator not applied to returned class'
);
return SuperClass;
}
return class CheckConfig extends SuperClass {
@service secretMountPath;
shouldPromptConfig = false;
async beforeModel() {
super.beforeModel(...arguments);
// When the engine is configured, it creates a default issuer.
// If the issuers list is empty, we know it hasn't been configured
return (
this.store
.query('pki/issuer', { backend: this.secretMountPath.currentPath })
.then(() => (this.shouldPromptConfig = true))
// this endpoint is unauthenticated, so we're not worried about permissions errors
.catch(() => (this.shouldPromptConfig = false))
);
}
};
};
}