diff --git a/src/Covid19Radar.Api.Common/Common/KeyLock.cs b/src/Covid19Radar.Api.Common/Common/KeyLock.cs index ce93bdc5a..e1dc901f9 100644 --- a/src/Covid19Radar.Api.Common/Common/KeyLock.cs +++ b/src/Covid19Radar.Api.Common/Common/KeyLock.cs @@ -43,12 +43,12 @@ public class LockItem /// /// Lock wait handle /// - System.Threading.EventWaitHandle ev; + readonly System.Threading.EventWaitHandle ev; /// /// Identification key to lock /// - string key; + readonly string key; /// /// Constructor for initialization and acquireing locks diff --git a/src/Covid19Radar.Api.Common/DataAccess/CosmosDiagnosisRepository.cs b/src/Covid19Radar.Api.Common/DataAccess/CosmosDiagnosisRepository.cs deleted file mode 100644 index 253fd24b8..000000000 --- a/src/Covid19Radar.Api.Common/DataAccess/CosmosDiagnosisRepository.cs +++ /dev/null @@ -1,70 +0,0 @@ -/* 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 https://mozilla.org/MPL/2.0/. */ - -using Covid19Radar.Api.DataStore; -using Covid19Radar.Api.Models; -using Microsoft.Azure.Cosmos; -using Microsoft.Extensions.Logging; -using System; -using System.Linq; -using System.Threading.Tasks; - -namespace Covid19Radar.Api.DataAccess -{ - public class CosmosDiagnosisRepository : IDiagnosisRepository - { - private readonly ICosmos _db; - private readonly ILogger _logger; - - public CosmosDiagnosisRepository(ICosmos db, ILogger logger) - { - _db = db; - _logger = logger; - } - - public async Task DeleteAsync(IUser user) - { - _logger.LogInformation($"start {nameof(DeleteAsync)}"); - await _db.Diagnosis.DeleteItemAsync(user.GetId(), PartitionKey.None); - } - - public async Task GetAsync(string submissionNumber, string userUuid) - { - _logger.LogInformation($"start {nameof(GetAsync)}"); - var response = await _db.Diagnosis.ReadItemAsync(userUuid, PartitionKey.None); - return response.Resource; - } - - public async Task GetNotApprovedAsync() - { - _logger.LogInformation($"start {nameof(GetNotApprovedAsync)}"); - var q = new QueryDefinition("SELECT * FROM c WHERE c.Approved == false"); - var query = _db.Diagnosis.GetItemQueryIterator(q); - var e = Enumerable.Empty(); - while (query.HasMoreResults) - { - var r = await query.ReadNextAsync(); - e = e.Concat(r.Resource); - } - - return e.ToArray(); - } - - public async Task SubmitDiagnosisAsync(string SubmissionNumber, DateTimeOffset timestamp, string UserUuid, TemporaryExposureKeyModel[] Keys) - { - _logger.LogInformation($"start {nameof(SubmitDiagnosisAsync)}"); - var item = new DiagnosisModel() - { - id = UserUuid, - UserUuid = UserUuid, - SubmissionNumber = SubmissionNumber, - Approved = false, - Timestamp = timestamp.ToUnixTimeSeconds(), - Keys = Keys - }; - - return (await _db.Diagnosis.UpsertItemAsync(item)).Resource; - } - } -} diff --git a/src/Covid19Radar.Api.Common/DataAccess/IDiagnosisRepository.cs b/src/Covid19Radar.Api.Common/DataAccess/IDiagnosisRepository.cs deleted file mode 100644 index f89aa06b9..000000000 --- a/src/Covid19Radar.Api.Common/DataAccess/IDiagnosisRepository.cs +++ /dev/null @@ -1,21 +0,0 @@ -/* 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 https://mozilla.org/MPL/2.0/. */ - -using Covid19Radar.Api.Models; -using System; -using System.Threading.Tasks; - -namespace Covid19Radar.Api.DataAccess -{ - public interface IDiagnosisRepository - { - - Task GetNotApprovedAsync(); - Task GetAsync(string submissionNumber, string userUuid); - - Task SubmitDiagnosisAsync(string submissionNumber, DateTimeOffset timestamp, string userUuid, TemporaryExposureKeyModel[] Keys); - - Task DeleteAsync(IUser user); - } -} diff --git a/src/Covid19Radar.Api.Tests/Common/DataAccess/CosmosDiagnosisRepositoryTest.cs b/src/Covid19Radar.Api.Tests/Common/DataAccess/CosmosDiagnosisRepositoryTest.cs deleted file mode 100644 index 8d514f8ea..000000000 --- a/src/Covid19Radar.Api.Tests/Common/DataAccess/CosmosDiagnosisRepositoryTest.cs +++ /dev/null @@ -1,146 +0,0 @@ -/* 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 https://mozilla.org/MPL/2.0/. */ - -using Covid19Radar.Api.DataAccess; -using Covid19Radar.Api.DataStore; -using Covid19Radar.Api.Models; -using Microsoft.Azure.Cosmos; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace Covid19Radar.Api.Tests.Common.DataAccess -{ - [TestClass] - [TestCategory("Common")] - public class CosmosDiagnosisRepositoryTest - { - [TestMethod] - public void CreateMethod() - { - // preparation - var cosmos = new Mock(); - var logger = new Mock.LoggerMock(); - // action - var instance = new CosmosDiagnosisRepository(cosmos.Object, logger); - // assert - Assert.IsNotNull(instance); - - } - - [DataTestMethod] - [DataRow("")] - public async Task DeleteAsyncMethod(string userUuid) - { - // preparation - var model = new DiagnosisModel(); - var itemResponse = new Mock>(); - itemResponse.Setup(_ => _.Resource).Returns(model); - var cosmos = new Mock(); - cosmos.Setup(_ => _.Diagnosis.DeleteItemAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(itemResponse.Object) - .Verifiable(); - var logger = new Mock.LoggerMock(); - var user = new Mock(); - user.Setup(_ => _.UserUuid).Returns(userUuid); - var instance = new CosmosDiagnosisRepository(cosmos.Object, logger); - // action - await instance.DeleteAsync(user.Object); - // Assert - } - - [DataTestMethod] - [DataRow(null, null)] - [DataRow("", "")] - [DataRow("1", "2")] - public async Task GetAsyncMethod(string submissionNumber, string userUuid) - { - // preparation - var model = new DiagnosisModel(); - var itemResponse = new Mock>(); - itemResponse.Setup(_ => _.Resource).Returns(model); - var cosmos = new Mock(); - cosmos.Setup(_ => _.Diagnosis.ReadItemAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(itemResponse.Object) - .Verifiable(); - var logger = new Mock.LoggerMock(); - var instance = new CosmosDiagnosisRepository(cosmos.Object, logger); - // action - var result = await instance.GetAsync(submissionNumber, userUuid); - // Assert - Assert.AreEqual(model, result); - } - - [TestMethod] - public async Task GetNotApprovedAsyncMethod() - { - // preparation - var models = new List(); - models.Add(new DiagnosisModel()); - var cosmos = new Mock(); - - // repeat 2 - var feed = new Mock>(); - feed.SetupSequence(_ => _.HasMoreResults) - .Returns(true) - .Returns(true) - .Returns(false); - var feedResponse = new Mock>(); - feedResponse.Setup(_ => _.Resource).Returns(models); - feed.Setup(_ => _.ReadNextAsync(It.IsAny())) - .ReturnsAsync(feedResponse.Object); - cosmos.Setup(_ => _.Diagnosis.GetItemQueryIterator - (It.IsAny(), It.IsAny(), It.IsAny())) - .Returns(feed.Object) - .Verifiable(); - var logger = new Mock.LoggerMock(); - var instance = new CosmosDiagnosisRepository(cosmos.Object, logger); - // action - var result = await instance.GetNotApprovedAsync(); - // Assert - CollectionAssert.AreEqual(models.Concat(models).ToArray(), result); - } - - [DataTestMethod] - public async Task SubmitDiagnosisAsyncMethod() - { - // preparation - string SubmissionNumber = ""; - DateTimeOffset timestamp = DateTimeOffset.UtcNow; - string UserUuid = ""; - TemporaryExposureKeyModel[] keys = new TemporaryExposureKeyModel[] { new TemporaryExposureKeyModel() }; - var itemResponse = new Mock>(); - var cosmos = new Mock(); - cosmos.Setup(_ => _.Diagnosis.UpsertItemAsync - (It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((m, p, i, c) => - { - itemResponse.Setup(_ => _.Resource).Returns(m); - }) - .ReturnsAsync(itemResponse.Object) - .Verifiable(); - var logger = new Mock.LoggerMock(); - var instance = new CosmosDiagnosisRepository(cosmos.Object, logger); - // action - var result = await instance.SubmitDiagnosisAsync(SubmissionNumber, timestamp, UserUuid, keys); - // Assert - Assert.AreEqual(SubmissionNumber, result.SubmissionNumber); - Assert.AreEqual(timestamp.ToUnixTimeSeconds(), result.Timestamp); - Assert.AreEqual(UserUuid, result.UserUuid); - Assert.AreEqual(UserUuid, result.id); - CollectionAssert.AreEqual(keys, result.Keys); - } - - } -} diff --git a/src/Covid19Radar.Api.Tests/Common/QueryCacheTest.cs b/src/Covid19Radar.Api.Tests/Common/QueryCacheTest.cs index b005920e0..87b9ca669 100644 --- a/src/Covid19Radar.Api.Tests/Common/QueryCacheTest.cs +++ b/src/Covid19Radar.Api.Tests/Common/QueryCacheTest.cs @@ -17,20 +17,6 @@ namespace Covid19Radar.Api.Tests.Common [TestCategory("Common")] public class QueryCacheTest { - [DataTestMethod] - [DataRow(-1)] - [DataRow(0)] - [DataRow(1)] - [DataRow(10)] - [DataRow(100)] - [DataRow(int.MaxValue)] - [DataRow(int.MinValue)] - public void CreateMethod(int cacheTimeout) - { - // preparation - // action - var instance = new QueryCache(cacheTimeout); - } [DataTestMethod] [DataRow(60, "", "", 1)] diff --git a/src/Covid19Radar.Api.Tests/Covid19Radar.Api.Tests.csproj b/src/Covid19Radar.Api.Tests/Covid19Radar.Api.Tests.csproj index 2412f0fe1..730cfae02 100644 --- a/src/Covid19Radar.Api.Tests/Covid19Radar.Api.Tests.csproj +++ b/src/Covid19Radar.Api.Tests/Covid19Radar.Api.Tests.csproj @@ -32,6 +32,7 @@ + diff --git a/src/Covid19Radar.Api.Tests/DiagnosisApiTest.cs b/src/Covid19Radar.Api.Tests/DiagnosisApiTest.cs index 79e4fc091..c2a32cc58 100644 --- a/src/Covid19Radar.Api.Tests/DiagnosisApiTest.cs +++ b/src/Covid19Radar.Api.Tests/DiagnosisApiTest.cs @@ -25,19 +25,19 @@ public void CreateMethod() // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); var tekRepo = new Mock(); var validationServer = new Mock(); var deviceCheck = new Mock(); var verification = new Mock(); var logger = new Mock.LoggerMock(); var diagnosisApi = new DiagnosisApi(config.Object, - diagnosisRepo.Object, tekRepo.Object, deviceCheck.Object, verification.Object, validationServer.Object, logger); + + Assert.IsNotNull(diagnosisApi); } [DataTestMethod] @@ -56,12 +56,7 @@ public async Task RunAsyncMethod(bool isValid, // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); - diagnosisRepo.Setup(_ => _.SubmitDiagnosisAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(new DiagnosisModel()); + var tekRepo = new Mock(); var validationServer = new Mock(); validationServer.Setup(_ => _.Validate(It.IsAny())).Returns(IValidationServerService.ValidateResult.Success); @@ -72,7 +67,6 @@ public async Task RunAsyncMethod(bool isValid, var verification = new Mock(); var logger = new Mock.LoggerMock(); var diagnosisApi = new DiagnosisApi(config.Object, - diagnosisRepo.Object, tekRepo.Object, deviceCheck.Object, verification.Object, diff --git a/src/Covid19Radar.Api.Tests/V2DiagnosisApiTest.cs b/src/Covid19Radar.Api.Tests/V2DiagnosisApiTest.cs index a276068ca..b1d6656b9 100644 --- a/src/Covid19Radar.Api.Tests/V2DiagnosisApiTest.cs +++ b/src/Covid19Radar.Api.Tests/V2DiagnosisApiTest.cs @@ -28,14 +28,12 @@ public void CreateMethod() // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); var tekRepo = new Mock(); var validationServer = new Mock(); var deviceCheck = new Mock(); var verification = new Mock(); var logger = new Mock.LoggerMock(); var diagnosisApi = new V2DiagnosisApi(config.Object, - diagnosisRepo.Object, tekRepo.Object, deviceCheck.Object, verification.Object, @@ -68,12 +66,7 @@ HttpStatusCode expectedStatusCode // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); - diagnosisRepo.Setup(_ => _.SubmitDiagnosisAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(new DiagnosisModel()); + var tekRepo = new Mock(); var validationServer = new Mock(); validationServer.Setup(_ => _.Validate(It.IsAny())).Returns(IValidationServerService.ValidateResult.Success); @@ -84,7 +77,6 @@ HttpStatusCode expectedStatusCode var verification = new Mock(); var logger = new Mock.LoggerMock(); var diagnosisApi = new V2DiagnosisApi(config.Object, - diagnosisRepo.Object, tekRepo.Object, deviceCheck.Object, verification.Object, diff --git a/src/Covid19Radar.Api.Tests/V3DiagnosisApiTest.cs b/src/Covid19Radar.Api.Tests/V3DiagnosisApiTest.cs index 9e27fa3e3..6c265a7f5 100644 --- a/src/Covid19Radar.Api.Tests/V3DiagnosisApiTest.cs +++ b/src/Covid19Radar.Api.Tests/V3DiagnosisApiTest.cs @@ -75,12 +75,7 @@ HttpStatusCode expectedStatusCode // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); - diagnosisRepo.Setup(_ => _.SubmitDiagnosisAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(new DiagnosisModel()); + var tekRepo = new Mock(); var validationServer = new Mock(); validationServer.Setup(_ => _.Validate(It.IsAny())).Returns(IValidationServerService.ValidateResult.Success); @@ -184,12 +179,7 @@ HttpStatusCode expectedStatusCode // preparation var config = new Mock(); config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2"); - var diagnosisRepo = new Mock(); - diagnosisRepo.Setup(_ => _.SubmitDiagnosisAsync(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(new DiagnosisModel()); + var tekRepo = new Mock(); var validationServer = new Mock(); validationServer.Setup(_ => _.Validate(It.IsAny())).Returns(IValidationServerService.ValidateResult.Success); diff --git a/src/Covid19Radar.Api/DiagnosisApi.cs b/src/Covid19Radar.Api/DiagnosisApi.cs index cf4e86908..dc51f2dd8 100644 --- a/src/Covid19Radar.Api/DiagnosisApi.cs +++ b/src/Covid19Radar.Api/DiagnosisApi.cs @@ -31,7 +31,6 @@ public class DiagnosisApi public DiagnosisApi( IConfiguration config, - IDiagnosisRepository diagnosisRepository, ITemporaryExposureKeyRepository tekRepository, IDeviceValidationService deviceCheck, IVerificationService verificationService, diff --git a/src/Covid19Radar.Api/Services/DeviceValidationAppleService.cs b/src/Covid19Radar.Api/Services/DeviceValidationAppleService.cs index 1d6bdd3c6..b9e7a3b4b 100644 --- a/src/Covid19Radar.Api/Services/DeviceValidationAppleService.cs +++ b/src/Covid19Radar.Api/Services/DeviceValidationAppleService.cs @@ -84,7 +84,6 @@ public async Task Validation(IAppleDeviceVerification deviceVerification, var response = await ClientApple.SendAsync(request); if (!response.IsSuccessStatusCode) { - var responseBody = await response.Content.ReadAsStringAsync(); Logger.LogWarning($"iOS device check failed.\r\n{nameof(HttpRequestMessage)} : {request}\r\n{nameof(HttpResponseMessage)} : {response}"); } @@ -114,36 +113,5 @@ static string GenerateClientSecretJWT(DateTimeOffset requestTime, string keyId, return Jose.JWT.Encode(payload, cngKey, Jose.JwsAlgorithm.ES256, headers); } - static string CleanP8Key(string p8Contents) - { - // Remove whitespace - var tmp = Regex.Replace(p8Contents, "\\s+", string.Empty, RegexOptions.Singleline); - - // Remove `---- BEGIN PRIVATE KEY ----` bits - tmp = Regex.Replace(tmp, "-{1,}.*?-{1,}", string.Empty, RegexOptions.Singleline); - - return tmp; - } - - static string Base64UrlEncode(byte[] data) - { - var base64 = Convert.ToBase64String(data, 0, data.Length); - var base64Url = new StringBuilder(); - - foreach (var c in base64) - { - if (c == '+') - base64Url.Append('-'); - else if (c == '/') - base64Url.Append('_'); - else if (c == '=') - break; - else - base64Url.Append(c); - } - - return base64Url.ToString(); - } - } } diff --git a/src/Covid19Radar.Api/Startup.cs b/src/Covid19Radar.Api/Startup.cs index 1cdc6f0d8..2cfce869e 100644 --- a/src/Covid19Radar.Api/Startup.cs +++ b/src/Covid19Radar.Api/Startup.cs @@ -27,7 +27,6 @@ public override void Configure(IFunctionsHostBuilder builder) builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); diff --git a/src/Covid19Radar.Api/V2DiagnosisApi.cs b/src/Covid19Radar.Api/V2DiagnosisApi.cs index bab031382..0365c1f74 100644 --- a/src/Covid19Radar.Api/V2DiagnosisApi.cs +++ b/src/Covid19Radar.Api/V2DiagnosisApi.cs @@ -32,7 +32,6 @@ public class V2DiagnosisApi public V2DiagnosisApi( IConfiguration config, - IDiagnosisRepository diagnosisRepository, ITemporaryExposureKeyRepository tekRepository, IDeviceValidationService deviceCheck, IVerificationService verificationService,