SEBWIN-314: Started with network filter implementation.
This commit is contained in:
		
							parent
							
								
									d54d7c17dc
								
							
						
					
					
						commit
						938afcb4a7
					
				
					 12 changed files with 290 additions and 0 deletions
				
			
		|  | @ -0,0 +1,66 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using SafeExamBrowser.Contracts.Configuration.Settings; | ||||||
|  | using SafeExamBrowser.Contracts.Network.Filter; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Configuration.ConfigurationData | ||||||
|  | { | ||||||
|  | 	internal partial class DataMapper | ||||||
|  | 	{ | ||||||
|  | 		private void MapEnableContentRequestFilter(Settings settings, object value) | ||||||
|  | 		{ | ||||||
|  | 			if (value is bool enable) | ||||||
|  | 			{ | ||||||
|  | 				settings.Network.EnableContentRequestFilter = enable; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		private void MapEnableMainRequestFilter(Settings settings, object value) | ||||||
|  | 		{ | ||||||
|  | 			if (value is bool enable) | ||||||
|  | 			{ | ||||||
|  | 				settings.Network.EnableMainRequestFilter = enable; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		private void MapUrlFilterRules(Settings settings, object value) | ||||||
|  | 		{ | ||||||
|  | 			const int ALLOW = 1; | ||||||
|  | 
 | ||||||
|  | 			if (value is IEnumerable<IDictionary<string, object>> ruleDataList) | ||||||
|  | 			{ | ||||||
|  | 				foreach (var ruleData in ruleDataList) | ||||||
|  | 				{ | ||||||
|  | 					if (ruleData.TryGetValue(Keys.Network.Filter.RuleIsActive, out var v) && v is bool active && active) | ||||||
|  | 					{ | ||||||
|  | 						var rule = new FilterRule(); | ||||||
|  | 
 | ||||||
|  | 						if (ruleData.TryGetValue(Keys.Network.Filter.RuleExpression, out v) && v is string expression) | ||||||
|  | 						{ | ||||||
|  | 							rule.Expression = expression; | ||||||
|  | 						} | ||||||
|  | 
 | ||||||
|  | 						if (ruleData.TryGetValue(Keys.Network.Filter.RuleAction, out v) && v is int action) | ||||||
|  | 						{ | ||||||
|  | 							rule.Result = action == ALLOW ? FilterResult.Allow : FilterResult.Block ; | ||||||
|  | 						} | ||||||
|  | 
 | ||||||
|  | 						if (ruleData.TryGetValue(Keys.Network.Filter.RuleExpressionIsRegex, out v) && v is bool regex) | ||||||
|  | 						{ | ||||||
|  | 							rule.Type = regex ? FilterType.Regex : FilterType.Simplified; | ||||||
|  | 						} | ||||||
|  | 
 | ||||||
|  | 						settings.Network.FilterRules.Add(rule); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -22,6 +22,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData | ||||||
| 				MapConfigurationFileSettings(item.Key, item.Value, settings); | 				MapConfigurationFileSettings(item.Key, item.Value, settings); | ||||||
| 				MapGeneralSettings(item.Key, item.Value, settings); | 				MapGeneralSettings(item.Key, item.Value, settings); | ||||||
| 				MapInputSettings(item.Key, item.Value, settings); | 				MapInputSettings(item.Key, item.Value, settings); | ||||||
|  | 				MapNetworkSettings(item.Key, item.Value, settings); | ||||||
| 				MapSecuritySettings(item.Key, item.Value, settings); | 				MapSecuritySettings(item.Key, item.Value, settings); | ||||||
| 				MapUserInterfaceSettings(item.Key, item.Value, settings); | 				MapUserInterfaceSettings(item.Key, item.Value, settings); | ||||||
| 			} | 			} | ||||||
|  | @ -192,6 +193,22 @@ namespace SafeExamBrowser.Configuration.ConfigurationData | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		private void MapNetworkSettings(string key, object value, Settings settings) | ||||||
|  | 		{ | ||||||
|  | 			switch (key) | ||||||
|  | 			{ | ||||||
|  | 				case Keys.Network.Filter.EnableContentRequestFilter: | ||||||
|  | 					MapEnableContentRequestFilter(settings, value); | ||||||
|  | 					break; | ||||||
|  | 				case Keys.Network.Filter.EnableMainRequestFilter: | ||||||
|  | 					MapEnableMainRequestFilter(settings, value); | ||||||
|  | 					break; | ||||||
|  | 				case Keys.Network.Filter.UrlFilterRules: | ||||||
|  | 					MapUrlFilterRules(settings, value); | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		private void MapSecuritySettings(string key, object value, Settings settings) | 		private void MapSecuritySettings(string key, object value, Settings settings) | ||||||
| 		{ | 		{ | ||||||
| 			switch (key) | 			switch (key) | ||||||
|  |  | ||||||
|  | @ -113,6 +113,17 @@ namespace SafeExamBrowser.Configuration.ConfigurationData | ||||||
| 				internal const string CertificateType = "type"; | 				internal const string CertificateType = "type"; | ||||||
| 				internal const string EmbeddedCertificates = "embeddedCertificates"; | 				internal const string EmbeddedCertificates = "embeddedCertificates"; | ||||||
| 			} | 			} | ||||||
|  | 
 | ||||||
|  | 			internal static class Filter | ||||||
|  | 			{ | ||||||
|  | 				internal const string EnableContentRequestFilter = "URLFilterEnableContentFilter"; | ||||||
|  | 				internal const string EnableMainRequestFilter = "URLFilterEnable"; | ||||||
|  | 				internal const string RuleAction = "action"; | ||||||
|  | 				internal const string RuleIsActive = "active"; | ||||||
|  | 				internal const string RuleExpression = "expression"; | ||||||
|  | 				internal const string RuleExpressionIsRegex = "regex"; | ||||||
|  | 				internal const string UrlFilterRules = "URLFilterRules"; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		internal static class Registry | 		internal static class Registry | ||||||
|  |  | ||||||
|  | @ -81,6 +81,9 @@ | ||||||
|     <Compile Include="ConfigurationData\DataMapper.Input.cs"> |     <Compile Include="ConfigurationData\DataMapper.Input.cs"> | ||||||
|       <DependentUpon>DataMapper.cs</DependentUpon> |       <DependentUpon>DataMapper.cs</DependentUpon> | ||||||
|     </Compile> |     </Compile> | ||||||
|  |     <Compile Include="ConfigurationData\DataMapper.Network.cs"> | ||||||
|  |       <DependentUpon>DataMapper.cs</DependentUpon> | ||||||
|  |     </Compile> | ||||||
|     <Compile Include="ConfigurationData\DataMapper.UserInterface.cs"> |     <Compile Include="ConfigurationData\DataMapper.UserInterface.cs"> | ||||||
|       <DependentUpon>DataMapper.cs</DependentUpon> |       <DependentUpon>DataMapper.cs</DependentUpon> | ||||||
|     </Compile> |     </Compile> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,41 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using SafeExamBrowser.Contracts.Network.Filter; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Configuration.Settings | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines all configuration options for network functionality. | ||||||
|  | 	/// </summary> | ||||||
|  | 	[Serializable] | ||||||
|  | 	public class NetworkSettings | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Defines whether all content requests for a web page should be filtered according to the defined <see cref="FilterRules"/>. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public bool EnableContentRequestFilter { get; set; } | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Defines whether the main request for a web page should be filtered according to the defined <see cref="FilterRules"/>. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public bool EnableMainRequestFilter { get; set; } | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Defines all rules to be used to filter network requests. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public IList<FilterRule> FilterRules { get; set; } | ||||||
|  | 
 | ||||||
|  | 		public NetworkSettings() | ||||||
|  | 		{ | ||||||
|  | 			FilterRules = new List<FilterRule>(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -67,6 +67,11 @@ namespace SafeExamBrowser.Contracts.Configuration.Settings | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
| 		public MouseSettings Mouse { get; set; } | 		public MouseSettings Mouse { get; set; } | ||||||
| 
 | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// All network-related settings. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public NetworkSettings Network { get; set; } | ||||||
|  | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The hash code of the quit password. | 		/// The hash code of the quit password. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | @ -94,6 +99,7 @@ namespace SafeExamBrowser.Contracts.Configuration.Settings | ||||||
| 			Browser = new BrowserSettings(); | 			Browser = new BrowserSettings(); | ||||||
| 			Keyboard = new KeyboardSettings(); | 			Keyboard = new KeyboardSettings(); | ||||||
| 			Mouse = new MouseSettings(); | 			Mouse = new MouseSettings(); | ||||||
|  | 			Network = new NetworkSettings(); | ||||||
| 			Service = new ServiceSettings(); | 			Service = new ServiceSettings(); | ||||||
| 			Taskbar = new TaskbarSettings(); | 			Taskbar = new TaskbarSettings(); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										26
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterResult.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterResult.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Network.Filter | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines all possible results of a request filter operation. | ||||||
|  | 	/// </summary> | ||||||
|  | 	public enum FilterResult | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Indicates that a request should be allowed. | ||||||
|  | 		/// </summary> | ||||||
|  | 		Allow, | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Indicates that a request should be blocked. | ||||||
|  | 		/// </summary> | ||||||
|  | 		Block | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterRule.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterRule.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Network.Filter | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines a network filter rule. | ||||||
|  | 	/// </summary> | ||||||
|  | 	[Serializable] | ||||||
|  | 	public class FilterRule | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The expression according to which requests should be filtered. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public string Expression { get; set; } | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The filter result to be used when the <see cref="Expression"/> matches. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public FilterResult Result { get; set; } | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The filter type which defines how the <see cref="Expression"/> is processed. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public FilterType Type { get; set; } | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterType.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								SafeExamBrowser.Contracts/Network/Filter/FilterType.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Network.Filter | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines all possible request filter types. | ||||||
|  | 	/// </summary> | ||||||
|  | 	public enum FilterType | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The filter is based on a regular expression. | ||||||
|  | 		/// </summary> | ||||||
|  | 		Regex, | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The filter is based on a simplified expression with wildcards. | ||||||
|  | 		/// </summary> | ||||||
|  | 		Simplified | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								SafeExamBrowser.Contracts/Network/Filter/IRequestFilter.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								SafeExamBrowser.Contracts/Network/Filter/IRequestFilter.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Network.Filter | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines a filter to process network requests. | ||||||
|  | 	/// </summary> | ||||||
|  | 	public interface IRequestFilter | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Defines the default result to be returned by <see cref="Process(Request)"/> if no filter rule matches. | ||||||
|  | 		/// </summary> | ||||||
|  | 		FilterResult Default { set; } | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Loads the given <see cref="FilterRule"/> to be used when processing a request. | ||||||
|  | 		/// </summary> | ||||||
|  | 		void Load(FilterRule rule); | ||||||
|  | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Filters the given request according to the loaded <see cref="FilterRule"/>. | ||||||
|  | 		/// </summary> | ||||||
|  | 		FilterResult Process(Request request); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								SafeExamBrowser.Contracts/Network/Request.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								SafeExamBrowser.Contracts/Network/Request.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.Network | ||||||
|  | { | ||||||
|  | 	/// <summary> | ||||||
|  | 	/// Defines a network request. | ||||||
|  | 	/// </summary> | ||||||
|  | 	public class Request | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// The uri of the request. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public Uri Uri { get; set; } | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -86,6 +86,8 @@ | ||||||
|     <Compile Include="Configuration\Settings\ActionCenterSettings.cs" /> |     <Compile Include="Configuration\Settings\ActionCenterSettings.cs" /> | ||||||
|     <Compile Include="Configuration\Settings\AudioSettings.cs" /> |     <Compile Include="Configuration\Settings\AudioSettings.cs" /> | ||||||
|     <Compile Include="Configuration\Settings\BrowserWindowSettings.cs" /> |     <Compile Include="Configuration\Settings\BrowserWindowSettings.cs" /> | ||||||
|  |     <Compile Include="Network\Filter\FilterRule.cs" /> | ||||||
|  |     <Compile Include="Configuration\Settings\NetworkSettings.cs" /> | ||||||
|     <Compile Include="Configuration\Settings\ServiceSettings.cs" /> |     <Compile Include="Configuration\Settings\ServiceSettings.cs" /> | ||||||
|     <Compile Include="Configuration\Settings\UserInterfaceMode.cs" /> |     <Compile Include="Configuration\Settings\UserInterfaceMode.cs" /> | ||||||
|     <Compile Include="Applications\Events\IconChangedEventHandler.cs" /> |     <Compile Include="Applications\Events\IconChangedEventHandler.cs" /> | ||||||
|  | @ -100,6 +102,10 @@ | ||||||
|     <Compile Include="Lockdown\IFeatureConfigurationFactory.cs" /> |     <Compile Include="Lockdown\IFeatureConfigurationFactory.cs" /> | ||||||
|     <Compile Include="Lockdown\IFeatureConfigurationMonitor.cs" /> |     <Compile Include="Lockdown\IFeatureConfigurationMonitor.cs" /> | ||||||
|     <Compile Include="Lockdown\ISystemConfigurationUpdate.cs" /> |     <Compile Include="Lockdown\ISystemConfigurationUpdate.cs" /> | ||||||
|  |     <Compile Include="Network\Filter\FilterType.cs" /> | ||||||
|  |     <Compile Include="Network\Filter\IRequestFilter.cs" /> | ||||||
|  |     <Compile Include="Network\Filter\FilterResult.cs" /> | ||||||
|  |     <Compile Include="Network\Request.cs" /> | ||||||
|     <Compile Include="Runtime\IRuntimeController.cs" /> |     <Compile Include="Runtime\IRuntimeController.cs" /> | ||||||
|     <Compile Include="Core\OperationModel\Events\ActionRequiredEventArgs.cs" /> |     <Compile Include="Core\OperationModel\Events\ActionRequiredEventArgs.cs" /> | ||||||
|     <Compile Include="Core\OperationModel\Events\ActionRequiredEventHandler.cs" /> |     <Compile Include="Core\OperationModel\Events\ActionRequiredEventHandler.cs" /> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 dbuechel
						dbuechel