1use std::sync::Arc;
16
17use auth::{DefaultPermissionChecker, PermissionCheckerRef, UserProviderRef};
18use common_base::Plugins;
19use common_base::secrets::ExposeSecret;
20use common_meta::cache::CacheRegistryBuilder;
21use frontend::error::{IllegalAuthConfigSnafu, Result};
22use frontend::frontend::FrontendOptions;
23use frontend::heartbeat::FrontendHeartbeatExtensions;
24use frontend::instance::Instance;
25use frontend::instance::builder::FrontendBuilder;
26use snafu::ResultExt;
27
28use crate::options::PluginOptions;
29
30#[allow(unused_mut)]
41pub async fn setup_frontend_plugins_pre_build(
42 plugins: &mut Plugins,
43 _plugin_options: &[PluginOptions],
44 fe_opts: &FrontendOptions,
45 _meta_config: Option<&[PluginOptions]>,
46) -> Result<()> {
47 if let Some(user_provider) = fe_opts.user_provider.as_ref() {
48 let provider = auth::user_provider_from_option(user_provider.expose_secret())
49 .context(IllegalAuthConfigSnafu)?;
50 let permission_checker = DefaultPermissionChecker::arc();
51
52 plugins.insert::<PermissionCheckerRef>(permission_checker);
53 plugins.insert::<UserProviderRef>(provider);
54 }
55 Ok(())
56}
57
58pub async fn setup_frontend_plugins_post_build(
64 _plugins: &mut Plugins,
65 _plugin_options: &[PluginOptions],
66 _builder: &FrontendBuilder,
67) -> Result<()> {
68 Ok(())
69}
70
71pub async fn setup_frontend_heartbeat_extensions(
77 plugins: &mut Plugins,
78 _plugin_options: &[PluginOptions],
79 _instance: &Arc<Instance>,
80) -> Result<()> {
81 plugins.get_or_insert(FrontendHeartbeatExtensions::default);
82 Ok(())
83}
84
85pub async fn start_frontend_plugins(_instance: &Instance) -> Result<()> {
86 Ok(())
87}
88
89pub fn configure_cache_registry(_plugins: &Plugins) -> Option<CacheRegistryBuilder> {
91 None
92}
93
94pub mod context {
95 use std::sync::Arc;
96
97 use flow::FrontendClient;
98 use meta_client::MetaClientRef;
99
100 pub enum CatalogManagerConfigureContext {
103 Distributed(DistributedCatalogManagerConfigureContext),
104 Standalone(StandaloneCatalogManagerConfigureContext),
105 }
106
107 pub struct DistributedCatalogManagerConfigureContext {
108 pub meta_client: MetaClientRef,
109 }
110
111 pub struct StandaloneCatalogManagerConfigureContext {
112 pub fe_client: Arc<FrontendClient>,
113 }
114}