public async Task <DetailResponse <SimulatorNetwork> > GetSimulatorNetworkAsync(string id) { var simNetwork = await _simulatorNetworkManager.GetSimulatorNetworkAsync(id, OrgEntityHeader, UserEntityHeader); return(DetailResponse <Models.SimulatorNetwork> .Create(simNetwork)); }
public async Task <SimulatorNetwork> ValidateRequest() { var request = HttpContext.Request; foreach (var header in request.Headers.Keys) { Console.WriteLine($"{header}={request.Headers[header.ToLower()]} - {request.Headers.ContainsKey(header)} - {request.Headers.ContainsKey(header.ToLower())}"); } CheckHeader(request, REQUEST_ID); CheckHeader(request, ORG_ID); CheckHeader(request, ORG); CheckHeader(request, NETWORK_ID); CheckHeader(request, DATE); CheckHeader(request, VERSION); var authheader = GetHeaderValue(request, "authorization"); var requestId = GetHeaderValue(request, REQUEST_ID); var dateStamp = GetHeaderValue(request, DATE); var orgId = GetHeaderValue(request, ORG_ID); var org = GetHeaderValue(request, ORG); var networkId = GetHeaderValue(request, NETWORK_ID); var userId = GetHeaderValue(request, USER_ID); var userName = GetHeaderValue(request, USER); var version = GetHeaderValue(request, VERSION); var bldr = new StringBuilder(); //Adding the \r\n manualy ensures that the we don't have any //platform specific code messing with our signature. bldr.Append($"{requestId}\r\n"); bldr.Append($"{dateStamp}\r\n"); bldr.Append($"{version}\r\n"); bldr.Append($"{orgId}\r\n"); bldr.Append($"{userId}\r\n"); bldr.Append($"{networkId}\r\n"); OrgEntityHeader = EntityHeader.Create(orgId, org); UserEntityHeader = EntityHeader.Create(userId, userName); var network = await _simNetworkManager.GetSimulatorNetworkAsync(networkId, OrgEntityHeader, UserEntityHeader); if (network == null) { throw new Exception("Could not find simulator for network id [networkId]"); } Console.WriteLine($"Found network {network.Name} - {network.SharedAccessKey1SecretId},{network.SharedAccessKey2SecretId}"); Console.WriteLine($"Calc {network.Name} - {network.SharedAccessKey1SecretId},{network.SharedAccessKey2SecretId}"); var key1 = await _secureStorage.GetSecretAsync(OrgEntityHeader, network.SharedAccessKey1SecretId, UserEntityHeader); if (!key1.Successful) { throw new Exception(key1.Errors.First().Message); } var calculatedFromFirst = GetSignature(requestId, key1.Result, bldr.ToString()); Console.WriteLine($"Calc {calculatedFromFirst} - {authheader}"); if (calculatedFromFirst != authheader) { var key2 = await _secureStorage.GetSecretAsync(OrgEntityHeader, network.SharedAccessKey2SecretId, UserEntityHeader); if (!key2.Successful) { throw new Exception(key2.Errors.First().Message); } var calculatedFromSecond = GetSignature(requestId, key2.Result, bldr.ToString()); if (calculatedFromSecond != authheader) { throw new UnauthorizedAccessException("Invalid signature."); } } foreach (var simulator in network.Simulators) { simulator.Simulator.Value = await _simManager.GetSimulatorAsync(simulator.Simulator.Id, OrgEntityHeader, UserEntityHeader, true); } return(network); }