@@ -57,6 +57,7 @@ public DisplayPackageViewModel(Package package, User currentUser, string pushedB
5757 PushedBy = pushedBy ;
5858
5959 InitializeRepositoryMetadata ( package . RepositoryUrl , package . RepositoryType ) ;
60+ InitializeProjectUrl ( package . ProjectUrl ) ;
6061 }
6162
6263 public bool ValidatingTooLong { get ; set ; }
@@ -108,6 +109,7 @@ public bool HasNewerRelease
108109 public bool IsCertificatesUIEnabled { get ; set ; }
109110 public string RepositoryUrl { get ; private set ; }
110111 public RepositoryKind RepositoryType { get ; private set ; }
112+ public string ProjectUrl { get ; set ; }
111113
112114 private IDictionary < User , string > _pushedByCache = new Dictionary < User , string > ( ) ;
113115
@@ -183,14 +185,54 @@ private void InitializeRepositoryMetadata(string repositoryUrl, string repositor
183185 }
184186 }
185187
186- private bool IsGitHubUri ( Uri uri )
188+ private void InitializeProjectUrl ( string projectUrlString )
189+ {
190+ if ( Uri . TryCreate ( projectUrlString , UriKind . Absolute , out var projectUrl ) )
191+ {
192+ if ( projectUrl . IsHttpProtocol ( ) && IsDomainWithHttpsSupport ( projectUrl ) )
193+ {
194+ var uri = new UriBuilder ( projectUrl ) ;
195+ uri . Scheme = Uri . UriSchemeHttps ;
196+ uri . Port = - 1 ;
197+
198+ ProjectUrl = uri . ToString ( ) ;
199+ }
200+ else if ( projectUrl . IsHttpsProtocol ( ) || projectUrl . IsHttpProtocol ( ) )
201+ {
202+ ProjectUrl = projectUrl . ToString ( ) ;
203+ }
204+ }
205+ }
206+
207+ private static bool IsDomainWithHttpsSupport ( Uri uri )
208+ {
209+ return IsGitHubUri ( uri ) || IsCodeplexUri ( uri ) || IsMicrosoftUri ( uri ) ;
210+ }
211+
212+ private static bool IsGitHubUri ( Uri uri )
187213 {
188214 return string . Equals ( uri . Authority , "www.github.com" , StringComparison . OrdinalIgnoreCase ) ||
189215 string . Equals ( uri . Authority , "github.com" , StringComparison . OrdinalIgnoreCase ) ||
190216 string . Equals ( uri . Authority , "www.github.com:443" , StringComparison . OrdinalIgnoreCase ) ||
191217 string . Equals ( uri . Authority , "github.com:443" , StringComparison . OrdinalIgnoreCase ) ;
192218 }
193219
220+ private static bool IsCodeplexUri ( Uri uri )
221+ {
222+ return uri . Authority . EndsWith ( ".codeplex.com" , StringComparison . OrdinalIgnoreCase ) ||
223+ string . Equals ( uri . Authority , "codeplex.com" , StringComparison . OrdinalIgnoreCase ) ;
224+ }
225+
226+ private static bool IsMicrosoftUri ( Uri uri )
227+ {
228+ return uri . Authority . EndsWith ( ".microsoft.com" , StringComparison . OrdinalIgnoreCase ) ||
229+ string . Equals ( uri . Authority , "microsoft.com" , StringComparison . OrdinalIgnoreCase ) ||
230+ string . Equals ( uri . Authority , "www.asp.net" , StringComparison . OrdinalIgnoreCase ) ||
231+ string . Equals ( uri . Authority , "asp.net" , StringComparison . OrdinalIgnoreCase ) ||
232+ uri . Authority . EndsWith ( ".msdn.com" , StringComparison . OrdinalIgnoreCase ) ||
233+ string . Equals ( uri . Authority , "msdn.com" , StringComparison . OrdinalIgnoreCase ) ;
234+ }
235+
194236 public enum RepositoryKind
195237 {
196238 Unknown ,
0 commit comments