@@ -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