Skip to main content
Glama
authentication.rs2.98 kB
use serde::{ Deserialize, Serialize, }; use telemetry::prelude::*; use super::{ EventualParent, FuncBinding, FuncBindingResult, }; use crate::{ DalContext, FuncId, SchemaVariant, SchemaVariantId, }; #[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Hash)] pub struct AuthBinding { // unique ids pub schema_variant_id: SchemaVariantId, pub func_id: FuncId, } impl AuthBinding { pub async fn assemble_auth_bindings( ctx: &DalContext, func_id: FuncId, ) -> FuncBindingResult<Vec<FuncBinding>> { let schema_variant_ids = SchemaVariant::list_for_auth_func(ctx, func_id).await?; let mut bindings = vec![]; for schema_variant_id in schema_variant_ids { bindings.push(FuncBinding::Authentication(AuthBinding { schema_variant_id, func_id, })); } Ok(bindings) } #[instrument( level = "info", skip(ctx), name = "func.binding.authentication.create_auth_binding" )] /// Create an Auth Binding for a Schema Variant pub async fn create_auth_binding( ctx: &DalContext, func_id: FuncId, schema_variant_id: SchemaVariantId, ) -> FuncBindingResult<Vec<FuncBinding>> { // don't add binding if parent is locked SchemaVariant::error_if_locked(ctx, schema_variant_id).await?; SchemaVariant::new_authentication_prototype(ctx, func_id, schema_variant_id).await?; FuncBinding::for_func_id(ctx, func_id).await } #[instrument( level = "info", skip(ctx), name = "func.binding.authentication.delete_auth_binding" )] /// Deletes an Auth Binding for a Schema Variant pub async fn delete_auth_binding( ctx: &DalContext, func_id: FuncId, schema_variant_id: SchemaVariantId, ) -> FuncBindingResult<EventualParent> { // don't delete binding if parent is locked SchemaVariant::error_if_locked(ctx, schema_variant_id).await?; SchemaVariant::remove_authentication_prototype(ctx, func_id, schema_variant_id).await?; Ok(EventualParent::SchemaVariant(schema_variant_id)) } #[instrument( level = "info", skip(ctx), name = "func.binding.authentication.port_binding_to_new_func" )] pub(crate) async fn port_binding_to_new_func( &self, ctx: &DalContext, new_func_id: FuncId, ) -> FuncBindingResult<Vec<FuncBinding>> { let schema_variant_id = self.schema_variant_id; // don't add binding if parent is locked // this shouldn't happen? SchemaVariant::error_if_locked(ctx, schema_variant_id).await?; Self::delete_auth_binding(ctx, self.func_id, self.schema_variant_id).await?; Self::create_auth_binding(ctx, new_func_id, schema_variant_id).await?; FuncBinding::for_func_id(ctx, new_func_id).await } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server