Ejemplo n.º 1
0
        public void Modify(out FarmSetsContext farmSetsContext,
                           out DeviceInfo deviceInfo,
                           out AccessConditions accessConditions,
                           CustomizationContextData context)
        {
            Tracer.TraceInfo("ClientNameRewrite: rewrite from rule customization");

            farmSetsContext  = context.FarmSetsContext;
            deviceInfo       = context.DeviceInfo;
            accessConditions = context.AccessConditions;

            // Read the client name rewrite rule from the app settings
            // eg
            //   <appSettings>
            //     <add key="clientNameRewriteRule" value="$U">
            //  Rules:
            //      $U - user name
            //      $D - user domain
            //      $N - client name
            //      $R - Roaming status - "I":internal or "E":external
            //      $A - Detected Address
            //      $S - Supplied Address
            //      $V - DeviceID
            //      $G - gateway name (without domain)
            //      $P - platform (WIndows, MAc, LInux, IOs, ANdroid, CHromebook, BRowser,
            //                     BLackberry, WindowsRt, WindowsPhone, UNknown)

            // Read template string from web.config <appSettings> element
            string clientNameRewriteRule = ConfigurationManager.AppSettings["clientNameRewriteRule"];

            if (clientNameRewriteRule != "")
            {
                Tracer.TraceInfo("ClientNameRewrite: using rule: " + clientNameRewriteRule);

                // check against illegal char list
                char[] BAD_CLIENTNAME_CHARS = "\"/\\[]:;|=,+*?<>".ToCharArray();
                if (clientNameRewriteRule.IndexOfAny(BAD_CLIENTNAME_CHARS) == -1)
                {
                    // valid template: fill it out from context
                    string newClientName = CNrewrite(clientNameRewriteRule, context);
                    Tracer.TraceInfo("ClientNameRewrite: client Name post rewrite = " + newClientName);
                    // overwrite device info
                    deviceInfo.ClientName = newClientName;
                }
                else
                {
                    Tracer.TraceError("ClientNameRewrite: client name rule {0} contains illegal characters", clientNameRewriteRule);
                }
            }
            else
            {
                Tracer.TraceError("ClientNameRewrite: No Client Name rewrite rule supplied");
            }
        }
Ejemplo n.º 2
0
        public void Modify(out FarmSetsContext farmSetsContext,
                           out DeviceInfo deviceInfo,
                           out AccessConditions accessConditions,
                           CustomizationContextData context)
        {
            string GatewayName = AGCheck.ISAGEE(context);
            //LAN, keep clientname as is.
            string newClientName = context.DeviceInfo.ClientName;

            if (GatewayName != "")
            {
                string DetectedAddress = context.DeviceInfo.DetectedAddress;
                try
                {
                    //IPVPN subnets
                    if (DetectedAddress.StartsWith("10.80") || DetectedAddress.StartsWith("10.88") || DetectedAddress.StartsWith("10.89"))
                    {
                        newClientName = "IN_" + DetectedAddress;
                    }
                    //Assuta NAT.
                    else if (DetectedAddress.Contains("192.168.21.12"))
                    {
                        newClientName = "AS_" + DetectedAddress;
                    }
                    //Everything else is external.
                    else
                    {
                        newClientName = "EX_" + DetectedAddress;
                    }
                    //Just in case the address is not detected, set EX as client name as fallback for security.
                    if (DetectedAddress == null)
                    {
                        newClientName = "EX_" + context.DeviceInfo.ClientName;
                    }
                    //Max client name is 20 characters.
                    if (newClientName.Length > 20)
                    {
                        newClientName = newClientName.Substring(0, 20);
                    }
                }
                catch (Exception rdx) { newClientName = "ERR_" + context.DeviceInfo.ClientName; }
            }
            dataCollect(context);

            farmSetsContext       = context.FarmSetsContext;
            deviceInfo            = context.DeviceInfo;
            deviceInfo.ClientName = newClientName;
            accessConditions      = context.AccessConditions;
        }
        public void Modify(
            out FarmSetsContext farmSetsContext,
            out DeviceInfo deviceInfo,
            out AccessConditions accessConditions,
            CustomizationContextData context)
        {
            // Example: detect which NetScaler Gateway the user connected through and override the client name for
            // later policy or general use cases.
            // Note: client name modification only is passed to session if overrideclientname is set in web.config
            var gateway = context.RequestGateway;

            Tracer.TraceInfo("Request via gateway: {0}", gateway != null ? gateway.Name : "(None)");

            // Default to Internal Connection (not via gateway) - Add "LAN" to start of client name
            string gwPrefix = "LAN";

            if (gateway != null)
            {
                var gatewayHost = gateway.Address.Host;
                if (gatewayHost.Contains(".mycorp.co.uk") || gatewayHost.Contains(".mycorp.ch"))
                {
                    // Connection made to European gateways - Add "EU-" to start of client name
                    gwPrefix = "EU-";
                }
                else
                {
                    // Connection Not made to European gateways - Add "ROW" to start of client name
                    gwPrefix = "ROW";
                }
            }

            deviceInfo = context.DeviceInfo;

            // Now modify Client Name for use in other customisations or back end policies
            // Note: only comes out to session if overrideclientname is on
            string newClientName = gwPrefix + deviceInfo.ClientName;

            if (newClientName.Length > 20)
            {
                newClientName = newClientName.Substring(0, 20); // ensure we don't exceeed max length
            }

            deviceInfo.ClientName = newClientName;

            // We do not customize other parameters - pass them unchanged.
            farmSetsContext  = context.FarmSetsContext;
            accessConditions = context.AccessConditions;
        }
        public void Modify(
            out FarmSetsContext farmSetsContext,
            out DeviceInfo deviceInfo,
            out AccessConditions accessConditions,
            CustomizationContextData context)
        {
            // Example: detect native Receivers on Android or iOS devices and set Access Condition for later
            // policy handling applying to those platforms
            accessConditions = context.AccessConditions;
            if (IsRequestFromTablet(context))
            {
                // We need to specify the AG farm to which this condition applies.
                // You (as implementer) know which will be appropriate.
                const string agFarmUrl             = "ag.farm.url";
                const string tabletAccessCondition = "ClientTabletOS";
                accessConditions = AddAccessCondition(accessConditions, tabletAccessCondition, agFarmUrl);
            }

            // We do not customize other parameters - pass them unchanged.
            farmSetsContext = context.FarmSetsContext;
            deviceInfo      = context.DeviceInfo;
        }
Ejemplo n.º 5
0
        public void Modify(
            out FarmSetsContext farmSetsContext,
            out DeviceInfo deviceInfo,
            out AccessConditions accessConditions,
            CustomizationContextData context)
        {
            farmSetsContext = new FarmSetsContext
            {
                Farms = context.FarmSetsContext.Farms,
                EquivalentFarmSets =
                    PrioritiseFarm1()
                                              ? new List <EquivalentFarmSet> {
                    Farm1, Farm2
                }
                                              : new List <EquivalentFarmSet> {
                    Farm2, Farm1
                }
            };

            // We do not customize other parameters - pass them unchanged.
            deviceInfo       = context.DeviceInfo;
            accessConditions = context.AccessConditions;
        }