Skip to content

Commit 452ac02

Browse files
sjuarezgxsjuarez
andauthored
Add gxmulticall service to Azure Serverless deploy (#1136)
Co-authored-by: sjuarez <sabrina.juarez@globant.com>
1 parent a779773 commit 452ac02

File tree

4 files changed

+88
-34
lines changed

4 files changed

+88
-34
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using GeneXus.Cache;
3+
using GeneXus.Deploy.AzureFunctions.Handlers.Helpers;
4+
using GxClasses.Web;
5+
using Microsoft.Azure.Functions.Worker;
6+
using Microsoft.Azure.Functions.Worker.Http;
7+
8+
namespace GeneXus.Deploy.AzureFunctions.Handlers.BackendServices
9+
{
10+
public class BackendServices
11+
{
12+
private IGXRouting _gxRouting;
13+
private ICacheService2 _redis;
14+
private ProxyServices _proxyServices;
15+
16+
public BackendServices(IGXRouting gxRouting, ICacheService2 redis)
17+
{
18+
_gxRouting = gxRouting;
19+
if (redis != null && redis.GetType() == typeof(Redis))
20+
_redis = redis;
21+
_proxyServices = new ProxyServices(_gxRouting, _redis);
22+
}
23+
24+
[Function("gxmulticall")]
25+
public async Task<HttpResponseData> GXMulticall([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "gxmulticall")] HttpRequestData req,
26+
FunctionContext executionContext)
27+
{
28+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
29+
}
30+
}
31+
}
Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
using System;
2-
using System.IO;
3-
using System.Reflection;
41
using System.Threading.Tasks;
52
using GeneXus.Cache;
6-
using GeneXus.Deploy.AzureFunctions.HttpHandler;
3+
using GeneXus.Deploy.AzureFunctions.Handlers.Helpers;
74
using GxClasses.Web;
8-
using GxClasses.Web.Middleware;
9-
using Microsoft.AspNetCore.Http;
105
using Microsoft.Azure.Functions.Worker;
116
using Microsoft.Azure.Functions.Worker.Http;
12-
using Microsoft.Extensions.Logging;
137
using HttpRequestData = Microsoft.Azure.Functions.Worker.Http.HttpRequestData;
148

159
namespace GeneXus.Deploy.AzureFunctions.GAM
@@ -19,112 +13,101 @@ public class GAMAzureFunctions
1913
private IGXRouting _gxRouting;
2014
private ICacheService2 _redis;
2115

16+
private ProxyServices _proxyServices;
17+
2218
public GAMAzureFunctions(IGXRouting gxRouting, ICacheService2 redis)
2319
{
2420
_gxRouting = gxRouting;
2521
if (redis != null && redis.GetType() == typeof(Redis))
2622
_redis = redis;
23+
_proxyServices = new ProxyServices(_gxRouting, _redis);
2724
}
2825

26+
2927
[Function("oauth_access_token")]
3028
public async Task<HttpResponseData> Accesstoken([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/access_token")] HttpRequestData req,
3129
FunctionContext executionContext)
3230
{
33-
return await ExecuteHttpFunction(req, executionContext);
31+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
3432
}
3533

3634
[Function("oauth_logout")]
3735
public async Task<HttpResponseData> Logout([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/logout")] HttpRequestData req,
3836
FunctionContext executionContext)
3937
{
40-
return await ExecuteHttpFunction(req, executionContext);
38+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
4139
}
4240

4341
[Function("oauth_userinfo")]
4442
public async Task<HttpResponseData> UserInfo([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/userinfo")] HttpRequestData req,
4543
FunctionContext executionContext)
4644
{
47-
return await ExecuteHttpFunction(req, executionContext);
45+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
4846
}
4947

5048
[Function("oauth_gam_signin")]
5149
public async Task<HttpResponseData> Signin([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/gam/signin")] HttpRequestData req,
5250
FunctionContext executionContext)
5351
{
54-
return await ExecuteHttpFunction(req, executionContext);
52+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
5553
}
5654

5755
[Function("oauth_gam_callback")]
5856
public async Task<HttpResponseData> Callback([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/gam/callback")] HttpRequestData req,
5957
FunctionContext executionContext)
6058
{
61-
return await ExecuteHttpFunction(req, executionContext);
59+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
6260
}
6361

6462
[Function("oauth_gam_access_token")]
6563
public async Task<HttpResponseData> GAMAccessToken([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/gam/access_token")] HttpRequestData req,
6664
FunctionContext executionContext)
6765
{
68-
return await ExecuteHttpFunction(req, executionContext);
66+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
6967
}
7068

7169
[Function("oauth_gam_userinfo")]
7270
public async Task<HttpResponseData> GAMUserInfo([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/gam/userinfo")] HttpRequestData req,
7371
FunctionContext executionContext)
7472
{
75-
return await ExecuteHttpFunction(req, executionContext);
73+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
7674
}
7775

7876
[Function("oauth_gam_signout")]
7977
public async Task<HttpResponseData> GAMSignout([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/gam/signout")] HttpRequestData req,
8078
FunctionContext executionContext)
8179
{
82-
return await ExecuteHttpFunction(req, executionContext);
80+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
8381
}
8482

8583
[Function("oauth_RequestTokenService")]
8684
public async Task<HttpResponseData> RequestTokenService([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/RequestTokenService")] HttpRequestData req,
8785
FunctionContext executionContext)
8886
{
89-
return await ExecuteHttpFunction(req, executionContext);
87+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
9088
}
9189

9290
[Function("oauth_QueryAccessToken")]
9391
public async Task<HttpResponseData> QueryAccessToken([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "oauth/QueryAccessToken")] HttpRequestData req,
9492
FunctionContext executionContext)
9593
{
96-
return await ExecuteHttpFunction(req, executionContext);
94+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
9795
}
9896

9997
[Function("saml_gam_signout")]
10098
public async Task<HttpResponseData> SAMLGAMSignout([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "saml/gam/signout")] HttpRequestData req,
10199
FunctionContext executionContext)
102100
{
103-
return await ExecuteHttpFunction(req, executionContext);
101+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
104102
}
105103

106104
[Function("saml_gam_callback")]
107105
public async Task<HttpResponseData> SAMLGAMCallback([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "saml/gam/callback")] HttpRequestData req,
108106
FunctionContext executionContext)
109107
{
110-
return await ExecuteHttpFunction(req, executionContext);
108+
return await _proxyServices.ExecuteHttpFunction(req, executionContext);
111109
}
112110

113-
private async Task<HttpResponseData> ExecuteHttpFunction(HttpRequestData req, FunctionContext executionContext)
114-
{
115-
116-
var logger = executionContext.GetLogger("GAMAzureFunctions");
117-
logger.LogInformation($"GeneXus Http trigger handler. Function processed: {executionContext.FunctionDefinition.Name}.");
118-
119-
HttpResponseData httpResponseData = req.CreateResponse();
120-
HttpContext httpAzureContextAccessor = new GXHttpAzureContextAccessor(req, httpResponseData, _redis);
121-
122-
GXRouting.ContentRootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
123-
GXRouting.AzureFunctionName = executionContext.FunctionDefinition.Name;
124-
125-
await _gxRouting.ProcessRestRequest(httpAzureContextAccessor);
126-
return httpResponseData;
127-
}
128111
}
129112

130113
}

dotnet/src/extensions/Azure/Handlers/GeneXus.Deploy.AzureFunctions.Handlers.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<BlobSupport>true</BlobSupport>
2020
<EventGridSupport>true</EventGridSupport>
2121
<IntegratedSecuritySupport>true</IntegratedSecuritySupport>
22+
<BackendServices>true</BackendServices>
2223
</PropertyGroup>
2324

2425
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
@@ -68,6 +69,7 @@
6869
</ItemGroup>
6970

7071
<ItemGroup>
72+
<Compile Include="BackendServices\BackendServices.cs" Condition="'$(BackendServices)' == 'true'"/>
7173
<Compile Include="GAMAzureFunctions\GAMFunctions.cs" Condition="'$(IntegratedSecuritySupport)' == 'true'" />
7274
<Compile Include="HttpHandler\GXHttpAzureContextAccessor.cs" />
7375
<Compile Include="HttpHandler\RedisHttpSession.cs" />
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.IO;
2+
using System.Reflection;
3+
using System.Threading.Tasks;
4+
using GeneXus.Cache;
5+
using GeneXus.Deploy.AzureFunctions.HttpHandler;
6+
using GxClasses.Web;
7+
using GxClasses.Web.Middleware;
8+
using Microsoft.AspNetCore.Http;
9+
using Microsoft.Azure.Functions.Worker;
10+
using Microsoft.Azure.Functions.Worker.Http;
11+
12+
namespace GeneXus.Deploy.AzureFunctions.Handlers.Helpers
13+
{
14+
public class ProxyServices
15+
{
16+
private IGXRouting _gxRouting;
17+
private ICacheService2 _redis;
18+
19+
public ProxyServices(IGXRouting gxRouting, ICacheService2 redis)
20+
{
21+
_gxRouting = gxRouting;
22+
_redis = redis;
23+
}
24+
25+
public async Task<HttpResponseData> ExecuteHttpFunction(HttpRequestData req, FunctionContext executionContext)
26+
{
27+
28+
HttpResponseData httpResponseData = req.CreateResponse();
29+
HttpContext httpAzureContextAccessor = new GXHttpAzureContextAccessor(req, httpResponseData, _redis);
30+
31+
GXRouting.ContentRootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
32+
GXRouting.AzureFunctionName = executionContext.FunctionDefinition.Name;
33+
34+
await _gxRouting.ProcessRestRequest(httpAzureContextAccessor);
35+
return httpResponseData;
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)