SEBWIN-309: Corrected implementation of configuration key.
This commit is contained in:
parent
f89b0d8a2a
commit
7df1fe5f03
7 changed files with 66 additions and 7 deletions
|
@ -107,7 +107,7 @@ namespace SafeExamBrowser.Browser.Handlers
|
|||
var headers = new NameValueCollection(request.Headers);
|
||||
var urlWithoutFragment = request.Url.Split('#')[0];
|
||||
var hash = algorithm.ComputeHash(Encoding.UTF8.GetBytes(urlWithoutFragment + settings.HashValue));
|
||||
var configurationKey = BitConverter.ToString(hash).Replace("-", string.Empty);
|
||||
var configurationKey = BitConverter.ToString(hash).ToLower().Replace("-", string.Empty);
|
||||
|
||||
// TODO: Implement Browser Exam Key calculation.
|
||||
// headers["X-SafeExamBrowser-RequestHash"] = ...;
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 2020 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 System.Reflection;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using SafeExamBrowser.Configuration.ConfigurationData;
|
||||
using SafeExamBrowser.Settings;
|
||||
|
||||
namespace SafeExamBrowser.Configuration.UnitTests.ConfigurationData
|
||||
{
|
||||
[TestClass]
|
||||
public class DataProcessorTests
|
||||
{
|
||||
private DataProcessor sut;
|
||||
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
sut = new DataProcessor();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MustCalculateCorrectHashValue()
|
||||
{
|
||||
var formatter = new BinaryFormatter();
|
||||
var path1 = $"{nameof(SafeExamBrowser)}.{nameof(Configuration)}.{nameof(UnitTests)}.{nameof(ConfigurationData)}.TestDictionary1.bin";
|
||||
var path2 = $"{nameof(SafeExamBrowser)}.{nameof(Configuration)}.{nameof(UnitTests)}.{nameof(ConfigurationData)}.TestDictionary2.bin";
|
||||
var path3 = $"{nameof(SafeExamBrowser)}.{nameof(Configuration)}.{nameof(UnitTests)}.{nameof(ConfigurationData)}.TestDictionary3.bin";
|
||||
var stream1 = Assembly.GetAssembly(GetType()).GetManifestResourceStream(path1);
|
||||
var stream2 = Assembly.GetAssembly(GetType()).GetManifestResourceStream(path2);
|
||||
var stream3 = Assembly.GetAssembly(GetType()).GetManifestResourceStream(path3);
|
||||
var data1 = formatter.Deserialize(stream1) as IDictionary<string, object>;
|
||||
var data2 = formatter.Deserialize(stream2) as IDictionary<string, object>;
|
||||
var data3 = formatter.Deserialize(stream3) as IDictionary<string, object>;
|
||||
var settings1 = new AppSettings();
|
||||
var settings2 = new AppSettings();
|
||||
var settings3 = new AppSettings();
|
||||
|
||||
sut.Process(data1, settings1);
|
||||
sut.Process(data2, settings2);
|
||||
sut.Process(data3, settings3);
|
||||
|
||||
Assert.AreEqual("6063c3351ed1ac878c05072598d5079e30ca763c957d8e04bd45131c08f88d1a", settings1.Browser.HashValue);
|
||||
Assert.AreEqual("4fc002d2ae4faf994a14bede54d95ac58a1a2cb9b59bc5b4277ff29559b46e3d", settings2.Browser.HashValue);
|
||||
Assert.AreEqual("ab426e25b795c917f1fb40f7ef8e5757ef97d7c7ad6792e655c4421d47329d7a", settings3.Browser.HashValue);
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -87,6 +87,7 @@
|
|||
<Reference Include="System.Xml.Linq" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ConfigurationData\DataProcessorTests.cs" />
|
||||
<Compile Include="ConfigurationRepositoryTests.cs" />
|
||||
<Compile Include="Cryptography\HashAlgorithmTests.cs" />
|
||||
<Compile Include="Cryptography\PasswordEncryptionTests.cs" />
|
||||
|
@ -106,6 +107,9 @@
|
|||
</None>
|
||||
<EmbeddedResource Include="DataFormats\XmlTestSettings.xml" />
|
||||
<EmbeddedResource Include="UnitTestCert.pfx" />
|
||||
<EmbeddedResource Include="ConfigurationData\TestDictionary1.bin" />
|
||||
<EmbeddedResource Include="ConfigurationData\TestDictionary2.bin" />
|
||||
<EmbeddedResource Include="ConfigurationData\TestDictionary3.bin" />
|
||||
<None Include="packages.config">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
|
|
|
@ -12,7 +12,6 @@ using System.Globalization;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using SafeExamBrowser.Settings;
|
||||
|
||||
namespace SafeExamBrowser.Configuration.ConfigurationData
|
||||
|
@ -28,22 +27,23 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
|
|||
{
|
||||
using (var algorithm = new SHA256Managed())
|
||||
using (var stream = new MemoryStream())
|
||||
using (var writer = new StreamWriter(stream, Encoding.UTF8))
|
||||
using (var writer = new StreamWriter(stream))
|
||||
{
|
||||
Serialize(rawData, writer);
|
||||
|
||||
writer.Flush();
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
var hash = algorithm.ComputeHash(stream);
|
||||
var hashString = BitConverter.ToString(hash).Replace("-", string.Empty);
|
||||
var hashBytes = algorithm.ComputeHash(stream);
|
||||
var hashValue = BitConverter.ToString(hashBytes).ToLower().Replace("-", string.Empty);
|
||||
|
||||
settings.Browser.HashValue = hashString;
|
||||
settings.Browser.HashValue = hashValue;
|
||||
}
|
||||
}
|
||||
|
||||
private void Serialize(IDictionary<string, object> dictionary, StreamWriter stream)
|
||||
{
|
||||
var orderedByKey = dictionary.OrderBy(d => d.Key, StringComparer.OrdinalIgnoreCase).ToList();
|
||||
var orderedByKey = dictionary.OrderBy(d => d.Key, StringComparer.InvariantCulture).ToList();
|
||||
|
||||
stream.Write('{');
|
||||
|
||||
|
|
Loading…
Reference in a new issue