@@ -372,75 +372,6 @@ def build_composer_purl(uri):
372372register_pattern ("nuget" , nuget_api_pattern )
373373
374374
375- # https://sourceforge.net/projects/turbovnc/files/3.1/turbovnc-3.1.tar.gz/download
376- # https://sourceforge.net/projects/scribus/files/scribus/1.6.0/scribus-1.6.0.tar.gz/download
377- # https://sourceforge.net/projects/ventoy/files/v1.0.96/Ventoy%201.0.96%20release%20source%20code.tar.gz/download
378- # https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.4/geoserver-2.23.4-war.zip/download
379- sourceforge_download_pattern = (
380- r"^https?://.*sourceforge.net/projects/"
381- r"(?P<name>.+)/"
382- r"files/"
383- r"(?i:(?P=name)/)?" # optional case-insensitive name segment repeated
384- r"v?(?P<version>[0-9\.]+)/" # version restricted to digits and dots
385- r"(?i:(?P=name)).*(?P=version).*" # case-insensitive matching for {name}-{version}
386- r"(/download)$" # ending with "/download"
387- )
388-
389- register_pattern ("sourceforge" , sourceforge_download_pattern )
390-
391-
392- # https://sourceforge.net/projects/spacesniffer/files/spacesniffer_1_3_0_2.zip/download
393- sourceforge_download_pattern_bis = (
394- r"^https?://.*sourceforge.net/projects/"
395- r"(?P<name>.+)/"
396- r"files/"
397- r"(?i:(?P=name))_*(?P<version>[0-9_]+).*"
398- r"(/download)$" # ending with "/download"
399- )
400-
401- register_pattern ("sourceforge" , sourceforge_download_pattern_bis )
402-
403-
404- @purl_router .route ("https?://.*sourceforge.net/project/.*" )
405- def build_sourceforge_purl (uri ):
406- # We use a more general route pattern instead of using `sourceforge_pattern`
407- # below by itself because we want to capture all sourceforge download URLs,
408- # even the ones that do not fit `sourceforge_pattern`. This helps prevent
409- # url2purl from attempting to create a generic PackageURL from a sourceforge
410- # URL that we can't handle.
411-
412- # http://master.dl.sourceforge.net/project/libpng/zlib/1.2.3/zlib-1.2.3.tar.bz2
413- sourceforge_pattern = (
414- r"^https?://.*sourceforge.net/projects?/"
415- r"(?P<namespace>([^/]+))/" # do not allow more "/" segments
416- r"(OldFiles/)?"
417- r"(?P<name>.+)/"
418- r"(?P<version>[v0-9\.]+)/" # version restricted to digits and dots
419- r"(?P=name).*(?P=version).*" # {name}-{version} repeated in the filename
420- r"[^/]$" # not ending with "/"
421- )
422-
423- sourceforge_purl = purl_from_pattern ("sourceforge" , sourceforge_pattern , uri )
424-
425- if not sourceforge_purl :
426- # Get the project name from `uri` and use that as the Package name
427- # http://master.dl.sourceforge.net/project/aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip
428- split_uri = uri .split ("/project/" )
429-
430- # http://master.dl.sourceforge.net, aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip
431- if len (split_uri ) >= 2 :
432- # aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip
433- remaining_uri_path = split_uri [1 ]
434- # aloyscore, aloyscore, 0.1a1%2520stable, 0.1a1_stable_AloysCore.zip
435- remaining_uri_path_segments = remaining_uri_path .split ("/" )
436- if remaining_uri_path_segments :
437- project_name = remaining_uri_path_segments [0 ] # aloyscore
438- sourceforge_purl = PackageURL (
439- type = "sourceforge" , name = project_name , qualifiers = {"download_url" : uri }
440- )
441- return sourceforge_purl
442-
443-
444375# https://crates.io/api/v1/crates/rand/0.7.2/download
445376cargo_pattern = r"^https?://crates.io/api/v1/crates/(?P<name>.+)/(?P<version>.+)(\/download)$"
446377
@@ -667,74 +598,6 @@ def build_bitbucket_purl(url):
667598 )
668599
669600
670- @purl_router .route ("https?://gitlab\\ .com/(?!.*/archive/).*" )
671- def build_gitlab_purl (url ):
672- """
673- Return a PackageURL object from Gitlab `url`.
674- For example:
675- https://gitlab.com/TG1999/firebase/-/tree/1a122122/views
676- https://gitlab.com/TG1999/firebase/-/tree
677- https://gitlab.com/TG1999/firebase/-/master
678- https://gitlab.com/tg1999/Firebase/-/tree/master
679- https://gitlab.com/tg1999/Firebase/-/commit/bf04e5f289885cf2f20a92b387bcc6df33e30809
680- """
681- # https://gitlab.com/<ns>/<name>/-/commit/<sha>
682- commit_pattern = (
683- r"https?://gitlab.com/"
684- r"(?P<namespace>[^/]+)/(?P<name>[^/]+)/-/commit/"
685- r"(?P<version>[0-9a-fA-F]{7,64})/?$"
686- )
687-
688- commit_matche = re .search (commit_pattern , url )
689- if commit_matche :
690- return PackageURL (
691- type = "gitlab" ,
692- namespace = commit_matche .group ("namespace" ),
693- name = commit_matche .group ("name" ),
694- version = commit_matche .group ("version" ),
695- qualifiers = {},
696- subpath = "" ,
697- )
698-
699- segments = get_path_segments (url )
700-
701- if not len (segments ) >= 2 :
702- return
703- namespace = segments [0 ]
704- name = segments [1 ]
705- version = None
706- subpath = None
707-
708- # https://gitlab.com/TG1999/firebase/master
709- if (len (segments ) >= 3 ) and segments [2 ] != "-" and segments [2 ] != "tree" :
710- version = segments [2 ]
711- subpath = "/" .join (segments [3 :])
712-
713- # https://gitlab.com/TG1999/firebase/-/tree/master
714- if len (segments ) >= 5 and (segments [2 ] == "-" and segments [3 ] == "tree" ):
715- version = segments [4 ]
716- subpath = "/" .join (segments [5 :])
717-
718- return PackageURL (
719- type = "gitlab" ,
720- namespace = namespace ,
721- name = name ,
722- version = version ,
723- subpath = subpath ,
724- )
725-
726-
727- # https://gitlab.com/hoppr/hoppr/-/archive/v1.11.1-dev.2/hoppr-v1.11.1-dev.2.tar.gz
728- gitlab_archive_pattern = (
729- r"^https?://gitlab.com/"
730- r"(?P<namespace>.+)/(?P<name>.+)/-/archive/(?P<version>.+)/"
731- r"(?P=name)-(?P=version).*"
732- r"[^/]$"
733- )
734-
735- register_pattern ("gitlab" , gitlab_archive_pattern )
736-
737-
738601# https://hackage.haskell.org/package/cli-extras-0.2.0.0/cli-extras-0.2.0.0.tar.gz
739602hackage_download_pattern = (
740603 r"^https?://hackage.haskell.org/package/"
0 commit comments