aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOgnjen Cirkovic <ciraboxkg@gmail.com>2022-04-18 14:56:42 +0200
committerDanijel Anđelković <adanijel99@gmail.com>2022-04-23 00:53:52 +0200
commitcbd44c7964b74e0292a96737cc47aae7cfa0c77d (patch)
tree3615c897a6b2c9eb3303e76a4e055aa36f9d9046
parentf897b364af1c814ef2ffed2da989c4e35947a4cb (diff)
Napravljen Filter za ml api ip adresu. Tako da samo ml moze da poziva odredjene api pozive na back-u.
-rw-r--r--backend/api/api/Program.cs9
-rw-r--r--backend/api/api/Services/MlApiCheckActionFilter.cs50
-rw-r--r--backend/api/api/appsettings.json3
3 files changed, 60 insertions, 2 deletions
diff --git a/backend/api/api/Program.cs b/backend/api/api/Program.cs
index 71509b38..56abc016 100644
--- a/backend/api/api/Program.cs
+++ b/backend/api/api/Program.cs
@@ -39,7 +39,14 @@ builder.Services.AddScoped<IExperimentService, ExperimentService>();
builder.Services.AddHostedService<TempFileService>();
builder.Services.AddHostedService<FillAnEmptyDb>();
-
+//Ml Api Ip Filter
+builder.Services.AddScoped<MlApiCheckActionFilter>(container =>
+{
+ var loggerFactory = container.GetRequiredService<ILoggerFactory>();
+ var logger=loggerFactory.CreateLogger<MlApiCheckActionFilter>();
+ var MlIp = builder.Configuration.GetValue<string>("AppSettings:MlIp");
+ return new MlApiCheckActionFilter(MlIp, logger);
+});
diff --git a/backend/api/api/Services/MlApiCheckActionFilter.cs b/backend/api/api/Services/MlApiCheckActionFilter.cs
new file mode 100644
index 00000000..d1c020b0
--- /dev/null
+++ b/backend/api/api/Services/MlApiCheckActionFilter.cs
@@ -0,0 +1,50 @@
+using System.Net;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+
+namespace api.Services
+{
+ public class MlApiCheckActionFilter:ActionFilterAttribute
+ {
+ private readonly ILogger _logger;
+ private readonly string _safelist;
+
+ public MlApiCheckActionFilter(string safelist,ILogger logger)
+ {
+ _logger = logger;
+ _safelist = safelist;
+ }
+ public override void OnActionExecuting(ActionExecutingContext context)
+ {
+ var remoteIp = context.HttpContext.Connection.RemoteIpAddress;
+ _logger.LogDebug("Remote IpAddress: {RemoteIp}", remoteIp);
+ var ip = _safelist.Split(';');
+ var badIp = true;
+
+ if (remoteIp.IsIPv4MappedToIPv6)
+ {
+ remoteIp = remoteIp.MapToIPv4();
+ }
+
+ foreach (var address in ip)
+ {
+ var testIp = IPAddress.Parse(address);
+
+ if (testIp.Equals(remoteIp))
+ {
+ badIp = false;
+ break;
+ }
+ }
+
+ if (badIp)
+ {
+ _logger.LogWarning("Forbidden Request from IP: {RemoteIp}", remoteIp);
+ context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
+ return;
+ }
+
+ base.OnActionExecuting(context);
+ }
+ }
+}
diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json
index e96549a8..c2310978 100644
--- a/backend/api/api/appsettings.json
+++ b/backend/api/api/appsettings.json
@@ -2,7 +2,8 @@
"AppSettings": {
"JwtToken": "2mnttqPtRb4GIWHFtagm",
"MlApi": "http://127.0.0.1:5543",
- "FrontApi": "http://localhost:4200"
+ "FrontApi": "http://localhost:4200",
+ "MlIp":"127.0.0.1;::1"
},
"Logging": {
"LogLevel": {