Skip to content

Commit 867287c

Browse files
Dynamic component creation was taking the KB encryption settings instead of the object settings.
1 parent be1d271 commit 867287c

File tree

1 file changed

+70
-40
lines changed
  • dotnet/src/dotnetframework/GxClasses/Middleware

1 file changed

+70
-40
lines changed

dotnet/src/dotnetframework/GxClasses/Middleware/GXHttp.cs

Lines changed: 70 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2538,13 +2538,14 @@ static public GXWebComponent getWebComponent(Object caller, string nameSpace, st
25382538
{
25392539

25402540
string url = name;
2541-
Object[] actualParms = null;
2542-
name = ObjectSignatureFromUrl(url, ctorParms, ref actualParms);
2541+
string completeName, queryParameters;
2542+
name = ObjectSignatureFromUrl(url, out completeName, out queryParameters);
25432543

25442544
if (url.Equals(name))
25452545
return new GXErrorWebComponent(name);
25462546
GXWebComponent webComp = getWebComponent(caller, nameSpace, name, ctorParms);
2547-
webComp.setParms(actualParms);
2547+
object[] urlParms = webComp.GetParmsFromUrl(completeName, queryParameters);
2548+
webComp.setParms(urlParms);
25482549
objComponent = webComp;
25492550
}
25502551
return objComponent;
@@ -2561,9 +2562,8 @@ private static string CleanObjectFromUrl(string url)
25612562
return url;
25622563
}
25632564

2564-
protected static string ObjectSignatureFromUrl(string url, Object[] ctorParms, ref object[] parms)
2565+
internal static string ObjectSignatureFromUrl(string url, out string completeName, out string queryParameters)
25652566
{
2566-
string parameters;
25672567
string name;
25682568
try
25692569
{
@@ -2572,7 +2572,7 @@ protected static string ObjectSignatureFromUrl(string url, Object[] ctorParms, r
25722572
if (!uri.IsAbsoluteUri)
25732573
uri = new Uri("http://gxhost/" + url);
25742574
name = uri.GetComponents(UriComponents.Path, UriFormat.UriEscaped);
2575-
parameters = uri.GetComponents(UriComponents.Query, UriFormat.UriEscaped);
2575+
queryParameters = uri.GetComponents(UriComponents.Query, UriFormat.UriEscaped);
25762576
}
25772577
catch (Exception)
25782578
{
@@ -2583,35 +2583,15 @@ protected static string ObjectSignatureFromUrl(string url, Object[] ctorParms, r
25832583
Regex r = new Regex(regexPattern);
25842584
Match m = r.Match(url);
25852585
name = m.Groups["p0"].Value;
2586-
parameters = m.Groups["q0"].Value;
2586+
queryParameters = m.Groups["q0"].Value;
25872587
}
25882588

2589+
completeName = name;
25892590
if (string.IsNullOrEmpty(name))
25902591
return url;
25912592

2592-
string completeName = name;
25932593
if (name.LastIndexOf('.') > 0)
25942594
name = name.Substring(0, name.LastIndexOf('.'));
2595-
2596-
IGxContext context = null;
2597-
foreach (object parm in ctorParms)
2598-
{
2599-
context = parm as IGxContext;
2600-
}
2601-
2602-
string encKey = GXUtil.ParmsEncryptionKey(context);
2603-
if (!String.IsNullOrEmpty(parameters))
2604-
parameters = GXUtil.DecryptParm(parameters, encKey);
2605-
2606-
// Remove "salt" part from parameter
2607-
if (!String.IsNullOrEmpty(encKey) && !String.IsNullOrEmpty(parameters) && parameters.StartsWith(completeName))
2608-
{
2609-
parameters = parameters.Substring(completeName.Length);
2610-
}
2611-
parms = HttpHelper.GetParameterValues(parameters);
2612-
for (int i = 0; i < parms.Length; i++)
2613-
parms[i] = GXUtil.UrlDecode((string)parms[i]);
2614-
26152595
return name;
26162596
}
26172597

@@ -2752,7 +2732,12 @@ protected void initialize(int objClass, int objId, int dbgLines, long hash)
27522732
protected void trkrng(int lineNro, int lineNro2) => dbgInfo?.TrkRng(lineNro, 0, lineNro2, 0);
27532733
protected void trkrng(int lineNro, int colNro, int lineNro2, int colNro2) => dbgInfo?.TrkRng(lineNro, colNro, lineNro2, colNro2);
27542734
}
2755-
2735+
public enum EncryptionType
2736+
{
2737+
SESSION,
2738+
SITE,
2739+
NONE
2740+
}
27562741
public abstract class GXWebComponent : GXHttpHandler
27572742
{
27582743

@@ -2783,26 +2768,67 @@ public void setjustcreated()
27832768

27842769
public void setparmsfromurl(string url)
27852770
{
2786-
Object[] urlParms = null;
2787-
GXHttpHandler.ObjectSignatureFromUrl(url, new Object[] { context }, ref urlParms);
2788-
if (urlParms != null)
2771+
string parameters, completeName;
2772+
ObjectSignatureFromUrl(url, out completeName, out parameters);
2773+
if (parameters != null)
27892774
{
2790-
this.setParms(urlParms);
2775+
object[] urlParms = GetParmsFromUrl(completeName, parameters);
2776+
setParms(urlParms);
27912777
}
27922778
}
27932779

27942780
public void setParms(object[] parms)
27952781
{
2796-
object[] FixedParms = new object[parms.Length];
2797-
ParameterInfo[] pars = GetType().GetMethod("execute").GetParameters();
2798-
for (int i = 0; i < pars.Length; i++)
2782+
if (parms != null)
27992783
{
2800-
if (i >= parms.Length)
2801-
break;
2802-
FixedParms[i] = convertparm(pars, i, parms[i]);
2784+
object[] FixedParms = new object[parms.Length];
2785+
ParameterInfo[] pars = GetType().GetMethod("execute").GetParameters();
2786+
for (int i = 0; i < pars.Length; i++)
2787+
{
2788+
if (i >= parms.Length)
2789+
break;
2790+
FixedParms[i] = convertparm(pars, i, parms[i]);
2791+
}
2792+
mFixedParms = FixedParms;
28032793
}
2804-
mFixedParms = FixedParms;
2794+
}
2795+
internal object[] GetParmsFromUrl(string completeName, string queryParameters)
2796+
{
2797+
if (!string.IsNullOrEmpty(queryParameters))
2798+
{
2799+
2800+
EncryptionType keySourceType = GetEncryptionType();
2801+
string encKey;
2802+
switch (keySourceType)
2803+
{
2804+
case EncryptionType.SESSION:
2805+
encKey = Crypto.Decrypt64(context.GetCookie("GX_SESSION_ID"), Crypto.GetServerKey());
2806+
break;
2807+
case EncryptionType.SITE:
2808+
encKey = Crypto.GetSiteKey();
2809+
break;
2810+
default:
2811+
encKey = null;
2812+
break;
2813+
}
2814+
2815+
queryParameters = GXUtil.DecryptParm(queryParameters, encKey);
2816+
2817+
// Remove "salt" part from parameter
2818+
if (!String.IsNullOrEmpty(encKey) && queryParameters.StartsWith(completeName))
2819+
{
2820+
queryParameters = queryParameters.Substring(completeName.Length);
2821+
}
2822+
object[] parms = HttpHelper.GetParameterValues(queryParameters);
2823+
for (int i = 0; i < parms.Length; i++)
2824+
parms[i] = GXUtil.UrlDecode((string)parms[i]);
28052825

2826+
return parms;
2827+
}
2828+
else
2829+
{
2830+
return Array.Empty<Object>();
2831+
}
28062832
}
28072833

28082834
public override object getParm(object[] parms, int index)
@@ -2826,6 +2852,10 @@ public virtual string Name
28262852
set { _prefixId = value; }
28272853
}
28282854

2855+
protected virtual EncryptionType GetEncryptionType()
2856+
{
2857+
return EncryptionType.NONE;
2858+
}
28292859
public void ComponentInit()
28302860
{
28312861
IsMain = false;

0 commit comments

Comments
 (0)