private ImmutableArray <FunctionMetadata> AddProxyClient(ImmutableArray <FunctionMetadata> functionMetadataArray) { var proxyMetadata = new List <FunctionMetadata>(); foreach (var metadata in functionMetadataArray) { if (!metadata.IsProxy()) { continue; } var proxydata = new ProxyFunctionMetadata(_proxyClient); metadata.Bindings.ToList().ForEach(b => proxydata.Bindings.Add(b)); proxydata.EntryPoint = metadata.EntryPoint; proxydata.FunctionDirectory = metadata.FunctionDirectory; proxydata.SetIsDirect(metadata.IsDirect()); proxydata.SetIsDisabled(metadata.IsDisabled()); proxydata.Language = metadata.Language; proxydata.Name = metadata.Name; proxydata.ScriptFile = metadata.ScriptFile; proxyMetadata.Add(proxydata); } return(proxyMetadata.ToImmutableArray()); }
public void FunctionLoadRequest_IsExpected() { FunctionMetadata metadata = new FunctionMetadata() { Language = "node", Name = "js1" }; metadata.SetFunctionId("TestFunctionId1"); var functionLoadRequest = _workerChannel.GetFunctionLoadRequest(metadata, null); Assert.False(functionLoadRequest.Metadata.IsProxy); ProxyFunctionMetadata proxyMetadata = new ProxyFunctionMetadata(null) { Language = "node", Name = "js1" }; metadata.SetFunctionId("TestFunctionId1"); var proxyFunctionLoadRequest = _workerChannel.GetFunctionLoadRequest(proxyMetadata, null); Assert.True(proxyFunctionLoadRequest.Metadata.IsProxy); }
public void RequiresAuthz_ReturnsExpectedResult() { var uri = new Uri("http://localhost/test"); var request = new DefaultHttpContext().Request; var requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.Method = "GET"; requestFeature.Scheme = uri.Scheme; requestFeature.Path = uri.GetComponents(UriComponents.KeepDelimiter | UriComponents.Path, UriFormat.Unescaped); requestFeature.PathBase = string.Empty; requestFeature.QueryString = uri.GetComponents(UriComponents.KeepDelimiter | UriComponents.Query, UriFormat.Unescaped); requestFeature.Headers = new HeaderDictionary { { "Host", uri.Host } }; // Function level auth requires authz FunctionMetadata metadata = new FunctionMetadata(); var function = new Mock <FunctionDescriptor>(MockBehavior.Strict, "test", null, metadata, null, null, null, null); var attribute = new HttpTriggerAttribute(AuthorizationLevel.Function, "get") { Route = "test" }; function.SetupGet(p => p.HttpTriggerAttribute).Returns(() => attribute); bool result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.True(result); // Proxies don't require authz metadata = new ProxyFunctionMetadata(null); function = new Mock <FunctionDescriptor>(MockBehavior.Strict, "test", null, metadata, null, null, null, null); attribute = new HttpTriggerAttribute(AuthorizationLevel.Function, "get") { Route = "test" }; function.SetupGet(p => p.HttpTriggerAttribute).Returns(() => attribute); result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.False(result); // Anonymous functions don't require authz metadata = new FunctionMetadata(); function = new Mock <FunctionDescriptor>(MockBehavior.Strict, "test", null, metadata, null, null, null, null); attribute = new HttpTriggerAttribute(AuthorizationLevel.Anonymous, "get") { Route = "test" }; function.SetupGet(p => p.HttpTriggerAttribute).Returns(() => attribute); result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.False(result); // Anonymous functions with EasyAuth header require authz requestFeature.Headers = new HeaderDictionary { { ScriptConstants.EasyAuthIdentityHeader, "abc123" } }; result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.True(result); // Anonymous functions with key header require authz requestFeature.Headers = new HeaderDictionary { { AuthenticationLevelHandler.FunctionsKeyHeaderName, "abc123" } }; result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.True(result); // Anonymous functions with key query param require authz uri = new Uri("http://localhost/test?code=abc123"); request = new DefaultHttpContext().Request; requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.Method = "GET"; requestFeature.Scheme = uri.Scheme; requestFeature.Path = uri.GetComponents(UriComponents.KeepDelimiter | UriComponents.Path, UriFormat.Unescaped); requestFeature.PathBase = string.Empty; requestFeature.QueryString = uri.GetComponents(UriComponents.KeepDelimiter | UriComponents.Query, UriFormat.Unescaped); requestFeature.Headers = new HeaderDictionary { { "Host", uri.Host } }; result = FunctionInvocationMiddleware.RequiresAuthz(request, function.Object); Assert.True(result); }
public ProxyFunctionInvoker(ScriptHost host, ProxyFunctionMetadata proxyfunctionMetadata, ILoggerFactory loggerFactory) : base(host, proxyfunctionMetadata, loggerFactory) { _proxyClient = proxyfunctionMetadata.ProxyClient; }