Skip to content

Commit 3907ed8

Browse files
authored
Merge pull request CactuseSecurity#3399 from abarz722/develop
fix app server comparison in variance analysis + source cleanup
2 parents 4a0711c + b255d0c commit 3907ed8

File tree

64 files changed

+579
-687
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+579
-687
lines changed

roles/database/files/sql/idempotent/fworch-texts.sql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,14 @@ INSERT INTO txt VALUES ('select', 'German', 'Auswählen');
285285
INSERT INTO txt VALUES ('select', 'English', 'Select');
286286
INSERT INTO txt VALUES ('loading', 'German', 'Laden...');
287287
INSERT INTO txt VALUES ('loading', 'English', 'Loading...');
288+
INSERT INTO txt VALUES ('exporting', 'German', 'Exportieren...');
289+
INSERT INTO txt VALUES ('exporting', 'English', 'Exporting...');
288290
INSERT INTO txt VALUES ('PagerPagesize', 'German', 'Seitengrösse');
289291
INSERT INTO txt VALUES ('PagerPagesize', 'English', 'Page size');
290292
INSERT INTO txt VALUES ('PagerSubmit', 'German', 'Speichern');
291293
INSERT INTO txt VALUES ('PagerSubmit', 'English', 'Save');
292-
INSERT INTO txt VALUES ('order_by', 'German', 'Sortieren nach');
293-
INSERT INTO txt VALUES ('order_by', 'English', 'Order by');
294+
INSERT INTO txt VALUES ('order_by', 'German', 'Sortieren nach');
295+
INSERT INTO txt VALUES ('order_by', 'English', 'Order by');
294296

295297
-- (re)login
296298
INSERT INTO txt VALUES ('login', 'German', 'Anmelden');

roles/lib/files/FWO.Basics/GlobalConstants.cs

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,15 @@ public struct GlobalConst
4040
public const string kDoku_ = "Doku_";
4141
public const string k_user = "_user";
4242
public const string k_user2 = "-user";
43-
public const string kNAT = "NAT";
43+
public const string kNAT = "NAT";
4444
public const string k_demo = "_demo";
4545

46+
public const string kPlaceholderMarker = "@@";
4647
public const char kAppIdSeparator = '-'; // hard-coded could be moved to settings
4748
public const string kModellerGroup = "ModellerGroup_";
48-
public const string kFullAppIdPlaceholder = "@@ExternalAppId@@";
49-
public const string kAppIdPlaceholder = "@@AppId@@";
50-
public const string kAppPrefixPlaceholder = "@@AppPrefix@@";
51-
public const string kLdapGroupPattern = kModellerGroup + kAppIdPlaceholder;
49+
public const string kLdapGroupPattern = kModellerGroup + Placeholder.AppId;
5250
public const string kImportChangeNotify = "importChangeNotify";
53-
public const string kExternalRequest = "externalRequest";
51+
public const string kExternalRequest = "externalRequest";
5452
public const string kLdapInternalPostfix = "dc=" + kFwoProdName + ",dc=internal";
5553
public const int kLdapInternalId = 1;
5654
public const string kDummyAppRole = "DummyAppRole";
@@ -95,4 +93,58 @@ public struct MarkerLocation
9593
public const string Comment = "comment";
9694
public const string Customfields = "customfields";
9795
}
96+
97+
public struct QueryVar
98+
{
99+
public const string Limit = "limit";
100+
public const string Offset = "offset";
101+
public const string Time = "time";
102+
public const string ImportIdStart = "import_id_start";
103+
public const string ImportIdEnd = "import_id_end";
104+
public const string ImportIdOld = "import_id_old";
105+
public const string ImportIdNew = "import_id_new";
106+
public const string MgmIds = "mgmIds";
107+
public const string MgmId = "mgmId";
108+
public const string ManagementId = "management_id";
109+
public const string RuleIds = "ruleIds";
110+
public const string RuleId = "rule_id";
111+
}
112+
113+
public struct Placeholder
114+
{
115+
public const string ExternalAppId = "@@ExternalAppId@@";
116+
public const string AppId = "@@AppId@@";
117+
public const string AppPrefix = "@@AppPrefix@@";
118+
119+
public const string APPNAME = "@@APPNAME@@";
120+
public const string APPID = "@@APPID@@";
121+
122+
public const string ACTION = "@@ACTION@@";
123+
public const string CHANGEACTION = "@@CHANGEACTION@@";
124+
public const string COMMENT = "@@COMMENT@@";
125+
public const string DESTINATIONS = "@@DESTINATIONS@@";
126+
public const string GROUPNAME = "@@GROUPNAME@@";
127+
public const string IP = "@@IP@@";
128+
public const string MANAGEMENT_ID = "@@MANAGEMENT_ID@@";
129+
public const string MANAGEMENT_NAME = "@@MANAGEMENT_NAME@@";
130+
public const string MEMBERS = "@@MEMBERS@@";
131+
public const string OBJECT_DETAILS = "@@OBJECT_DETAILS@@";
132+
public const string OBJECTNAME = "@@OBJECTNAME@@";
133+
public const string OBJECT_TYPE = "@@OBJECT_TYPE@@";
134+
public const string OBJUPDSTATUS = "@@OBJUPDSTATUS@@";
135+
public const string ONBEHALF = "@@ONBEHALF@@";
136+
public const string ORDERNAME = "@@ORDERNAME@@";
137+
public const string PORT = "@@PORT@@";
138+
public const string PRIORITY = "@@PRIORITY@@";
139+
public const string PROTOCOLNAME = "@@PROTOCOLNAME@@";
140+
public const string REASON = "@@REASON@@";
141+
public const string SERVICENAME = "@@SERVICENAME@@";
142+
public const string SERVICES = "@@SERVICES@@";
143+
public const string SOURCES = "@@SOURCES@@";
144+
public const string STATUS = "@@STATUS@@";
145+
public const string TASKCOMMENT = "@@TASKCOMMENT@@";
146+
public const string TASKS = "@@TASKS@@";
147+
public const string TICKET_SUBJECT = "@@TICKET_SUBJECT@@";
148+
public const string TYPE = "@@TYPE@@";
149+
}
98150
}

roles/lib/files/FWO.Data/Report/ConnectionReport.cs

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ namespace FWO.Data.Report
55
{
66
public class ConnectionReport
77
{
8-
public string Name = "";
8+
public string Name { get; set; } = "";
99

10-
public List<NetworkObject> AllObjects = [];
11-
public List<NetworkService> AllServices = [];
10+
public List<NetworkObject> AllObjects { get; set; } = [];
11+
public List<NetworkService> AllServices { get; set; } = [];
1212

1313
public ConnectionReport()
1414
{}
@@ -32,9 +32,9 @@ public static void AssignConnectionNumbers(List<ModellingConnection> connections
3232
public void PrepareObjectData(bool resolveNetworkAreas)
3333
{
3434
AllObjects = GetAllNetworkObjects(true, resolveNetworkAreas);
35-
SetObjectNumbers(ref AllObjects);
35+
SetObjectNumbers(AllObjects);
3636
AllServices = GetAllServices(true);
37-
SetSvcNumbers(ref AllServices);
37+
SetSvcNumbers(AllServices);
3838
}
3939

4040
public virtual List<NetworkObject> GetAllNetworkObjects(bool resolved = false, bool resolveNetworkAreas = false)
@@ -47,7 +47,7 @@ public virtual List<NetworkService> GetAllServices(bool resolved = false)
4747
return [];
4848
}
4949

50-
public static void SetSvcNumbers(ref List<NetworkService> svcList)
50+
public static void SetSvcNumbers(List<NetworkService> svcList)
5151
{
5252
long number = 1;
5353
foreach(var svc in svcList)
@@ -56,7 +56,7 @@ public static void SetSvcNumbers(ref List<NetworkService> svcList)
5656
}
5757
}
5858

59-
public static void SetObjectNumbers(ref List<NetworkObject> objList)
59+
public static void SetObjectNumbers(List<NetworkObject> objList)
6060
{
6161
long number = 1;
6262
foreach(var obj in objList)
@@ -71,18 +71,15 @@ public static List<NetworkService> GetAllServices(List<ModellingConnection> conn
7171
foreach(var conn in connections)
7272
{
7373
List<NetworkService> svcList = [];
74-
foreach (var svcGrp in conn.ServiceGroups)
74+
foreach (var svcGrp in conn.ServiceGroups.Select(s => s.Content))
7575
{
76-
NetworkService serviceGroup = svcGrp.Content.ToNetworkServiceGroup();
77-
svcList.Add(svcGrp.Content.ToNetworkServiceGroup());
76+
NetworkService serviceGroup = svcGrp.ToNetworkServiceGroup();
77+
svcList.Add(svcGrp.ToNetworkServiceGroup());
7878
if(resolved)
7979
{
80-
foreach(var svc in serviceGroup.ServiceGroups)
80+
foreach(var svc in serviceGroup.ServiceGroups.Where(s => s.Object != null))
8181
{
82-
if(svc.Object != null)
83-
{
84-
svcList.Add(svc.Object);
85-
}
82+
svcList.Add(svc.Object!);
8683
}
8784
}
8885
}
@@ -138,55 +135,46 @@ private static List<NetworkObject> GetAllNwGrpObjectsFromConn(ModellingConnectio
138135

139136
private static void GetObjectsFromAreas(List<ModellingNetworkAreaWrapper> areas, ref List<NetworkObject> objectList, bool resolved = false, bool resolveNetworkAreas = false)
140137
{
141-
foreach (var areaWrapper in areas)
138+
foreach (var areaWrapper in areas.Select(a => a.Content))
142139
{
143-
objectList.Add(areaWrapper.Content.ToNetworkObjectGroup(false, resolveNetworkAreas));
140+
objectList.Add(areaWrapper.ToNetworkObjectGroup(false, resolveNetworkAreas));
144141
if(resolved && resolveNetworkAreas)
145142
{
146-
foreach(var obj in areaWrapper.Content.ToNetworkObjectGroup().ObjectGroups)
143+
foreach(var obj in areaWrapper.ToNetworkObjectGroup().ObjectGroups.Where(o => o.Object != null))
147144
{
148-
if(obj.Object != null)
149-
{
150-
objectList.Add(obj.Object);
151-
}
145+
objectList.Add(obj.Object!);
152146
}
153147
}
154148
}
155149
}
156150

157151
private static void GetObjectsFromOtherGroups(List<ModellingNwGroupWrapper> nwGroups, ref List<NetworkObject> objectList, bool resolved = false)
158152
{
159-
foreach (var nwGrpWrapper in nwGroups)
153+
foreach (var nwGrpWrapper in nwGroups.Select(n => n.Content))
160154
{
161-
objectList.Add(nwGrpWrapper.Content.ToNetworkObjectGroup());
155+
objectList.Add(nwGrpWrapper.ToNetworkObjectGroup());
162156
if(resolved)
163157
{
164-
foreach(var obj in nwGrpWrapper.Content.ToNetworkObjectGroup().ObjectGroups)
158+
foreach(var obj in nwGrpWrapper.ToNetworkObjectGroup().ObjectGroups.Where(o => o.Object != null))
165159
{
166-
if(obj.Object != null)
167-
{
168-
objectList.Add(obj.Object);
169-
}
160+
objectList.Add(obj.Object!);
170161
}
171162
}
172163
}
173164
}
174165

175166
private static void GetObjectsFromAR(List<ModellingAppRoleWrapper> appRoles, ref List<NetworkObject> objectList, bool resolved = false, long dummyARid = 0)
176167
{
177-
foreach (var aRWrapper in appRoles.Where(a => a.Content.Id != dummyARid))
168+
foreach (var aRWrapper in appRoles.Select(w => w.Content).Where(a => a.Id != dummyARid))
178169
{
179-
objectList.Add(aRWrapper.Content.ToNetworkObjectGroup());
170+
objectList.Add(aRWrapper.ToNetworkObjectGroup());
180171
if(resolved)
181172
{
182-
foreach(var obj in aRWrapper.Content.ToNetworkObjectGroup().ObjectGroups)
173+
foreach(var obj in aRWrapper.ToNetworkObjectGroup().ObjectGroups.Where(o => o.Object != null))
183174
{
184-
if(obj.Object != null)
185-
{
186-
objectList.Add(obj.Object);
187-
}
175+
objectList.Add(obj.Object!);
188176
}
189-
}
177+
}
190178
}
191179
}
192180

roles/lib/files/FWO.ExternalSystems/Tufin.SecureChange/SCAccessRequestTicketTask.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FWO.Data;
22
using FWO.Data.Workflow;
33
using FWO.Data.Modelling;
4+
using FWO.Basics;
45

56
namespace FWO.ExternalSystems.Tufin.SecureChange
67
{
@@ -38,12 +39,12 @@ public override void FillTaskText(ExternalTicketTemplate template)
3839
ExtMgtData extMgt = ReqTask.OnManagement != null && ReqTask.OnManagement?.ExtMgtData != null ?
3940
System.Text.Json.JsonSerializer.Deserialize<ExtMgtData>(ReqTask.OnManagement?.ExtMgtData ?? "{}") : new();
4041
TaskText = template.TasksTemplate
41-
.Replace("@@ORDERNAME@@", "AR"+ ReqTask.TaskNumber.ToString())
42-
.Replace("@@TASKCOMMENT@@", ReqTask.GetFirstCommentText())
43-
.Replace("@@ACTION@@", MapActionType(ReqTask))
44-
.Replace("@@SOURCES@@", ConvertNetworkElems(template, UseModelled() ? ElemFieldType.modelled_source : ElemFieldType.source, extMgt.ExtName))
45-
.Replace("@@DESTINATIONS@@", ConvertNetworkElems(template, UseModelled() ? ElemFieldType.modelled_destination : ElemFieldType.destination, extMgt.ExtName))
46-
.Replace("@@SERVICES@@", ConvertServiceElems(template));
42+
.Replace(Placeholder.ORDERNAME, "AR"+ ReqTask.TaskNumber.ToString())
43+
.Replace(Placeholder.TASKCOMMENT, ReqTask.GetFirstCommentText())
44+
.Replace(Placeholder.ACTION, MapActionType(ReqTask))
45+
.Replace(Placeholder.SOURCES, ConvertNetworkElems(template, UseModelled() ? ElemFieldType.modelled_source : ElemFieldType.source, extMgt.ExtName))
46+
.Replace(Placeholder.DESTINATIONS, ConvertNetworkElems(template, UseModelled() ? ElemFieldType.modelled_destination : ElemFieldType.destination, extMgt.ExtName))
47+
.Replace(Placeholder.SERVICES, ConvertServiceElems(template));
4748
}
4849

4950
private static string MapActionType(WfReqTask reqTask)

roles/lib/files/FWO.ExternalSystems/Tufin.SecureChange/SCNetworkObjectModifyTicketTask.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using FWO.Basics;
12
using FWO.Data;
23
using FWO.Data.Workflow;
34
using FWO.Data.Modelling;
@@ -34,11 +35,11 @@ public override void FillTaskText(ExternalTicketTemplate template)
3435
System.Text.Json.JsonSerializer.Deserialize<ExtMgtData>(ReqTask.OnManagement?.ExtMgtData ?? "{}") : new();
3536
bool shortened = false;
3637
TaskText = template.TasksTemplate
37-
.Replace("@@GROUPNAME@@", Sanitizer.SanitizeJsonFieldMand(ReqTask.GetAddInfoValue(AdditionalInfoKeys.GrpName), ref shortened))
38-
.Replace("@@MANAGEMENT_ID@@", extMgt.ExtId ?? "0")
39-
.Replace("@@MANAGEMENT_NAME@@", extMgt.ExtName)
40-
.Replace("@@CHANGEACTION@@", ChangeAction)
41-
.Replace("@@MEMBERS@@", ConvertNetworkObjects(template, extMgt.ExtId, NamingConvention));
38+
.Replace(Placeholder.GROUPNAME, Sanitizer.SanitizeJsonFieldMand(ReqTask.GetAddInfoValue(AdditionalInfoKeys.GrpName), ref shortened))
39+
.Replace(Placeholder.MANAGEMENT_ID, extMgt.ExtId ?? "0")
40+
.Replace(Placeholder.MANAGEMENT_NAME, extMgt.ExtName)
41+
.Replace(Placeholder.CHANGEACTION, ChangeAction)
42+
.Replace(Placeholder.MEMBERS, ConvertNetworkObjects(template, extMgt.ExtId, NamingConvention));
4243
}
4344
}
4445
}

roles/lib/files/FWO.ExternalSystems/Tufin.SecureChange/SCTicket.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using FWO.Basics;
12
using FWO.Basics.Exceptions;
23
using FWO.Data;
34
using FWO.Data.Modelling;
@@ -108,7 +109,7 @@ public override async Task CreateRequestString(List<WfReqTask> tasks, List<IpPro
108109
{
109110
CreateTicketTasks(tasks, ipProtos, namingConvention);
110111
await CreateTicketText(tasks.FirstOrDefault());
111-
if (TicketText.Contains("@@"))
112+
if (TicketText.Contains(GlobalConst.kPlaceholderMarker))
112113
{
113114
throw new ConfigException("Template error. Unhandled placeholder found.");
114115
}
@@ -269,12 +270,12 @@ private async Task CreateTicketText(WfReqTask? reqTask)
269270
string appId = reqTask != null && reqTask.Owners.Count > 0 ? reqTask.Owners[0]?.Owner.ExtAppId ?? "" : "";
270271
string onBehalf = TicketSystem.LookupRequesterId ? (await LookupRequesterId(Requester)).ToString() : Requester;
271272
TicketText = actTicketTemplate
272-
.Replace("@@TICKET_SUBJECT@@", Subject)
273-
.Replace("@@PRIORITY@@", Priority)
274-
.Replace("@@ONBEHALF@@", onBehalf)
275-
.Replace("@@REASON@@", reqTask?.Reason ?? DefaultReason)
276-
.Replace("@@APPID@@", appId)
277-
.Replace("@@TASKS@@", string.Join(",", TicketTasks));
273+
.Replace(Placeholder.TICKET_SUBJECT, Subject)
274+
.Replace(Placeholder.PRIORITY, Priority)
275+
.Replace(Placeholder.ONBEHALF, onBehalf)
276+
.Replace(Placeholder.REASON, reqTask?.Reason ?? DefaultReason)
277+
.Replace(Placeholder.APPID, appId)
278+
.Replace(Placeholder.TASKS, string.Join(",", TicketTasks));
278279
bool shortened = false;
279280
TicketText = Sanitizer.SanitizeEolMand(TicketText, ref shortened);
280281
CheckForProperJson(TicketText);

roles/lib/files/FWO.ExternalSystems/Tufin.SecureChange/SCTicketTask.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ protected static string FillObjectTemplate(ExternalTicketTemplate template, stri
9494
{
9595
bool shortened = false;
9696
return template.ObjectTemplate
97-
.Replace("@@TYPE@@", type)
98-
.Replace("@@OBJECTNAME@@", Sanitizer.SanitizeJsonFieldMand(objInfo.Name, ref shortened))
99-
.Replace("@@OBJECT_TYPE@@", objInfo.Type)
100-
.Replace("@@OBJECT_DETAILS@@", objInfo.Details)
101-
.Replace("@@COMMENT@@", objInfo.Comment)
102-
.Replace("@@STATUS@@", objInfo.Status)
103-
.Replace("@@OBJUPDSTATUS@@", objInfo.UpdateStatus)
104-
.Replace("@@MANAGEMENT_ID@@", mgmId);
97+
.Replace(Placeholder.TYPE, type)
98+
.Replace(Placeholder.OBJECTNAME, Sanitizer.SanitizeJsonFieldMand(objInfo.Name, ref shortened))
99+
.Replace(Placeholder.OBJECT_TYPE, objInfo.Type)
100+
.Replace(Placeholder.OBJECT_DETAILS, objInfo.Details)
101+
.Replace(Placeholder.COMMENT, objInfo.Comment)
102+
.Replace(Placeholder.STATUS, objInfo.Status)
103+
.Replace(Placeholder.OBJUPDSTATUS, objInfo.UpdateStatus)
104+
.Replace(Placeholder.MANAGEMENT_ID, mgmId);
105105
}
106106

107107
/// {
@@ -115,30 +115,30 @@ protected static string FillObjectTemplateShort(ExternalTicketTemplate template,
115115
{
116116
bool shortened = false;
117117
return template.ObjectTemplateShort
118-
.Replace("@@OBJECTNAME@@", Sanitizer.SanitizeJsonFieldMand(objName, ref shortened))
119-
.Replace("@@STATUS@@", status)
120-
.Replace("@@OBJUPDSTATUS@@", objUpdStatus)
121-
.Replace("@@MANAGEMENT_ID@@", mgmId);
118+
.Replace(Placeholder.OBJECTNAME, Sanitizer.SanitizeJsonFieldMand(objName, ref shortened))
119+
.Replace(Placeholder.STATUS, status)
120+
.Replace(Placeholder.OBJUPDSTATUS, objUpdStatus)
121+
.Replace(Placeholder.MANAGEMENT_ID, mgmId);
122122
}
123123

124124
protected static string FillIpTemplate(ExternalTicketTemplate template, string ipString)
125125
{
126-
return template.IpTemplate.Replace("@@IP@@", ipString);
126+
return template.IpTemplate.Replace(Placeholder.IP, ipString);
127127
}
128128

129129
protected static string FillServiceTemplate(ExternalTicketTemplate template, string protocolName, string port, string serviceName)
130130
{
131-
return template.ServiceTemplate.Replace("@@PROTOCOLNAME@@", protocolName).Replace("@@PORT@@", port).Replace("@@SERVICENAME@@", serviceName);
131+
return template.ServiceTemplate.Replace(Placeholder.PROTOCOLNAME, protocolName).Replace(Placeholder.PORT, port).Replace(Placeholder.SERVICENAME, serviceName);
132132
}
133133

134134
protected static string FillIcmpTemplate(ExternalTicketTemplate template, string serviceName)
135135
{
136-
return template.IcmpTemplate.Replace("@@SERVICENAME@@", serviceName);
136+
return template.IcmpTemplate.Replace(Placeholder.SERVICENAME, serviceName);
137137
}
138138

139139
protected static string FillNwObjGroupTemplate(ExternalTicketTemplate template, string groupName, string mgtName)
140140
{
141-
return template.NwObjGroupTemplate.Replace("@@GROUPNAME@@", groupName).Replace("@@MANAGEMENT_NAME@@", mgtName);
141+
return template.NwObjGroupTemplate.Replace(Placeholder.GROUPNAME, groupName).Replace(Placeholder.MANAGEMENT_NAME, mgtName);
142142
}
143143

144144
protected string ConvertNetworkObjects(ExternalTicketTemplate template, string? mgmId, ModellingNamingConvention? namingConvention)

0 commit comments

Comments
 (0)