public void TestCancelCertificateDelete() { BatchController controller = BatchController.NewInstance; BatchAccountContext context = null; string thumbprint = null; string poolId = "certPool"; controller.RunPsTestWorkflow( () => { return new string[] { string.Format("Test-TestCancelCertificateDelete '{0}' '{1}'", BatchTestHelpers.TestCertificateAlgorithm, thumbprint) }; }, () => { context = new ScenarioTestContext(); thumbprint = ScenarioTestHelpers.AddTestCertificate(controller, context, BatchTestHelpers.TestCertificateFileName); CertificateReference certRef = new CertificateReference(); certRef.StoreLocation = CertStoreLocation.CurrentUser; certRef.StoreName = "My"; certRef.ThumbprintAlgorithm = BatchTestHelpers.TestCertificateAlgorithm; certRef.Thumbprint = thumbprint; certRef.Visibility = CertificateVisibility.Task; ScenarioTestHelpers.CreateTestPool(controller, context, poolId, 0, certRef); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); ScenarioTestHelpers.WaitForCertificateToFailDeletion(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, () => { ScenarioTestHelpers.DeletePool(controller, context, poolId); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, TestUtilities.GetCallingClass(), TestUtilities.GetCurrentMethodName()); }
/// <summary> /// Syncs the collections on a PSPoolSpecification with its wrapped OM object /// </summary> internal static void PoolSpecificationSyncCollections(PSPoolSpecification spec) { if (spec != null) { spec.omObject.CertificateReferences = CreateSyncedList(spec.CertificateReferences, (c) => { ICertificateReference certReference = new CertificateReference(); certReference.StoreLocation = c.StoreLocation; certReference.StoreName = c.StoreName; certReference.Thumbprint = c.Thumbprint; certReference.ThumbprintAlgorithm = c.ThumbprintAlgorithm; certReference.Visibility = c.Visibility; return(certReference); }); spec.omObject.Metadata = CreateSyncedList(spec.Metadata, (m) => { IMetadataItem metadata = new MetadataItem(m.Name, m.Value); return(metadata); }); if (spec.StartTask != null) { StartTaskSyncCollections(spec.StartTask); } } }
public void TestCancelCertificateDelete() { BatchController controller = BatchController.NewInstance; BatchAccountContext context = null; string thumbprint = null; string poolId = "certPool"; controller.RunPsTestWorkflow( () => { return(new string[] { string.Format("Test-TestCancelCertificateDelete '{0}' '{1}' '{2}'", accountName, BatchTestHelpers.TestCertificateAlgorithm, thumbprint) }); }, () => { context = ScenarioTestHelpers.GetBatchAccountContextWithKeys(controller, accountName); thumbprint = ScenarioTestHelpers.AddTestCertificate(controller, context, BatchTestHelpers.TestCertificateFileName1); CertificateReference certRef = new CertificateReference(); certRef.StoreLocation = CertStoreLocation.CurrentUser; certRef.StoreName = "My"; certRef.ThumbprintAlgorithm = BatchTestHelpers.TestCertificateAlgorithm; certRef.Thumbprint = thumbprint; certRef.Visibility = CertificateVisibility.Task; ScenarioTestHelpers.CreateTestPool(controller, context, poolId, 0, certRef); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); ScenarioTestHelpers.WaitForCertificateToFailDeletion(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, () => { ScenarioTestHelpers.DeletePool(controller, context, poolId); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, TestUtilities.GetCallingClass(), TestUtilities.GetCurrentMethodName()); }
/// <summary> /// Creates a test pool for use in Scenario tests. /// </summary> public static void CreateTestPool(BatchController controller, BatchAccountContext context, string poolId, int targetDedicated, CertificateReference certReference = null, StartTask startTask = null) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); PSCertificateReference[] certReferences = null; if (certReference != null) { certReferences = new PSCertificateReference[] { new PSCertificateReference(certReference) }; } PSStartTask psStartTask = null; if (startTask != null) { psStartTask = new PSStartTask(startTask); } PSCloudServiceConfiguration paasConfiguration = new PSCloudServiceConfiguration("4", "*"); NewPoolParameters parameters = new NewPoolParameters(context, poolId) { VirtualMachineSize = "small", CloudServiceConfiguration = paasConfiguration, TargetDedicated = targetDedicated, CertificateReferences = certReferences, StartTask = psStartTask, InterComputeNodeCommunicationEnabled = true }; client.CreatePool(parameters); }
public void TestCancelCertificateDelete() { BatchController controller = BatchController.NewInstance; BatchAccountContext context = null; string thumbprint = null; string poolId = "certPool"; controller.RunPsTestWorkflow( _logger, () => { return(new string[] { string.Format("Test-TestCancelCertificateDelete '{0}' '{1}'", BatchTestHelpers.TestCertificateAlgorithm, thumbprint) }); }, () => { context = new ScenarioTestContext(); thumbprint = ScenarioTestHelpers.AddTestCertificate(controller, context, BatchTestHelpers.TestCertificateFileName); CertificateReference certRef = new CertificateReference(); certRef.StoreLocation = CertStoreLocation.CurrentUser; certRef.StoreName = "My"; certRef.ThumbprintAlgorithm = BatchTestHelpers.TestCertificateAlgorithm; certRef.Thumbprint = thumbprint; certRef.Visibility = CertificateVisibility.Task; ScenarioTestHelpers.CreateTestPool(controller, context, poolId, targetDedicated: 0, targetLowPriority: 0, certReference: certRef); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); ScenarioTestHelpers.WaitForCertificateToFailDeletion(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, () => { ScenarioTestHelpers.DeletePool(controller, context, poolId); ScenarioTestHelpers.DeleteTestCertificate(controller, context, BatchTestHelpers.TestCertificateAlgorithm, thumbprint); }, MethodBase.GetCurrentMethod().ReflectedType?.ToString(), MethodBase.GetCurrentMethod().Name); }
/// <summary> /// Converts a PSCertificateReference to a CertificateReference /// </summary> private static CertificateReference ConvertCertificateReference(PSCertificateReference psCert) { CertificateReference certReference = new CertificateReference(); certReference.StoreLocation = psCert.StoreLocation; certReference.StoreName = psCert.StoreName; certReference.Thumbprint = psCert.Thumbprint; certReference.ThumbprintAlgorithm = psCert.ThumbprintAlgorithm; certReference.Visibility = psCert.Visibility; return(certReference); }
public void Sign(string path, bool strongName = false) { var certRef = new CertificateReference(Certificate); var r = BinaryLoad(path); r.SigningCertificate = certRef; if (strongName) r.StrongNameKeyCertificate = certRef; r.Save().Wait(); }
public void Sign(string path, bool strongName = false) { var certRef = new CertificateReference(Certificate); var r = BinaryLoad(path); r.SigningCertificate = certRef; if (strongName) { r.StrongNameKeyCertificate = certRef; } r.Save().Wait(); }
public override int GetHashCode() { unchecked { const int hashBase = (int)2166136261; const int multiplier = 16777619; int hash = hashBase; hash = (hash * multiplier) ^ (CertificateReference is null ? 0 : CertificateReference.GetHashCode()); hash = (hash * multiplier) ^ (Standard is null ? 0 : Standard.GetHashCode()); hash = (hash * multiplier) ^ (Learner is null ? 0 : Learner.GetHashCode()); hash = (hash * multiplier) ^ (LearningDetails is null ? 0 : LearningDetails.GetHashCode()); hash = (hash * multiplier) ^ (PostalContact is null ? 0 : PostalContact.GetHashCode()); return(hash); } }
public void TestComputeNodeCertificateReferencesAreReadOnly() { using (BatchClient batchClient = ClientUnitTestCommon.CreateDummyClient()) { var protoComputeNode = new Protocol.Models.ComputeNode() { CertificateReferences = new List <Protocol.Models.CertificateReference> { new Protocol.Models.CertificateReference( thumbprint: "1234", thumbprintAlgorithm: "SHA1", storeLocation: Protocol.Models.CertificateStoreLocation.CurrentUser, storeName: "My", visibility: new List <Protocol.Models.CertificateVisibility> { Protocol.Models.CertificateVisibility.Task }) } }; ComputeNode computeNode = batchClient.PoolOperations.GetComputeNode( "dummy", "dummy", additionalBehaviors: InterceptorFactory.CreateGetComputeNodeRequestInterceptor(protoComputeNode)); CertificateReference computeNodeCertificateReference = computeNode.CertificateReferences.First(); // reads are allowed this.testOutputHelper.WriteLine("{0}", computeNodeCertificateReference.StoreLocation); this.testOutputHelper.WriteLine("{0}", computeNodeCertificateReference.StoreName); this.testOutputHelper.WriteLine("{0}", computeNodeCertificateReference.Thumbprint); this.testOutputHelper.WriteLine("{0}", computeNodeCertificateReference.ThumbprintAlgorithm); this.testOutputHelper.WriteLine("{0}", computeNodeCertificateReference.Visibility); // writes are foribdden Assert.Throws <InvalidOperationException>(() => { computeNodeCertificateReference.StoreLocation = CertStoreLocation.CurrentUser; }); Assert.Throws <InvalidOperationException>(() => { computeNodeCertificateReference.StoreName = "x"; }); Assert.Throws <InvalidOperationException>(() => { computeNodeCertificateReference.Thumbprint = "y"; }); Assert.Throws <InvalidOperationException>(() => { computeNodeCertificateReference.ThumbprintAlgorithm = "z"; }); Assert.Throws <InvalidOperationException>(() => { computeNodeCertificateReference.Visibility = CertificateVisibility.None; }); } }
/// <summary> /// Creates a test pool for use in Scenario tests. /// </summary> public static void CreateTestPool( BatchController controller, BatchAccountContext context, string poolId, int?targetDedicated, int?targetLowPriority, CertificateReference certReference = null, StartTask startTask = null) { PSCertificateReference[] certReferences = null; if (certReference != null) { certReferences = new PSCertificateReference[] { new PSCertificateReference(certReference) }; } PSStartTask psStartTask = null; if (startTask != null) { psStartTask = new PSStartTask(startTask); } PSCloudServiceConfiguration paasConfiguration = new PSCloudServiceConfiguration("4", "*"); NewPoolParameters parameters = new NewPoolParameters(context, poolId) { VirtualMachineSize = "small", CloudServiceConfiguration = paasConfiguration, TargetDedicatedComputeNodes = targetDedicated, TargetLowPriorityComputeNodes = targetLowPriority, CertificateReferences = certReferences, StartTask = psStartTask, InterComputeNodeCommunicationEnabled = true }; CreatePoolIfNotExists(controller, parameters); }
/// <summary> /// Creates a test pool for use in Scenario tests. /// </summary> public static void CreateTestPool(BatchController controller, BatchAccountContext context, string poolId, int targetDedicated, CertificateReference certReference = null) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); PSCertificateReference[] certReferences = null; if (certReference != null) { certReferences = new PSCertificateReference[] { new PSCertificateReference(certReference) }; } NewPoolParameters parameters = new NewPoolParameters(context, poolId) { VirtualMachineSize = "small", OSFamily = "4", TargetOSVersion = "*", TargetDedicated = targetDedicated, CertificateReferences = certReferences, }; client.CreatePool(parameters); }
internal void FindCertificate() { if (string.IsNullOrEmpty(SigningCertPath)) { Certificate = CertificateReference.Default; if (Certificate == null) { throw new ConsoleException("No default certificate stored in the registry"); } } else if (string.IsNullOrEmpty(SigningCertPassword)) { Certificate = new CertificateReference(SigningCertPath); } else { Certificate = new CertificateReference(SigningCertPath, SigningCertPassword); } Event<Verbose>.Raise("Loaded certificate with private key {0}", Certificate.Location); if (Remember) { Event<Verbose>.Raise("Storing certificate details in the registry."); Certificate.RememberPassword(); CertificateReference.Default = Certificate; } }
/// <summary> /// Creates a test pool for use in Scenario tests. /// </summary> public static void CreateTestPool(BatchController controller, BatchAccountContext context, string poolId, int targetDedicated, CertificateReference certReference = null) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); PSCertificateReference[] certReferences = null; if (certReference != null) { certReferences = new PSCertificateReference[] { new PSCertificateReference(certReference) }; } NewPoolParameters parameters = new NewPoolParameters(context, poolId) { VirtualMachineSize = "small", OSFamily = "4", TargetOSVersion = "*", TargetDedicated = targetDedicated, CertificateReferences = certReferences, }; client.CreatePool(parameters); }
public void TestCertificateReferenceVisibilityGet() { CertificateReference certificateReference = new CertificateReference(); Assert.Null(certificateReference.Visibility); }
private int Startup(IEnumerable<string> args) { var options = args.Where(each => each.StartsWith("--")).Switches(); var parameters = args.Parameters(); foreach (var arg in options.Keys) { var argumentParameters = options[arg]; switch (arg) { /* global switches */ case "load-config": // all ready done, but don't get too picky. break; case "nologo": this.Assembly().SetLogo(string.Empty); break; case "help": return Help(); case "certificate-path": var cert = argumentParameters.Last(); _signingCertPath = _signingCertPath.IndexOf(":") > 1 ? cert : Path.GetFullPath(argumentParameters.Last()); break; case "password": _signingCertPassword = argumentParameters.Last(); break; case "remember": _remember = true; break; case "auto": break; case "sign": _sign = true; break; case "just-sign": _sign = true; _justsign = true; break; case "strong-name": _strongname = true; break; case "verbose": _verbose = true; break; case "company": _company = argumentParameters.Last(); break; case "description": _description = argumentParameters.Last(); break; case "internal-name": _internalName = argumentParameters.Last(); break; case "copyright": _copyright = argumentParameters.Last(); break; case "original-filename": _originalFilename = argumentParameters.Last(); break; case "product-name": _productName = argumentParameters.Last(); break; case "verify": _verify = true; break; case "reference-assembly": foreach (var asmRef in argumentParameters) { if (string.IsNullOrEmpty(asmRef)) { return Fail("Missing assembly information for --assembly-reference."); } var parts = asmRef.Split(", ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var assemblyref = new AssemblyReference {Name = parts[0]}; foreach (var part in parts.Skip(1)) { var kp = part.Split("= ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (kp.Length != 2) { return Fail("Invalid option '{0}' in assembly reference '{1}'.", part, asmRef); } switch (kp[0].ToLower()) { case "version": case "ver": assemblyref.Version = kp[1]; if (assemblyref.Version == 0L) { return Fail("Invalid Version '{0}' in assembly reference '{1}'.", kp[1], asmRef); } break; case "publickeytoken": case "pkt": case "token": if (kp[1].Length != 16) { return Fail("Invalid publicKeyToken '{0}' in assembly reference '{1}'.", kp[1], asmRef); } assemblyref.PublicKeyToken = kp[1]; break; case "processorarchitecture": case "architecture": case "arch": assemblyref.Architecture = kp[1]; if (assemblyref.Architecture == Architecture.Auto || assemblyref.Architecture == Architecture.Unknown) { return Fail("Invalid processorArchitecture '{0}' in assembly reference '{1}'.", kp[1], asmRef); } break; } } if (assemblyref.Version == 0 || assemblyref.Architecture == Architecture.Unknown || string.IsNullOrEmpty(assemblyref.PublicKeyToken)) { return Fail("Invalid assembly reference '{0}' ", asmRef); } assemblyReferences.Add(assemblyref); } break; case "product-version": _productVersion = argumentParameters.Last(); if (_productVersion == 0L) { return Fail("--product-version must be in the form ##.##.##.##"); } break; case "file-version": _fileVersion = argumentParameters.Last(); if (_fileVersion == 0L) { return Fail("--file-version must be in the form ##.##.##.##"); } break; case "execution-level": switch (argumentParameters.Last()) { case "administrator": case "admin": case "requires-admin": case "requiresadmin": case "requiresadministrator": case "requires-administrator": _executionLevel = ExecutionLevel.requireAdministrator; break; case "invoker": case "asinvoker": case "as-invoker": _executionLevel = ExecutionLevel.asInvoker; break; case "highest-available": case "highest": case "highestavailable": _executionLevel = ExecutionLevel.highestAvailable; break; } break; case "dpi-aware": if (argumentParameters.Last().IsTrue()) { _dpiAware = true; } if (argumentParameters.Last().IsFalse()) { _dpiAware = false; } break; default: return Fail("Unknown parameter [--{0}]", arg); } } Logo(); if (_verify) { // return Verify(parameters); } if (string.IsNullOrEmpty(_signingCertPath)) { _certificate = CertificateReference.Default; if (_certificate == null) { return Fail("No default certificate stored in the registry"); } } else if (string.IsNullOrEmpty(_signingCertPassword)) { _certificate = new CertificateReference(_signingCertPath); } else { _certificate = new CertificateReference(_signingCertPath, _signingCertPassword); } using (new ConsoleColors(ConsoleColor.White, ConsoleColor.Black)) { Verbose("Loaded certificate with private key {0}", _certificate.Location); } if (_remember) { Verbose("Storing certificate details in the registry."); _certificate.RememberPassword(); CertificateReference.Default = _certificate; } if (parameters.Count() < 1) { return Fail("Missing files to sign/name. \r\n\r\n Use --help for command line help."); } var tasks = new List<Task>(); if (_company != null && _company.Equals("auto", StringComparison.CurrentCultureIgnoreCase)) { _company = _certificate.CommonName; } var failures = 0; try { var allFiles = parameters.FindFilesSmarter().ToArray(); var origMD5 = new XDictionary<string, string>(); var loading = allFiles.Select(each => Binary.Load(each, BinaryLoadOptions.PEInfo | BinaryLoadOptions.VersionInfo | BinaryLoadOptions.Managed | BinaryLoadOptions.Resources | BinaryLoadOptions.Manifest | BinaryLoadOptions.UnsignedManagedDependencies | BinaryLoadOptions.MD5).ContinueWith(antecedent => { lock (allFiles) { if (antecedent.IsFaulted) { Console.WriteLine("Failed to load file '{0}'", each); var e = antecedent.Exception.Flatten().InnerExceptions.First(); Console.WriteLine("{0}--{1}", e.Message, e.StackTrace); return; } try { var binary = antecedent.Result; origMD5.Add(each, binary.MD5); if (binary.IsPEFile && !_justsign) { // do PE file stuff if (_sign) { binary.SigningCertificate = _certificate; } if (binary.IsManaged && _strongname) { binary.StrongNameKeyCertificate = _certificate; } if (!assemblyReferences.IsNullOrEmpty()) { foreach (var asmRef in assemblyReferences) { binary.Manifest.Value.AddDependency(asmRef.Name, asmRef.Version, asmRef.Architecture, asmRef.PublicKeyToken); } } if (_company != null) { binary.CompanyName = _company; } if (_description != null) { binary.FileDescription = _description; } if (_internalName != null) { binary.InternalName = _internalName; } if (_copyright != null) { binary.LegalCopyright = _copyright; } if (_originalFilename != null) { binary.OriginalFilename = _originalFilename; } if (_productName != null) { binary.ProductName = _productName; } if (_productVersion != 0) { binary.ProductVersion = _productVersion; } if (_fileVersion != 0) { binary.FileVersion = _fileVersion; } if (_dpiAware != null) { binary.Manifest.Value.DpiAware = _dpiAware == true; } if (_executionLevel != ExecutionLevel.none) { binary.Manifest.Value.RequestedExecutionLevel = _executionLevel; } } else { // do stuff for non-pe files // we can try to apply a signature, and that's about it. if (_sign) { binary.SigningCertificate = _certificate; } } binary.Save().Wait(); } catch (Exception e) { while (e.GetType() == typeof (AggregateException)) { e = (e as AggregateException).Flatten().InnerExceptions[0]; } failures += Fail("{0}--{1}", e.Message, e.StackTrace); } } }, TaskContinuationOptions.AttachedToParent)).ToArray(); // Thread.Sleep(1000); // wait for loading. return Task.Factory.ContinueWhenAll(loading, tsks => { Console.WriteLine("Done {0} files", tsks.Length); (from each in Binary.Files select new { Filename = Path.GetFileName(each.Filename), Original_MD5 = origMD5[each.Filename], New_MD5 = each.MD5, // Status = each.Message, }).ToTable().ConsoleOut(); if (failures > 0) { Console.WriteLine("*** Bad News. Failed. *** "); } if (Binary.IsAnythingStillLoading) { Console.WriteLine("\r\n==== Uh, stuff is still in the loading state?! ====\r\n"); } return failures; }).Result; } catch (Exception e) { Console.WriteLine("{0}--{1}", e.Message, e.StackTrace); return Fail("not good."); } }
/// <summary> /// Creates a test pool for use in Scenario tests. /// </summary> public static void CreateTestPool(BatchController controller, BatchAccountContext context, string poolId, int targetDedicated, CertificateReference certReference = null, StartTask startTask = null) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); PSCertificateReference[] certReferences = null; if (certReference != null) { certReferences = new PSCertificateReference[] { new PSCertificateReference(certReference) }; } PSStartTask psStartTask = null; if (startTask != null) { psStartTask = new PSStartTask(startTask); } PSCloudServiceConfiguration paasConfiguration = new PSCloudServiceConfiguration("4", "*"); NewPoolParameters parameters = new NewPoolParameters(context, poolId) { VirtualMachineSize = "small", CloudServiceConfiguration = paasConfiguration, TargetDedicated = targetDedicated, CertificateReferences = certReferences, StartTask = psStartTask, InterComputeNodeCommunicationEnabled = true }; client.CreatePool(parameters); }