-
Notifications
You must be signed in to change notification settings - Fork 106
Expand file tree
/
Copy pathPSRepositoryInfo.cs
More file actions
146 lines (118 loc) · 4.2 KB
/
PSRepositoryInfo.cs
File metadata and controls
146 lines (118 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using System;
using System.Management.Automation;
using System.Net;
namespace Microsoft.PowerShell.PSResourceGet.UtilClasses
{
/// <summary>
/// This class contains information for a repository item.
/// </summary>
public sealed class PSRepositoryInfo
{
#region constants
internal const string MARPrefix = "psresource/";
#endregion
#region Enums
public enum APIVersion
{
Unknown,
V2,
V3,
Local,
NugetServer,
ContainerRegistry
}
public enum CredentialProviderType
{
None,
AzArtifacts
}
#endregion
#region Constructor
public PSRepositoryInfo(string name, Uri uri, int priority, bool trusted, PSCredentialInfo credentialInfo, CredentialProviderType credentialProvider, APIVersion apiVersion, bool allowed)
{
Name = name;
Uri = uri;
Priority = priority;
Trusted = trusted;
CredentialInfo = credentialInfo;
CredentialProvider = credentialProvider;
ApiVersion = apiVersion;
IsAllowedByPolicy = allowed;
}
#endregion
#region Properties
/// <summary>
/// The Name of the repository.
/// </summary>
public string Name { get; }
/// <summary>
/// The Uri for the repository.
/// </summary>
public Uri Uri { get; }
/// <summary>
/// Whether the repository is trusted.
/// </summary>
public bool Trusted { get; }
/// <summary>
/// The priority of the repository.
/// </summary>
[ValidateRange(0, 100)]
public int Priority { get; }
/// <summary>
/// The credential information for repository authentication.
/// </summary>
public PSCredentialInfo CredentialInfo { get; set; }
/// <summary>
/// Specifies which credential provider to use.
/// </summary>
public CredentialProviderType CredentialProvider { get; set; }
/// <summary>
/// The API protocol version for the repository.
/// </summary>
public APIVersion ApiVersion { get; }
// <summary>
/// Specifies whether the repository is allowed by policy.
/// </summary>
public bool IsAllowedByPolicy { get; set; }
#endregion
#region Methods
internal bool IsMARRepository()
{
return (ApiVersion == APIVersion.ContainerRegistry && Uri.Host.StartsWith("mcr.microsoft"));
}
public bool IsContainerRegistry()
{
if (ApiVersion == APIVersion.ContainerRegistry || Uri.Host.EndsWith(".azurecr.io") || Uri.Host.Equals("mcr.microsoft.com", StringComparison.OrdinalIgnoreCase) || Uri.Host.StartsWith("mcr.microsoft"))
{
return true;
}
return false;
}
public static bool IsValidContainerRegistryURL(string uri)
{
if (uri.EndsWith(".azurecr.io") || uri.EndsWith(".azurecr.io/") || uri.Contains("mcr.microsoft"))
{
return true;
}
return false;
}
public NetworkCredential SetNetworkCredentials(NetworkCredential networkCredential, PSCmdlet cmdletPassedIn)
{
NetworkCredential networkCreds = new NetworkCredential();
if (CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
cmdletPassedIn.WriteVerbose("Setting credential provider network credentials");
networkCreds = Utils.SetCredentialProviderNetworkCredential(this, networkCredential, cmdletPassedIn);
}
else
{
cmdletPassedIn.WriteVerbose("Setting Secret Management network credentials");
networkCreds = Utils.SetSecretManagementNetworkCredential(this, networkCredential, cmdletPassedIn);
}
return networkCreds;
}
#endregion
}
}