From fa5386bfb7b53555dd88b59740d5c31d954f4947 Mon Sep 17 00:00:00 2001
From: Daniel Gyulai <gydani4@hotmail.hu>
Date: Sun, 22 Nov 2020 00:07:52 +0100
Subject: [PATCH] Outsourced connection strings to appsettings.json

---
 CoviDok/BLL/Sessions/SessionHandler.cs         |  5 +++--
 CoviDok/Controllers/AssistantController.cs     |  2 +-
 CoviDok/Controllers/AuthController.cs          |  2 +-
 CoviDok/Controllers/CaseController.cs          |  2 +-
 CoviDok/Controllers/ChildController.cs         |  2 +-
 CoviDok/Controllers/DoctorController.cs        |  2 +-
 CoviDok/Controllers/ImagesController.cs        | 14 +++++++++-----
 CoviDok/Controllers/ParentController.cs        |  2 +-
 CoviDok/Data/MySQL/MySqlContext.cs             |  5 ++++-
 CoviDok/Data/SessionProviders/RedisProvider.cs |  7 +++++--
 CoviDok/Data/StorageProviders/MinioProvider.cs |  6 ++++--
 CoviDok/Data/StorageProviders/MinioSettings.cs | 14 ++++++++++++++
 CoviDok/Program.cs                             |  4 ++++
 CoviDok/Startup.cs                             | 13 ++++++++++++-
 CoviDok/appsettings.json                       |  9 +++++++++
 15 files changed, 70 insertions(+), 19 deletions(-)
 create mode 100644 CoviDok/Data/StorageProviders/MinioSettings.cs

diff --git a/CoviDok/BLL/Sessions/SessionHandler.cs b/CoviDok/BLL/Sessions/SessionHandler.cs
index 029724c..c0e18a7 100644
--- a/CoviDok/BLL/Sessions/SessionHandler.cs
+++ b/CoviDok/BLL/Sessions/SessionHandler.cs
@@ -4,6 +4,7 @@ using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
 using CoviDok.Api;
+using CoviDok.Data.SessionProviders;
 using NCuid;
 
 namespace CoviDok.BLL.Sessions
@@ -12,9 +13,9 @@ namespace CoviDok.BLL.Sessions
     {
         private readonly ISessionProvider SessionStore;
 
-        public SessionHandler(ISessionProvider Provider)
+        public SessionHandler()
         {
-            SessionStore = Provider;
+            SessionStore = new RedisProvider();
         }
 
         public async Task<Session> GetSession(string SessionId)
diff --git a/CoviDok/Controllers/AssistantController.cs b/CoviDok/Controllers/AssistantController.cs
index 5c61beb..491ed5b 100644
--- a/CoviDok/Controllers/AssistantController.cs
+++ b/CoviDok/Controllers/AssistantController.cs
@@ -16,7 +16,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class AssistantController : ControllerBase
     {
-        private readonly SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler Handler = new SessionHandler();
 
         private readonly AssistantManager mgr = new AssistantManager();
 
diff --git a/CoviDok/Controllers/AuthController.cs b/CoviDok/Controllers/AuthController.cs
index 6b1f53a..b7a13c2 100644
--- a/CoviDok/Controllers/AuthController.cs
+++ b/CoviDok/Controllers/AuthController.cs
@@ -17,7 +17,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class AuthController : ControllerBase
     {
-        SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        SessionHandler Handler = new SessionHandler();
 
         
 
diff --git a/CoviDok/Controllers/CaseController.cs b/CoviDok/Controllers/CaseController.cs
index 48fa038..322070f 100644
--- a/CoviDok/Controllers/CaseController.cs
+++ b/CoviDok/Controllers/CaseController.cs
@@ -20,7 +20,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class CaseController : ControllerBase
     {
-        private readonly SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler Handler = new SessionHandler();
         private readonly CaseManager mgr = new CaseManager();
 
         // POST /api/Case/{id}
diff --git a/CoviDok/Controllers/ChildController.cs b/CoviDok/Controllers/ChildController.cs
index 974a653..9a05b29 100644
--- a/CoviDok/Controllers/ChildController.cs
+++ b/CoviDok/Controllers/ChildController.cs
@@ -17,7 +17,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class ChildController : ControllerBase
     {
-        private readonly SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler Handler = new SessionHandler();
 
         private readonly ChildManager ChildManager = new ChildManager();
 
diff --git a/CoviDok/Controllers/DoctorController.cs b/CoviDok/Controllers/DoctorController.cs
index 5c37611..6ac218d 100644
--- a/CoviDok/Controllers/DoctorController.cs
+++ b/CoviDok/Controllers/DoctorController.cs
@@ -18,7 +18,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class DoctorController : ControllerBase
     {
-        private readonly SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler Handler = new SessionHandler();
 
         private readonly DoctorManager doctorHandler = new DoctorManager();
         // GET /api/Doc
diff --git a/CoviDok/Controllers/ImagesController.cs b/CoviDok/Controllers/ImagesController.cs
index 15849ac..22e7890 100644
--- a/CoviDok/Controllers/ImagesController.cs
+++ b/CoviDok/Controllers/ImagesController.cs
@@ -13,6 +13,8 @@ using CoviDok.Data.SessionProviders;
 using CoviDok.Data.StorageProviders;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
 using NCuid;
 
 namespace CoviDok.Controllers
@@ -21,13 +23,15 @@ namespace CoviDok.Controllers
     [ApiController]
     public class ImagesController : ControllerBase
     {
-        private StorageHandler MinioHandler = new StorageHandler(new MinioProvider(
-            "minio:9000",
-            "secretaccesskey",
-            "secretsecretkey"));
+        private StorageHandler MinioHandler;
         private readonly string BucketName = "test1";
 
-        private readonly SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler Handler = new SessionHandler();
+
+        public ImagesController(IOptions<MinioSettings>  config)
+        {
+            MinioHandler = new StorageHandler(new MinioProvider(config));
+        }
 
         private static Stream MakeStream(string s)
         {
diff --git a/CoviDok/Controllers/ParentController.cs b/CoviDok/Controllers/ParentController.cs
index a465d97..dd8ea8a 100644
--- a/CoviDok/Controllers/ParentController.cs
+++ b/CoviDok/Controllers/ParentController.cs
@@ -17,7 +17,7 @@ namespace CoviDok.Controllers
     [ApiController]
     public class ParentController : ControllerBase
     {
-        private readonly SessionHandler sessionHandler = new SessionHandler(new RedisProvider("redis"));
+        private readonly SessionHandler sessionHandler = new SessionHandler();
 
         private readonly ParentManager parentManager = new ParentManager();
 
diff --git a/CoviDok/Data/MySQL/MySqlContext.cs b/CoviDok/Data/MySQL/MySqlContext.cs
index 4b2e552..406245b 100644
--- a/CoviDok/Data/MySQL/MySqlContext.cs
+++ b/CoviDok/Data/MySQL/MySqlContext.cs
@@ -1,5 +1,6 @@
 using CoviDok.Data.Model;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -9,6 +10,7 @@ namespace CoviDok.Data.MySQL
 {
     public class MySqlContext : DbContext
     {
+        public static string MySqlString;     
         public DbSet<Assistant> Assistants { get; set; }
         public DbSet<Doctor> Doctors { get; set; }
         public DbSet<Parent> Parents { get; set; }
@@ -19,7 +21,8 @@ namespace CoviDok.Data.MySQL
         public DbSet<Image> Images { get; set; }
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
-            optionsBuilder.UseMySQL("server=mysql;database=covidok;user=covidok;password=covidok");
+            //optionsBuilder.UseMySQL("server=mysql;database=covidok;user=covidok;password=covidok");
+            optionsBuilder.UseMySQL(MySqlString);
         }
     }
 }
diff --git a/CoviDok/Data/SessionProviders/RedisProvider.cs b/CoviDok/Data/SessionProviders/RedisProvider.cs
index c5bc4f1..53b57aa 100644
--- a/CoviDok/Data/SessionProviders/RedisProvider.cs
+++ b/CoviDok/Data/SessionProviders/RedisProvider.cs
@@ -10,9 +10,12 @@ namespace CoviDok.Data.SessionProviders
     {
         // The Multiplexer is thread safe, connections are not
         private readonly ConnectionMultiplexer muxer;
-        public RedisProvider(string host, string port = "6379")
+
+        public static string Host { get; set; }
+
+        public RedisProvider()
         {
-            muxer = ConnectionMultiplexer.Connect(host+":"+port);
+            muxer = ConnectionMultiplexer.Connect(Host);
         }
         public void Del(string key)
         {
diff --git a/CoviDok/Data/StorageProviders/MinioProvider.cs b/CoviDok/Data/StorageProviders/MinioProvider.cs
index 24a808a..eae98eb 100644
--- a/CoviDok/Data/StorageProviders/MinioProvider.cs
+++ b/CoviDok/Data/StorageProviders/MinioProvider.cs
@@ -5,15 +5,17 @@ using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
 using Minio;
+using Microsoft.Extensions.Options;
 
 namespace CoviDok.Data.StorageProviders
 {
     public class MinioProvider : IStorageProvider
     {
         private readonly MinioClient Client = null;
-        public MinioProvider(string Host, string AccessKey, string SecretKey)
+        public MinioProvider(IOptions<MinioSettings> options)
         {
-            Client = new MinioClient(Host, AccessKey, SecretKey);
+            var _settings = options.Value;
+            Client = new MinioClient(_settings.HostName, _settings.AccessKey, _settings.SecretKey);
         }
  
     public async Task CreateNamespace(string ns)
diff --git a/CoviDok/Data/StorageProviders/MinioSettings.cs b/CoviDok/Data/StorageProviders/MinioSettings.cs
new file mode 100644
index 0000000..deda78c
--- /dev/null
+++ b/CoviDok/Data/StorageProviders/MinioSettings.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace CoviDok.Data.StorageProviders
+{
+    public class MinioSettings {
+        public string HostName { get; set; }
+        public string AccessKey { get; set; }
+        public string SecretKey { get; set; }
+
+    }
+}
diff --git a/CoviDok/Program.cs b/CoviDok/Program.cs
index 7b27420..ba7a2db 100644
--- a/CoviDok/Program.cs
+++ b/CoviDok/Program.cs
@@ -21,6 +21,10 @@ namespace CoviDok
                 .ConfigureWebHostDefaults(webBuilder =>
                 {
                     webBuilder.UseStartup<Startup>();
+
+                }).ConfigureAppConfiguration((buildercontext, config) =>
+                {
+                    config.AddJsonFile("settings/appsettings.k8s.json", optional: true);
                 });
     }
 }
diff --git a/CoviDok/Startup.cs b/CoviDok/Startup.cs
index 31d16d0..bc2c283 100644
--- a/CoviDok/Startup.cs
+++ b/CoviDok/Startup.cs
@@ -3,10 +3,13 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using CoviDok.Data.MySQL;
+using CoviDok.Data.SessionProviders;
+using CoviDok.Data.StorageProviders;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 
@@ -16,9 +19,16 @@ namespace CoviDok
     {
         // This method gets called by the runtime. Use this method to add services to the container.
         // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
-        public void ConfigureServices(IServiceCollection services)
+
+
+        public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
         {
             services.AddMvc(options => options.EnableEndpointRouting = false).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
+            services.AddSingleton<IConfiguration>(configuration);
+            var minioSection = configuration.GetSection("MinioSettings");
+            services.Configure<MinioSettings>(minioSection);
+            MySqlContext.MySqlString = configuration.GetConnectionString("MySQLDatabase");
+            RedisProvider.Host = configuration.GetConnectionString("RedisHost");
         }
 
         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@@ -33,6 +43,7 @@ namespace CoviDok
 
             app.UseMvc();
 
+
             MySqlContext ctx = new MySqlContext();
             ctx.Database.EnsureCreated();
 
diff --git a/CoviDok/appsettings.json b/CoviDok/appsettings.json
index d9d9a9b..0fc9c35 100644
--- a/CoviDok/appsettings.json
+++ b/CoviDok/appsettings.json
@@ -1,4 +1,13 @@
 {
+  "ConnectionStrings": {
+    "MySQLDatabase": "server=mysql;database=covidok;user=covidok;password=covidok",
+    "RedisHost": "redis:6379"
+  },
+  "MinioSettings": {
+    "HostName": "minio",
+    "AccessKey": "secretaccesskey",
+    "SecretKey":  "secretsecretkey"
+  },
   "Logging": {
     "LogLevel": {
       "Default": "Information",