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"); } }
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; }
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; }