From 76b798b2e40612edaf6648802c10ebad9ab5df8c Mon Sep 17 00:00:00 2001 From: Joel Verhagen Date: Sun, 16 May 2021 15:13:38 -0700 Subject: [PATCH] Remove consistency front-end to reduce dependencies --- README.md | 3 +- deploy/main.bicep | 1 - docs/consistency.md | 11 - docs/consistency.png | Bin 19073 -> 0 bytes src/Website/Controllers/HomeController.cs | 14 +- src/Website/Logic/PackageReportHub.cs | 207 - src/Website/Models/ExploreViewModel.cs | 21 - src/Website/Startup.cs | 27 +- src/Website/Views/Home/Index.cshtml | 726 +-- src/Website/Views/Shared/_Layout.cshtml | 2 +- .../Shared/_ValidationScriptsPartial.cshtml | 3 +- src/Website/Website.csproj | 1 - src/Website/wwwroot/css/site.css | 24 - src/Website/wwwroot/lib/handlebars/LICENSE | 19 - .../wwwroot/lib/handlebars/handlebars.js | 5210 ---------------- .../wwwroot/lib/handlebars/handlebars.min.js | 29 - .../lib/jquery-validation-unobtrusive/LICENSE | 12 - .../jquery.validate.unobtrusive.js | 432 -- .../jquery.validate.unobtrusive.min.js | 5 - .../wwwroot/lib/jquery-validation/LICENSE | 22 - .../dist/additional-methods.js | 1158 ---- .../dist/additional-methods.min.js | 4 - .../jquery-validation/dist/jquery.validate.js | 1601 ----- .../dist/jquery.validate.min.js | 4 - src/Website/wwwroot/lib/signalr/LICENSE | 12 - .../lib/signalr/dist/browser/signalr.js | 5280 ----------------- .../lib/signalr/dist/browser/signalr.js.map | 1 - .../lib/signalr/dist/browser/signalr.min.js | 17 - .../signalr/dist/browser/signalr.min.js.map | 1 - 29 files changed, 15 insertions(+), 14832 deletions(-) delete mode 100644 docs/consistency.md delete mode 100644 docs/consistency.png delete mode 100644 src/Website/Logic/PackageReportHub.cs delete mode 100644 src/Website/Models/ExploreViewModel.cs delete mode 100644 src/Website/wwwroot/lib/handlebars/LICENSE delete mode 100644 src/Website/wwwroot/lib/handlebars/handlebars.js delete mode 100644 src/Website/wwwroot/lib/handlebars/handlebars.min.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation-unobtrusive/LICENSE delete mode 100644 src/Website/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation/LICENSE delete mode 100644 src/Website/wwwroot/lib/jquery-validation/dist/additional-methods.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation/dist/additional-methods.min.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation/dist/jquery.validate.js delete mode 100644 src/Website/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js delete mode 100644 src/Website/wwwroot/lib/signalr/LICENSE delete mode 100644 src/Website/wwwroot/lib/signalr/dist/browser/signalr.js delete mode 100644 src/Website/wwwroot/lib/signalr/dist/browser/signalr.js.map delete mode 100644 src/Website/wwwroot/lib/signalr/dist/browser/signalr.min.js delete mode 100644 src/Website/wwwroot/lib/signalr/dist/browser/signalr.min.js.map diff --git a/README.md b/README.md index 1c1577a19..c4e96b0ec 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ persistence (cheap). Here's a high-level description of main projects in this repository: - [`Worker`](src/Worker) - the Azure Function itself, a thin adapter between core logic and Azure Functions -- [`Website`](src/Website) - a website for checking [consistency](docs/consistency.md) and an admin panel for starting scans +- [`Website`](src/Website) - a website for an admin panel to managed scans - [`Worker.Logic`](src/Worker.Logic) - all of the catalog scan and driver logic, this is the most interesting project - [`Logic`](src/Logic) - contains more generic logic related to NuGet.org protocol and is not directly related to distributed processing @@ -212,6 +212,5 @@ Several message processors exist to emit other useful data: - **[Adding a new driver](docs/new-driver.md) - a guide to help you enhance ExplorePackages to suit your needs.** - [Blog posts](docs/blog-posts.md) - blog posts about lessons learned from this project -- [Consistency](docs/consistency.md) - a consistency checker for packages published to NuGet.org - [Cost](docs/cost.md) - how much it costs to run several of the implemented catalog scans - [Notable classes](docs/notable-classes.md) - interesting or useful classes supporting this project diff --git a/deploy/main.bicep b/deploy/main.bicep index dd3357d76..bba83dfa9 100644 --- a/deploy/main.bicep +++ b/deploy/main.bicep @@ -165,7 +165,6 @@ resource website 'Microsoft.Web/sites@2020-09-01' = { clientAffinityEnabled: false httpsOnly: true siteConfig: { - webSocketsEnabled: true minTlsVersion: '1.2' netFrameworkVersion: 'v5.0' appSettings: concat([ diff --git a/docs/consistency.md b/docs/consistency.md deleted file mode 100644 index efa32e0de..000000000 --- a/docs/consistency.md +++ /dev/null @@ -1,11 +0,0 @@ -# Consistency - -I've also used this framework to look for inconsistencies in the V2 and V3 endpoints. To make this easier, I made a -little website to see if your package is fully propagated on NuGet.org (that is, the indexing is complete). - -https://explorepackages.azurewebsites.net/ - -This is a website that polls the various NuGet.org API endpoints for data specific to a provide package (ID + version). -A report is given back saying whether the data across the endpoints is self-consistent and in the expected form. - -![Consistency](consistency.png) diff --git a/docs/consistency.png b/docs/consistency.png deleted file mode 100644 index 6485ff027b067794de2e0e58d25d1f79ecee7475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19073 zcmch9XIN9))^6OW=$4LB4Jb_z0qIB(M8MDyM35paROy1D2Nk6gq>HpIU8$kBfYi{D zY9JKpE%chu?uz^DQ||fh^PTVB=ed89thwe|bFR5YdB;1(OvqzRDCO@gzk@&^N)=^A z9T4cZ0T76c;?i$G%a+;?1`tS9Sw&G^*K=%bV#7XVG3C~&SB-z5@{nQijl~eQtI>gP zFKej7XC4RASfe({-fy<@fX5leq}85N#1+OygwoK;d0>5k4j&E zb3NgXsmatdqz&mnqBAotkgxgmo~+iavo8kS86|FcZ+%vT9#s1$XAr$t-JT!xn>v6% zGBp0v+#pa373cvT1fqd}Kq#_bU;o~+uYiBHtRC5SC*PA3=xtjr1CbSG7{bpKhJe-F z=wWVM%l<`h>$aIIeDxPV_&>1Pk0M$L8a$CHG!Wz~y)NfMf$M5bK^G}Ncr2DSa=!K+ ze2#U9?K}vsioevh;c{w);Pcff;){M-<9Zb`aLZcja*kX!#6C`ek)9*2ie5Ia;7H^y z{F&=-Ac!>lDva>Lrk<&|xk6ru1~?dNGUkTwT1$31M5m%4^mr^CJVMHKb8=Z5iEPLG?u}0H2wF=dX6Y)AvMse z5Re&pD-spo5qr4*VY0GjizC(LvIWN7Z6TN{stw5{+(IuXAGlO58CWf#R7nPcyH;j= zx)%DTZVA2{2BsgxShEDE)t{B%gn8j&U<-N_Z0Y$q5Va6Iw)A$K(2-WjZu$d4i-^q- z4BC8BIM3DfSRhm$mGROYWMn3?@``Zn;%xkPRt9#`gxG#d>;;bj_ns22?{_&Pe zu@*Ip48QWjiRSq};?{g$bB?a&9a-F5l{1`0D?=RqE(feW=&(|D?g2ix73p9s^k|S5 zeib*z>F#_N$)J_l?0;&tS@0t1b7gla)@|btKX|k=bKBcE{swgz)Hy)pZHv#OdnIQb zwofRnOVipdhZ1A~h2h%~U45sJVDN;i*ztUQt$}l~mJtgf_jtmsA-ul3?a;GMDAj1n z2>yMuR-5bV`#@d_aZH9r3zEp}bV{0wEqh(p)KCC6Y9f&3sdQ%`>V{V)r0k$xolPik z+OtjzZiKGQ^witw*4!*OL?+$XeYgBsY9#vy-13J};-k@VJF?f<{z=jH9K#uGzl51h z#;a&hs9nNt_52OA5-LMo$?FhXfz__3QaS`ylm=396F&DuK)+KSJw?Prd4%nZz8$;>LS@*6hkyFrizdX$kS}OwH#N#ax!39D zWshfeTw?h>4knlyT8)|Huyq}kgQ?<7v0x}ACSv0$pO#2BP1+f8(cGEmlO4+*>0z0! zLbmw=J0FH-AL+A_A9apHPseSE8C&oXSyV=yPlfAP)--+J*Bzc|yEzo6zqgB0f7~NR z5hCd!&w+x$7UZBCa1h8M=+_aTM*rLhEv0rs91rW8dKH{AlT&MYKzF&~K75?m%>DyV zjJk19aT>Szjga#=Hc0*Pj(4Nde9 zWEdFDsYgG+qs0dDRSZfnLOdjbD!mfXKHn)4%n+%vSJ3=8&4PG z`9p5{>KPqmF^HtwFC!#z3W-4jIhj+cT0Gc0{!ZmqboEs7Wu1c6$LlAW>!5G-Yryae z8U4~-9CkN&A5E3NuU5t9=GQz+6*z^gXeox>E%^}T%&eHUQ26Kr;;k=@FEe+vS-~R~ zkx;Y}xnZ(%Fc_VY;Kh;rZpANed?1tt)Pjt%fL`ZgAwPVf9^${ZVTH7~QM7`P1UF@D z)w5iUR#060F8fNy(b#|gp8jSMG zlTL@CU^VyL6oYsJ&pIzXXYR$^9xk!SxR?LV?LqnMquNg7wOa)uaQ7HRaTxcM<41iu zl6E}8!*xp^-aRL*i2wLeR$`FJc>4tUJg6RUDz)07^!x)4<{OM)s#dq;N!s-DO&fB= zivHx5!9Xj0D?LA_>#8NRjw4gxvUq2-d@O9tInOSw=(6UkcPb2kAw|ue!Z5EPPl$kv ziH1r!ED3VhwQ8l`wk?Xjw4~ z!RLe!8>eTDXhdtv;T%2vmtTtACAXJ~CbxfMw%LTVl^b>}amyVa8(ZXct+@11y=)|N zy9#^mH5PS+kSPQ_AX|9Uh#Mfcn9XSB(2~mjvq4z^i_F%yq%m^1{Sxb63ihX<2ZR5M zmT!}hVAE5tlM(jQ!^WOSf45oFSU^|Gi*8>AsZc04eG3Q%cbG@d7M!d$`0Wkrm#~8H zk}4o&iwATUAE~k>g@aYTsZcE_k-t8lg_JwC@KC zh>4HxZxi^3;*;j}Up6`%2+N-Bd7Nz*)u)V9vpTXqKQ*cEIY6KXJp9>{kMcH52;(>k zz+x*b91_Tv86^>?2@xTm6YiBL(w%zPi_wz2O|Ggmy>{T?&xEPdE>pzg30_2Tk}krx zI-Xyz@VM&7rR6|s;AONR1F^KwcbU`L5m$$82kb+Sj{_>61NPwtysQPutE1>9=qQ}- zU;N8~+4h1v&Z|a=mb5Yh)*~2OW)LQzWm}p-h(TEFpQ6W`0u>@ zC#Z0^-M6Yzqe7Lvcn);*m<|-p^x-cM5d)=jiJs+-k^Uz*5*~YRogc8#e}7AVH7{iMsd|{p6*)KM@kU|o+vZI#kdF+UtLHU3<=%j*plIF7 zoTOSn^4OcWV@qNs1-1(X>#LLw4TO3Q8-ib8BxH__F5>60D0UI3;q+71$swe`S^PP` z=X{REo+F8$Djraz7OJckst0(|4{kWgH3b0%1b|Hnd?+$f^Iv^Kz^}1eA7GdQIR}U1 z=?%CC-g7lW&e_4YUTT~E?8i!5+e-O~O#V7n-wc!d(Z36X;{0+(sO=QpIPN>4ft;Rt zoUxhiH~8;H;%FfZ`Vta)r$4Az0{IzF7pKtW3eW@py1m6fNo70;dxDzvsN8>EnE@f5 z5=N$+kBWve+5peR7a;hxc86D&TjA(+_;8Q8f>MlQ2-s?9DJx5Z8<1$yblE)dOwteV z?O4?44kH8vm&Y&l)WwzxObBiGo_cRj`FrFXcuJaQp7tFz*oA?ocQuMfo#QvSOea-O zJu=2mC6^PD66Z$;u(aWhqs2c~X~cS<#z%Eh_?7Y~7_=I<9Ws#;yKQs9DDc+xUU_%+ z4Gn5>r+ec|teW-biyrt%XD@fJ9#I!%d5bi%$(rKp!y~{6FYt%1D68f#5}G%&YALnu zpwscbhJsx6n{sDPC_0a~2YzMiVWbtyK;xnU15EVV)7z2={^T8I>pN#p9);e8?^-B+ z(%p8RhpN!Gojp&rmmYZ|Y3hG=hK!e~5QXcC$lvRB$E40I#|Z=lgZYb>EtC@2kU_$I}Idf?E^I zQeLb*7{+Sf+kKJdAv$S8$X~Jw_va$X2(~+VfaC4?h=`J)e!siw6zJFwtzl+ecfVZE zl^F;Fn}1iSe|j;t|CYT3J49k-?ad4PCAtS_+7hLhJN<4MYqhrw3__#WDiOaav>-p* z@HXZ4d%WP3+3|Fb6sq>kLIMF3n zFWIFUy1w@n#VMO+rlgF!NqRX|Q`r6<8at`r5zlNj)vzokw9w9D5i=D#Ht`og+~+ce z`{^;Q6A5O5+=gLu)l@U?=j>c)b(=LWuUyO>{eTQU^R&+r{(ZOMd6p!UMx1rKZ|#y1 zl^x`>7p+yA=te`P7@|O;JhSXGWWeR?Nqp?Zjj`8P?2L3+8a5_2kS_LxzXW*siE7N! zn@;E${IE}5p8*-S-|FM`YzM@|E?KPKe9JHVl9`gj{jxS){4hm{Y$Nv zvcs_FNS5x6Z;<}3zS&nbZg{(Ce!*mQsZtNq-)tn?L!XSYK@sT5&ch0)-`X3j0PMl2 ziho?24wzNa#X1(`udz4byni#3fYk(C)GvFvdDj9%GWv-2>m62s`hGLyMJ$s;RQYqa z1{zMxj#-`(F%!Zd#k>G7aGzN=I!sltAo^bDT-32OpKmUhPAWR>Q6d?Z5%BIL ze&%0Eng6843~`6R%#Dd z?!`1?rI!MLf5DG;qi|$UZeL|KAP#}(4&20wCUO?cg#x|^8?vvHmtpG(fQ4etsaf{* z#@`;`Nml)rpCaK$G7=1+fsnivFxKBbNGC{3|JR8>dy%dLRw4LAjO{jph&$OGIIZyM z_(7DZs&UOc*)t$4Ml?v3qPB0qFmjH^8;2p13HuN6hjwe#jQS_+>}HW|$d|k)YqDx= z&8^6nm%>fcg04X(2|34IS>#DF-a$vL`z^?&oWcX?v(}`5w5s>c09zvicW^NFam)2z zKd{3up=F_`UYHgnyVJ47t6Bf4F*hI>oG0foLy?(zV36BWTkb6|QF1!Hmt zR(Z!gy!FO1gW#_*XOu=4xXLu#9%NvUyN1L_uOz8y4Ghxb^nNgS`fB%! zS4j=kPubQP%kM@J4k8-9T({@LEkd{QF+vp(xGtTG6fUk|VOdLezR~g6?i^s#P`Id5 z1$K(O32h0cfI}+MVX?K_Al1_Ge#=f88g04dbR%=EM^w)Y) zHWw_QpSTeHy9Hb?u6AS`O|e=@6Ix#o^4+OhOPidnZt_rYP?z9n8=^a?JIZemuE`k= zSDL+=%{c?i??^BRKaQon5N4QAD=Tp|a)|t=Y9(iK)w0v|-r1`PK2I)TCsopD6Ji;v zziQ#JN00dC}4#XCu6d!M2l&Ha=1h;6O5J_?m$bhX*?;sHL z){4V-Q!M#@*f_*$X9&P4+z#YtCE`vT-elvrSNNIvN9_+;ZG+^dH3a!67v!5RiQIsn zhcHWZY=5_a(wyEda!bQ*4ayI`1>rvdo+7jCkg=iCHH|xK&nsp#%6-qa3RKFZdE5SS zr4)RKp-u0{&5F89KgM8~1x?REkCNCtRsOW;EiG0_XQdsX*2)^wg)2&|@v#i{%B!f1 z({@0TRR`0}%QcE^C4G;Y7-c3xu;+@6V9>-{2<)z%W@EDVww8aIN_=PAJZJ}Z?m)rG zYr(cEw=-F7Fl=-1c#L05oxBykSqw3pE00$S-pX8jOepou_PdlErUnfx~f3h|I98vy1w#ffTNUQhR>b7SrDw^Ce1bw3l0UwMw z3&DFEypK1ZJb}&9Pkiz{-gLugJ+C8fG1eZmRv(Q}Q)MT({Umpu+G_p{M13Eg?>|I1 zEgjt)*L@KGFQ#>mXK$)7c6%XeL>hFcj6?cVE=NYx6J;S9{kh zUntcF@xsDkWr;xj<0K#StvMXL8n$D#@KI*_q_=0-%-!T{jyRg}L}^<}tkPi#Aktt@ z)+c0+bffNBGsxPHFRYhW+icId+QPLrfyfNz?jgwDx6>kevaR@06KRUNOAkbY+7oDZ zU+i7l^RbEV!5wzG&B1%C9oy+Vl| zZAX3SIPOhJSQMJ5V_jd@g%3l&>Q@gW_SU~5PAticO!h*fSR=i%PGdar&1*qA{oGX}|Pfoado`>qFcUkQ;^n+)`4D-dNDR(OT1;(~| zO0}|cBpc>p9sy}uc=s@Djp$sEJt ztXIrwC-t{>3ryQYrO6kW=v(1oLYa|r+UlaQPw0e_DV;4(UV80+@l~B^HpDLpNUJy% ze(7!+m-66Mqi`jIouCKFUx-2?P#H2U9=#KnSOn(%?kkzy?)Ba7)+yI^-)(JJ_p@K< zd{J=a<;vF~5}RX%;$&LL(3-hz{j5_^nf7XGZh;3c-8cG0rx6%tw<(8mQOEsBdPulM zAot2!u~uZdsg8BZm=y!RXlU1E?}uSKWwz8 zzN*{8%VA6TQ+f?L9xr~Uke^yimi8JD&Awb*qxXttlHq(T$QO~`98qe(I-AusY7uM^ znB~b8e&^&i`&WLC60tO&`ajBT)2vkLfmCSC%c~qxqMK9vlrM)W|dSUgfUR5h0fGvE?VH z)bb|JQ;?Zf+UJw>kx*H>a_iVzv z1FWx@D#AnVarYf{@cpC7oYh9}Zb)U}BmdvmjR#*F=70Cyn|YtO5U=nO_TrS;RFqNn zYtQ0%b+yas+AuBPo!C-qJ*T@Htd|@>;xMwcr46dOh>eG+)md#T_2&S7KR7W ze=ulfSlYpe-HDT{E-vu?J}!Vj3&ULzC7+30PWG;trk-Lab_@?ML{4}P>(CD2bLzA&W!G!-uDwfR73$#;CHYuV?35^ylf%4et5j5%XJ^flQCh(*1$ zMzLouW3q1jMDsaxi_38*j|H^)k8*;7)EEpp6Vt0!kl?$S)irFS-K0hD#j#F2&mL=1 zNB|6N#ss>Sy}@m3s0+H?Fc{xmE#r1LpDBRy_4!$}(U|68cYMWh{^!KepncHx7GnDg zr%f>OEGoGPPOx?grILUcTcu;(lS21(|IZyDj=G z=x|j6c>DiD8Z6-CbU%$mre;Nt?PFbk_9&2uH64`@FzK5PLOR7wBB1{1h!^OfN{XL; zo%^qj9#d!6i=XbcU=Le3r;g(F6@aU;DF0Ra!HEZtM+T=3iSg|7d(JY^>%PP!>S-2# ziEAc5GvrvUk1%bfMRHPm;&ONY9QPpUB7lu4eykl557=<&w%a|>+8@zMK`#nfl4ZPY zSW_MyL^XOTk?wyJz6(y`Z{DnI%cYn7cVGWI0eOfTJBCqrcN$G-7u?bVJO_@`H?7jC7^ zg}m_mx+l?;7?pcP#B-hR%7Y1;YehQ6XJ&HKge$y%&bB8i-7(xD*}o%bQwA=xuj~is z>AkLj;_SVCVgYsRlJS~D&7z>Gg{da?_;zYxys^sU<|QMrJj3OL*YB$5ZdQZ=(+UAY zd;_z%;d22Vuevp%ClQ{8}c$wF+KCpPNa+;4O>cW4>W3 zAZ;>mOAiJ;p^6h~lb(glJT$7zxOqRE4f5!j`WOo&Fj0MLi|x+^JaM+RI~+%Tj*pc9@|CjotM_J1 zl>I7CD!SjczQ)p~_&O)az#}Y|O#fm}e=QP81ptEe*ZKpD z!T<5-Peu5v=buNa4Gkx^NSA)e1k!&XP&h!>{%;XI4W#b;UvTu#q~5p5;tCfB3kP2d z2d7bc61u&husmSA(N$&57&JMhY9sB{iRyiEy!pZ=`}F7ffS*+$<@K&oPP8p>y#>^G zN39uy+zMIl9RoswAn|k$)7+ow#I!&XVSLvY&&&C+zVSoMl?kkH>Gwo-wNnozQjBf( z4ok}ud6R|B4k-CpyMrJroI3i@V60*Of-C$}B@RJr8xbKcOr%!z_ zFN3ic<{y{3*V0Om7k%uCzobKXUlwc3xhtt;xA(51TSCn^1S&2WW!WTxNR z0_yrbKIZy#**Sn`K*|Pq2*179{6egnrjPS##;X#Il9=^)v``EtAW;79q&~g6K&_(R zTeIU{!P4!Cm6e#8^Xr`OxgV^li`iPNzzX$YkdxsL1|3mkFsSgbP6*hM3@$Ol1L12@ z-L|@Vse%VCW_$#1MJ|b}9{~22^fG{)yeM=n6+3MKl^q^PjO3vmW8mLyJI(4Uzi4j3N zC{I=H`u+^_!=n5i3ZI)jvmTx;E8S{!nPT-@TvATQR=(q%W7uqrM3i!6wr zr30aUUKdx=fvLe`X6T!xYJ$}Bec0_hEg(K#mW4V47~2Bs%VOZvZrWYJ@0eV}0+a** z=lH{uH95f0>Zo#O;m(2ZaZdkjfF)y0Dj%Aqhhe1iCW_*1Ftw(= zf=-xT_KyPfzk{$(Q7~78L!CJYp`7v3N2I;at){dh42ID&ZT(qUK7|@#Kx&B9A8FXx zS(~?>nFHkR8gm-l82^2ZY3+W`lO|Q08iEVDTe#BrXye(&GMfEYW&sOi1gHccLU4R` zik$8Q1uakeaIbo^6@2P|ki}~<6rfa}x3B?JhB%18yVY|}_K)=^iMiuo^rzocPY;iE zYVy{fluRwh(B}E-Iroh^VVb830`&aHF9-MDJS(p~m~c4Lp3h-PvDszyb@`)uJ{}w8 z{6yBoMD5VZNYzL+auVXy%+K(=^^s%H^kqqOpu+pib#BGAh;{jZciPD=yEE?8KgI%p zOdODSivVBY*FKYDi_7b{(M`VflLdo>^;h0DT?jB%2(*<70tAZL{wtZ+4tH7Exwp!+ z2!mcJ-5BUzm0QfWfbqRMBADUYul}Sj zo9%~pWLceRv%sUv-U2&nlreWme8AQw4C=^s^HcQ_JEZB2BVe;6)gCRwb$#xZFQ=My zW+N`2JlaZMrQcU$v4I=1+>D!iLmp%x+A@p1~4Q5~U;MrYZL zejyoCpmxcYc=d~UeC(t?p2;;j%TdLy*-K*L&435Md$m>W>c8zQtVzAR^5Ys@>d`Zu znh-1s8{&it+337%`r){t*_KXLkd&_jsz5#^o!gQclbJ3F!O~iP8f~5CF(5{a3~$w& zf41LfJeT3w6;wImWX&uA*R8o@75hc2MXVu^vlU5*HwxyD;_#L?tRM-_f1n2e8BP6Ke*&K;#9SB!$gUQR>+y z3YPi0zIyz(BVVLfRHuW!M z|0MHuqoMbt=9}HFLRVn$L2G#=b0l)Os;^k#d(!$cE2QL|b}!}dCrPwhm}HmMA6qTA zgSslem~6Kccko1j`O)-OOy&$fwj)_LBxIWxHfd#CovP^|Z}mB)hNa-|^kX#&FBJJ7 zc1k)J_%vigx=3RR>)?4Wessux@iBNg!Z8lpUt-{fx5e35b>~qd91}CN@WG`IU8y)R z$T7sDV6dHRaNy>Q_{Q^>UT@H=x7+sWCy-;Z0q?FVeQ5n-f)0Q;c5|2l2?4{(@YFc; zDQN`MC^l;G^`ZW>i_}Jh`C5|ruF{xfubYC@BZ)}Mf*nqv>SJbO1U?`H7pvD(z#wh$ z)X*(rxALKK8dm#EkI=I2+N{qLOlyT#7L@RgdpoOV0bPwRkCE&EtlhX4K3Du&sIw9b zeq>FV;j`K{tP+8+hs@L~kM0*?kbzX4fG71GYZfvPsJxSH__pQyeZ{?z&vOr^b#>M7 z%KLg=2AwqDcYoK1L1C~j!tgRD1353!t7Z~_&vji0J@>MXz=Lz?UN1H9b9bJSlH0wD z;*=TQ@|NPgcw~`um(B4u+@Y+{he-r}b&!La177yZDjnNjQBlSQVW|X)GJ)J(D0uz> z+wsfsV{^8M31nN}vF$2+NTRUNTHrU;v#2{Yp{jV>)OBVW$k!_xUn_%#YDE;K-h+99eDDRFJ7 zQ1_h`!{lq}m##I`2{;=JI(E0x8&y)I8xcbRhWbA#3d7Mu5dKG6B!H@;vJ8MyAClAl z?<#FxW94h(dUp?7o;@xNGb&qbCAbF-rj&0^XI1Y$*ikz`Z2+#+r5C6n8xBCa2rTov z`iv6%(l8{=lon_9$h40x=;ZE zvA15ExoEVF6@-D6@-MTn8dzK+(kF$2trUY5ng@(s^YJUU&C|Kz-FMs<_-%d_J2*Jw zZGWe9b>m=Ph;i2`WAIk+nZ#X!63u3H_hXNP1E``>&CkN4*(=9nnHQ?%0d$*Ul>F_} zk=Oxy5@1~RKijHuuvM&6v1Dwo_E&+7u8F%E^x3q}-(F8OhjDtSYh@tDw0BsG!Z|Pp~ z_-eE;;-dmZ@+>cs%{qINx0x3Pt!c(LG-Lby;#N?2M0^gg{Fm4b_|wgMtk0^xZ(AKJ zGsw@p9$2I~NwA7tG-f_ET32TVlqB|v08k7eVfPgsF?U>W3``%J`3Gk6Ombp6`hAEt z40;b$a=o`WpUOY@Vykp?!7~^w25IpX0Qf-9haHD3<1o73R58JiSSAh|G48;+4q^Hp zKMMcgPl2qKUw@R3s>E~XWFAy}v;>k&*cxpAfb%6MwGbXtiEEH_?sTglvn7SH3h7UJ zSq^0g_0dZ}g*8TFFj_~l6!2o<>2M*HA-P;%j~!IT*5ueUweSmk)tM6%730FfUDL2o zFKYpiaDT^<|5SbcuW8NKXx9G=5fw8^W@k-fVoft0OPvtv(QrTT&o5ocx(Ik2n=K1# z^DI7wA+{+1lcgx=m4-DZyREglQIOXFpSFta(=YuQOsTV9Iega93ZSf2y)Gfa@zi*Jrw{PL6rL*8Q;vs3yf0pfVsIf&fb{qg4TvBoO76~Tchp^gfzGbqKeGH@D()>oj8#_|b zeW{i)d{+2&5sdAQIQoOIoRLgkZOjY*ET0z7M*zP`RyN(_J5l94*V<3t|?t82O?maD>W!H2d8_!?skO-KT*9ae(Q)V z(fgCdX9A^Ca`Ed8`heIt$dwlB_`4uF`bbi-js)Yz*V=pC-p%zx(v~c0BPn|MNeg+1 zMWN#tLIqp5@rN#iY}{);RyF`ZrT8ZTXODQ{x}Sb;{GKZ3S0|7?H2B~+cDrgc-ZAo) z&(foJ=g7Zm{2>+;XK@DbNCn8BA^|5?cNA-H1_6i@ABgRLHp+`D))0C$#KwLdGUK4# z66P85sIJnN8e?sku9Zj;n8M$|%4VL&+0HRd_u+0rzCiac&wyivNC1eqx!Yb5H@EgK zJ)yYbyMbWeXDQ>c;u~W4q$~>cA>=lTy#ISzk|9`!(#?8 zZNcFF?mk}p$EW<~Va1CIiE`&J*jJ;F7 z4t|lxU*Qm)bsrvH{IN{@pQP(C-u9#AmjY@>rnuSfG?UjvR-y+guu*azEs+;PU{Ip; zd4t>kB3+IVVEKe}h~|%k*a{nDgzT!sSA(0HTmtlhxRJF>rlBLrTyDT?`5zSr{wD>5 z|6!kRg27-@V=p^ji+uf@!omaGcC(w7r4d`ht`cE0#Yn#|O~(6hD_~iZCr#RWraO++ z)bm$?XpPUZCj+F-WGw;WlnjY=gdcaN?0yzOjBb9zidDQuFbp1}Q zh5iu@abgg?BQK_6ff?#A-SDeH2w}HldUq}3Wl|dszj#~#x_<|zj~OB{Qgp&qOSb=Q{N=n)D}~yLQADlx z0r?0VxOM-nJ9Qq!2V?1;+v5?osq-W67YCSJm+(OfcpKN#$0JgS2G6##NgY2h7N&i2 z2xY7kWOG7tY8)MIj_(j0?*#Qu?8cMMJJ<;(*?4g%Q?xqrX(fYcIQ5Ep*?UDXb6fnC z8(vUgp0=e@roE+>)E7kW_~~HKwQ7qdQXl*uV?U=EKaV4Aq*+>=+{Rm87YSvKUlc@) z6Z5sEh>fCz#bh?$({T-tB48L{Y((j(27i#y_}C@uXNDUp)d$N>-HkIF#oZ>)cO*zX zl4tt5;W*Y-imoe+vUcO%KyqZmO=d4cEzR=^FbLBmdWK9T(%AE8X2&k`u(uT#@fqeS zd&Y!HeBW1h3TR$5#bKOKbwcw`T^7iv0SwP-1_|LEoh8Q97(-Wf4 z51SoFK)zlcR<{xRjZS&503Fssxxr{@L>8f_z0f^7!+qeHZ0=RyUDtOu7|Y4J&gcu! z^ZqI%{vT-$5H z>>drv^_?phR34F2X5%~JZp>F~&U|E5SF~0=;=va!kImy{>(-L(pda4UU3GjX%Bjt0 zxjFuX;dM>lZIdjsGXOvAFh2fswx2kaa7?38XVKKtUU*M@6cMkUeD9M5H2EG-tvD9% zwcQTGz#?Uy-$##Nqu4F5)zNj+v=!2C@6ZXJyX@AX;J^s1EFA=XNTH^NZztba`Iv$v zwti=mWZIUm8H44vAS)7)V_a%7`q6%)5CAFA=X~(R7s;Sx&OQ^byEemC`ezI#Qr`U- zzCXQwxkXe2csBrh4$E|c`XwsuD&OnS=_7ZY;@CK+sLlC8Iri4$`?j<^D-&Tas({j) zF(57)WM3}*DxCZIDEfK7LbVo@^rlfe{0`b>`wt~(Av3LC2~WO)ky1LDTKR2ABAB<} ze%u?tc{CY}#;L$@LRAhE(a!+6u)vt)ZF?NJc%Cj~prc;ps>F|AwT-;SBv5p%?<<_3 z3f@fr>P`M!K;l&Qz-BdAL4eOO7`*2P{y=m(a!kAsb`HfUO_-GMYGc`g>C9rI zE@mttQzv^(&)PD~p^79q1Vn(TxS|Xm^J36g1sx#_WZ`{Q=^-nURTWb&AeQ)Gx~DZg zdhU=Hi!pwAsV{*cLr8^(zZQuk%YWt5{xxy%uSY<)f6KMS{v(KU^Z~L8OmY9%hxGSg z&hzr$`C9;IJ;47wXOs#iVdRg`cXa^!aJMe5*Ih{Ao%ju{JH0tc8XhC-2TO#)w!m)T zi8UJry%p+SAuoP_2HrO#=>uvkae3X*sk%=>%`Jn?+j07tRoVn}_c`FY;ZN|`m8jYT z>Wdg;x>}S{Vk0hX{H#b2_{_Z@^{z8{I;5`TKh${(-a;=?10yz*&31!&tg89_ZJY zJK8RGQg8kgT!e&lmdjJSgQbZlp*EHz{6Py85Dd~(@OGNf%5fVq7-ol#jUkt^;|%lu zOn~)3A~mHT=z2AEQg1K{mf_X^XfS%9s`RD*!PLS@I0t<9il9P)^95k7r(2OTMs7Q> zf|xswwJV|n`t{;X76T(ds^2m+@_=-Mo2U$l`?P@pwqAC#V@Tq_2bXQ`QS()(yTf)f zW(ErcuHQG?oqC=xcL#!Le?8D*D>8EX=*c$2LzHK_H<=?h{2h>=De%T$lIAw*U%QmV zYaSd@sJQ^#{ogV2|A!VV843nqW?A8pg2eaNoaY5AYR2#RFGQ$GZg}$nu0x`$bTpTJ z_zfnq&U3rFX(ng&poJ=Mv!6An;Fk@p4@9zT8 zFGVmoDBJ(#Lb>RK^xk%q!V~#J&z0_h8Z63YqPpC7d1g5w^}g3K!sN^+&BS|ti)@yh z`fPIzcTkrL&@TY^h$J4YPgdP^yP?I_XL_uQ$7UEJK%k$Et;oXK1mq%RWFkLKe2{~* zt0x#70uUOq!y*k_q{GeEFbvVA>&l{5!|u3f%xGmc75Ki_X^N4@nDy>PfxxTYWGQdU z7bWATu7s&xVxy=TzTt?C%WEq!KJxBE%ABX7<|}c(%Dy4WEZo4i*gT~fHy;q>lej_XpS*M!)rPk{l@bFDIz}0W~doLgA z4*F=T*?AN;?Bg4=12oaQ)M*th$kj^7yiVrLsoy|w9sD!&OAhwRR4EV9>sX!!x9#%Y zVf&5e4f~VB@2fKi8;#^z01lQ}=}S;pn49fOOWv5^bMvk_;%+Yf@?3frBGX@yFO_^)XKnIPffR(&)OQON!g_?+mICfIFR>%IKad(A$iP-dsZdruc}S?m0d>*}EzGFz(OBQ6QvO!8+goDgrq-RFgeM>M$X zH}7Tte0BFQIg-oOnzDlIR?$0Wcfu1_AhrQ0|I@O%%`qR`89-Y)tYY4aS2prHrTTCj z_3VvDSR_{+K6Il`=U^-B?9aXFRtD5p@{f+jH~3F^9VrfOU=pc!=&9P;Gv5g7v0_Dl zva|Fz72)7M(<<>5e%U$xC*3aKOV9%gU&MwxTkk@``Y;T$rDj@Y{P5MQ%_TL}q{(#v zbcC$n0NNmbB$;=re2g$-fHxQiIs8g{(R(;{o|g?oo%F9m?KKoKJN{P-Kb z`J~nFHG8To4_$GTtkb2sKhFOodAdKoP|K^SHMo8r*q~bJ18fqNQW?q#eg1Ua@|+oC zEApl{zLBHHGI1JDSl8)fO&dq=^tX8wr`CsN+l=W&TL+j`50zCa?mjFz|8i?& zh0$Z`1h;=K-|Iom2DaaAv6;VAG?IPEqq&P`y9F5n=B%6el^tmXs<|==$3nAHgU-)o zjKM)p&pit_uFKE5>={&V3)eeWEXIWO*(A>H*7jQj?Rl6MP?^m?j5r>dQmzjCqi)6C z3x3a)FbFXncl?rVPuL#J3X{9Np?3mAR40O-?fMIY?;F@&MrU<%8?ithdDm9jM$e!4 zM$ga1;R>7^CoE*ufE{nmsEq4E{0i+UU6|FL*ICs81^i+-3yiA!ndL5@dBS4T7VA)moK(j8I^v0MS_1Lx zToN$8S?Th7Pn6o`ry&2VjZ+KE=Ti1b3=YkW;{13|dN(F-@4ZOgMoM+@9XJRdhNbnT zYnzJ#+?27;1~Drv$29qq=S+t}L|U*74ndue`k zPrcH5n@|ByM05IV*we51zcBD?FG5EvphYIAA5!)%ewkgyynmlo{!~SmlrPYSIjq=j z(B#8DK-D{HdLZ84eg0E=J z_jJPiRBz*Mk@^OmQ<>AqNiHgK_I)KVk%?LamDnVW*Z>aw6xav0ICwC*URnbN9dX0m zF}c|df)!Fzi`2t~{_y+9K6Wu$t^U;oYg&!(+4Bt$?pPv*(qGM?0Qi@aUJsxs`sKbh z{XF|CqXzG=LZ?n~d^&W!$Piu^COBgtf^UY*an@L_=Fbn$AJd)P0ZRq1HTh|Nc61 zV0TMp3)1gP6(i@_p%4%{V5#QWPnqnAPW_8b2R#!i)`0dQqBJ2??KwOSWH9RHk{8?NV%)qUx3}&m?>A&s*I;i70X= zXq%k1aW41fG!SSCw``tFUyvo1npgNc9PbeWo|x{C0Tpq;xULO$W`G9(vI#~08z_NL zo+;ll9{~gR+=Z`=9T^@K{dVr`%*pz{?r#B|LRE`U_}lw>Lo6_t`Yo?mKu0Edfr{I# zc0sRAV=c)KaXCTW{_|APsTWo5EBTUB`EBJ${c~&_Fv~4 zYin;KB=}zHBe4WSHa0We{Z}EthY)*ws~dTy=%(mp!y@q(*7~8R&Apf~<7iNr!f-#CyvIA2E1Q z-w0*VR!En5vmzgMS9`-mw^<`Ark?@wDCJZ+?P-KOq*mDb7_g<@Uswy4{bcKTl+#04nCmm?JQI;!66#0R^wZ4lL(M~!?=dppynM( z_O*z71&xxjHso06U`0qAFDc!@GSIw)g1u|aEI`3Nc3frO00fM*fM?e6fqiRCFI4Ol z@VOhM6{(!-?}t2a&Rut&0pUu2$3aDh=twYo3{bx##-!x2y9+-hO0rQxI7l1-zyx4k zmuHnH=_W0xt~iDRY{Qfhkg;!QEI-l1-Go77a|awN(sA05G`!JXEFfVofE{gT SignOutAndRedirect() diff --git a/src/Website/Logic/PackageReportHub.cs b/src/Website/Logic/PackageReportHub.cs deleted file mode 100644 index 56a611feb..000000000 --- a/src/Website/Logic/PackageReportHub.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System; -using System.Linq; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.AspNetCore.SignalR; -using NuGet.Versioning; - -namespace Knapcode.ExplorePackages.Website.Logic -{ - public class PackageReportHub : Hub - { - public const string Path = "/Hubs/PackageReport"; - - private readonly PackageConsistencyService _packageConsistencyService; - private readonly PackageConsistencyContextBuilder _packageConsistencyContextBuilder; - private readonly LatestCatalogCommitFetcher _latestCatalogCommitFetcher; - private readonly UrlReporterProvider _urlReporterProvider; - - public PackageReportHub( - PackageConsistencyService packageConsistencyService, - PackageConsistencyContextBuilder packageConsistencyContextBuilder, - LatestCatalogCommitFetcher latestCatalogCommitFetcher, - UrlReporterProvider urlReporterProvider) - { - _packageConsistencyService = packageConsistencyService; - _packageConsistencyContextBuilder = packageConsistencyContextBuilder; - _latestCatalogCommitFetcher = latestCatalogCommitFetcher; - _urlReporterProvider = urlReporterProvider; - } - - private async Task ExecuteAndReportErrorAsync(Func executeAsync) - { - try - { - _urlReporterProvider.SetUrlReporter(new UrlReporter(this)); - await executeAsync(); - _urlReporterProvider.SetUrlReporter(null); - } - catch - { - await InvokeErrorAsync("An internal server error occurred."); - } - } - - public async Task GetLatestCatalog() - { - await ExecuteAndReportErrorAsync(GetLatestCatalogInternalAsync); - } - - private async Task GetLatestCatalogInternalAsync() - { - await InvokeProgressAsync(0, "Fetching the latest catalog commit..."); - - var commit = await _latestCatalogCommitFetcher.GetLatestCommitAsync(new ProgressReporter(this)); - - var catalogItem = commit.First(); - await InvokeProgressAsync(1, $"Using package {catalogItem.PackageId} {catalogItem.PackageVersion}."); - - await InvokeFoundLatestAsync(catalogItem.PackageId, catalogItem.ParsePackageVersion().ToFullString()); - } - - public async Task Start(string id, string version) - { - await ExecuteAndReportErrorAsync(() => StartInternalAsync(id, version)); - } - - private async Task StartInternalAsync(string id, string version) - { - if (string.IsNullOrWhiteSpace(id)) - { - await InvokeErrorAsync("You must provide a package ID."); - return; - } - - if (!StrictPackageIdValidator.IsValid(id)) - { - await InvokeErrorAsync("The ID you provided is invalid."); - return; - } - - if (string.IsNullOrWhiteSpace(version)) - { - await InvokeErrorAsync("You must provide a package version."); - return; - } - - if (!NuGetVersion.TryParse(version, out var parsedVersion)) - { - await InvokeErrorAsync("The version you provided is invalid."); - return; - } - - await InvokeProgressAsync(0, $"Initializing package report for {id} {version}."); - - var state = new PackageConsistencyState(); - var context = await _packageConsistencyContextBuilder.CreateFromServerAsync(id, version, state); - - var packageDeletedStatus = state.Gallery.PackageState.PackageDeletedStatus; - var isAvailable = packageDeletedStatus == PackageDeletedStatus.NotDeleted; - string availability; - switch (packageDeletedStatus) - { - case PackageDeletedStatus.NotDeleted: - availability = "is available"; - break; - case PackageDeletedStatus.SoftDeleted: - availability = "was soft deleted"; - break; - case PackageDeletedStatus.Unknown: - availability = "was hard deleted or never published"; - break; - default: - throw new NotImplementedException( - $"The package deleted status {packageDeletedStatus} is not supported."); - } - - await InvokeProgressAsync( - 0, - $"{context.Id} {context.Version} {availability}" + - $"{(isAvailable && context.IsSemVer2 ? " and is SemVer 2.0.0" : string.Empty)}. " + - $"The consistency report will now be generated."); - - var report = await _packageConsistencyService.GetReportAsync(context, state, new ProgressReporter(this)); - - await InvokeCompleteAsync(report); - } - - private async Task InvokeProgressAsync(decimal percent, string message) - { - await InvokeOnClientAsync("Progress", percent, message); - } - - private async Task InvokeHttpRequestAsync(string id, string method, string requestUri) - { - await InvokeOnClientAsync("HttpRequest", id, method, requestUri); - } - - private async Task InvokeHttpResponseAsync(string id, int statusCode, string reasonPhrase, decimal duration) - { - await InvokeOnClientAsync("HttpResponse", id, statusCode, reasonPhrase, duration); - } - - private async Task InvokeErrorAsync(string message) - { - await InvokeOnClientAsync("Error", message); - } - - private async Task InvokeCompleteAsync(PackageConsistencyReport report) - { - await InvokeOnClientAsync("Complete", report); - } - - private async Task InvokeFoundLatestAsync(string id, string version) - { - await InvokeOnClientAsync("FoundLatest", new { Id = id, Version = version }); - } - - private async Task InvokeOnClientAsync(string method, params object[] args) - { - await Clients - .Client(Context.ConnectionId) - .SendCoreAsync(method, args); - } - - private class UrlReporter : IUrlReporter - { - private readonly PackageReportHub _hub; - - public UrlReporter(PackageReportHub hub) - { - _hub = hub; - } - - public async Task ReportRequestAsync(Guid id, HttpRequestMessage request) - { - await _hub.InvokeHttpRequestAsync( - id.ToString(), - request.Method.ToString(), - request.RequestUri.AbsoluteUri); - } - - public async Task ReportResponseAsync(Guid id, HttpResponseMessage response, TimeSpan duration) - { - await _hub.InvokeHttpResponseAsync( - id.ToString(), - (int)response.StatusCode, - response.ReasonPhrase, - (decimal)duration.TotalSeconds); - } - } - - private class ProgressReporter : IProgressReporter - { - private readonly PackageReportHub _hub; - - public ProgressReporter(PackageReportHub hub) - { - _hub = hub; - } - - public async Task ReportProgressAsync(decimal percent, string message) - { - await _hub.InvokeProgressAsync(percent, message); - } - } - } -} diff --git a/src/Website/Models/ExploreViewModel.cs b/src/Website/Models/ExploreViewModel.cs deleted file mode 100644 index c94bee9d4..000000000 --- a/src/Website/Models/ExploreViewModel.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Knapcode.ExplorePackages.Website.Models -{ - public class ExploreViewModel - { - public ExploreViewModel() - { - Id = null; - Version = null; - } - - public ExploreViewModel(string id, string version) - { - Id = id; - Version = version; - } - - public string Id { get; } - public string Version { get; } - public bool ImmediatelyStart => !string.IsNullOrWhiteSpace(Id) && !string.IsNullOrWhiteSpace(Version); - } -} diff --git a/src/Website/Startup.cs b/src/Website/Startup.cs index b42eecf41..ecefa695c 100644 --- a/src/Website/Startup.cs +++ b/src/Website/Startup.cs @@ -1,7 +1,5 @@ using System; using System.Linq; -using System.Text.Json.Serialization; -using Knapcode.ExplorePackages.Website.Logic; using Knapcode.ExplorePackages.Worker; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; @@ -43,15 +41,7 @@ public void ConfigureServices(IServiceCollection services) }); services - .AddMvc() - .AddRazorRuntimeCompilation(); - - services - .AddSignalR() - .AddJsonProtocol(options => - { - options.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter()); - }); + .AddMvc(); var microsoftIdentityBuilder = services .AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) @@ -113,20 +103,21 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseRouting(); + app.UseHsts(); + app.Use(async (context, next) => + { + context.Response.Headers.Add("X-Content-Type-Options", "nosniff"); + await next(); + }); + app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(routes => { - routes.MapHub(PackageReportHub.Path); - routes.MapControllerRoute( name: "default", - pattern: "{controller=Home}/{action=Index}/{id?}"); - - routes.MapControllerRoute( - name: "explore", - pattern: "{controller=Home}/{action=Explore}/{id}/{version}"); + pattern: "{controller=Home}/{action=Index}"); }); } } diff --git a/src/Website/Views/Home/Index.cshtml b/src/Website/Views/Home/Index.cshtml index 23aa31939..313797e8e 100644 --- a/src/Website/Views/Home/Index.cshtml +++ b/src/Website/Views/Home/Index.cshtml @@ -1,727 +1,5 @@ -@model ExploreViewModel -@using Knapcode.ExplorePackages.Website.Logic; -@{ - ViewData["Title"] = "Consistency"; - ViewData["PageIndex"] = "consistency"; +@{ + ViewData["Title"] = "We're up and running."; }

@ViewData["Title"]

- -

Enter a package ID and version below to check its consistency on the various NuGet API endpoints on NuGet.org.

- -
-
- - -
-
- - -
- - -
- -
- -
- -
-
-
-
- 0% Complete -
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - -@section Scripts { - - - -} \ No newline at end of file diff --git a/src/Website/Views/Shared/_Layout.cshtml b/src/Website/Views/Shared/_Layout.cshtml index 11cbfa6b7..cbf9a9a63 100644 --- a/src/Website/Views/Shared/_Layout.cshtml +++ b/src/Website/Views/Shared/_Layout.cshtml @@ -21,7 +21,7 @@