Skip to content

Commit 0f87312

Browse files
author
Leonid
committed
Added plugin connection-string generation
1 parent 2458867 commit 0f87312

File tree

1 file changed

+39
-21
lines changed

1 file changed

+39
-21
lines changed

eFormAPI/eFormAPI.Web/Hosting/Helpers/PluginHelper.cs

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5+
using System.Text.RegularExpressions;
56
using eFormAPI.Web.Hosting.Enums;
67
using eFormAPI.Web.Hosting.Extensions;
78
using eFormAPI.Web.Infrastructure.Database.Entities;
@@ -33,40 +34,57 @@ public static List<IEformPlugin> GetPlugins(IConfiguration configuration)
3334
eformPlugins = dbContext.EformPlugins
3435
.AsNoTracking()
3536
.ToList();
36-
} catch {}
37+
}
38+
catch
39+
{
40+
}
3741
}
42+
3843
var plugins = new List<IEformPlugin>();
3944
// create plugin loaders
4045
if (eformPlugins != null)
4146
{
42-
foreach (var plugin in GetAllPlugins())
47+
using (var dbContext = contextFactory.CreateDbContext(new[] {configuration.MyConnectionString()}))
4348
{
44-
var eformPlugin = eformPlugins.FirstOrDefault(x => x.PluginId == plugin.PluginId);
45-
if (eformPlugin != null)
49+
var connectionString = dbContext.Database.GetDbConnection().ConnectionString;
50+
51+
var connectionStringMatch = Regex.Match(connectionString, @"Database=(.*)_(.*);");//.Groups[1].Value;
52+
if (connectionStringMatch.Groups.Count != 3)
4653
{
47-
if (eformPlugin.Status == (int) PluginStatus.Enabled)
48-
{
49-
plugins.Add(plugin);
50-
}
54+
throw new Exception("Error while parsing connection-string database name");
5155
}
52-
else
56+
57+
var dbNameSection = connectionStringMatch.Groups[0].Value;
58+
var dbPrefix = connectionStringMatch.Groups[1].Value;
59+
60+
foreach (var plugin in GetAllPlugins())
5361
{
54-
newPlugins.Add(new EformPlugin()
62+
var eformPlugin = eformPlugins.FirstOrDefault(x => x.PluginId == plugin.PluginId);
63+
if (eformPlugin != null)
5564
{
56-
PluginId = plugin.PluginId,
57-
ConnectionString = "...",
58-
Status = (int) PluginStatus.Disabled
59-
});
65+
if (eformPlugin.Status == (int) PluginStatus.Enabled)
66+
{
67+
plugins.Add(plugin);
68+
}
69+
}
70+
else
71+
{
72+
var pluginDbName = $"Database={dbPrefix}_{plugin.PluginId};";
73+
var pluginConnectionString = connectionString.Replace(dbNameSection, pluginDbName);
74+
newPlugins.Add(new EformPlugin()
75+
{
76+
PluginId = plugin.PluginId,
77+
ConnectionString = pluginConnectionString,
78+
Status = (int) PluginStatus.Disabled
79+
});
80+
}
6081
}
82+
83+
dbContext.EformPlugins.AddRange(newPlugins);
84+
dbContext.SaveChanges();
6185
}
6286
}
63-
6487

65-
using (var dbContext = contextFactory.CreateDbContext(new[] {configuration.MyConnectionString()}))
66-
{
67-
dbContext.EformPlugins.AddRange(newPlugins);
68-
dbContext.SaveChanges();
69-
}
7088
return plugins;
7189
}
7290

@@ -132,10 +150,10 @@ public static List<IEformPlugin> GetAllPlugins()
132150
Console.WriteLine("Found plugin : " + type.Name);
133151
var plugin = (IEformPlugin) Activator.CreateInstance(type);
134152
plugins.Add(plugin);
135-
136153
}
137154
}
138155
}
156+
139157
Console.ForegroundColor = ConsoleColor.Green;
140158
Console.WriteLine($"{plugins.Count} plugins found");
141159

0 commit comments

Comments
 (0)