@@ -9,8 +9,10 @@ import 'package:clock/clock.dart';
99import 'package:crypto/crypto.dart' ;
1010import 'package:shelf/shelf.dart' as shelf;
1111
12+ import '../../admin/actions/actions.dart' ;
1213import '../../package/backend.dart' ;
1314import '../../package/models.dart' ;
15+ import '../../package/overrides.dart' ;
1416import '../../shared/configuration.dart' ;
1517import '../../shared/redis_cache.dart' ;
1618import '../../shared/urls.dart' as urls;
@@ -35,6 +37,7 @@ Future<shelf.Response> packageAtomFeedhandler(
3537 shelf.Request request,
3638 String package,
3739) async {
40+ checkPackageVersionParams (package);
3841 final feedContent = await cache
3942 .packageAtomFeedXml (package)
4043 .get (() => buildPackageAtomFeedContent (package));
@@ -50,19 +53,25 @@ Future<shelf.Response> packageAtomFeedhandler(
5053/// Builds the content of the /feed.atom endpoint.
5154Future <String > buildAllPackagesAtomFeedContent () async {
5255 final versions = await packageBackend.latestPackageVersions (limit: 100 );
56+ versions.removeWhere ((pv) => pv.isModerated || pv.isRetracted);
5357 final feed = _allPackagesFeed (versions);
5458 return feed.toXmlDocument ();
5559}
5660
5761/// Builds the content of the `/packages/<package>/feed.atom` endpoint.
5862Future <String > buildPackageAtomFeedContent (String package) async {
63+ if (isSoftRemoved (package) ||
64+ ! await packageBackend.isPackageVisible (package)) {
65+ throw NotFoundException .resource (package);
66+ }
5967 final versions = await packageBackend
6068 .streamVersionsOfPackage (
6169 package,
6270 order: '-created' ,
6371 limit: 10 ,
6472 )
6573 .toList ();
74+ versions.removeWhere ((pv) => pv.isModerated || pv.isRetracted);
6675 final feed = _packageFeed (package, versions);
6776 return feed.toXmlDocument ();
6877}
0 commit comments