From 445612372c12394da1558ddb1820e2bef635c972 Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Mon, 15 Jun 2020 12:54:18 +0530 Subject: [PATCH 1/8] WIP : Add GitHub API importer Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/__init__.py | 1 + vulnerabilities/importers/github.py | 260 ++++++++++++++++++ .../migrations/0017_github_importer.py | 55 ++++ vulnerabilities/tests/test_github.py | 75 +++++ 4 files changed, 391 insertions(+) create mode 100644 vulnerabilities/importers/github.py create mode 100644 vulnerabilities/migrations/0017_github_importer.py create mode 100644 vulnerabilities/tests/test_github.py diff --git a/vulnerabilities/importers/__init__.py b/vulnerabilities/importers/__init__.py index 2edd4454c..f7243a081 100644 --- a/vulnerabilities/importers/__init__.py +++ b/vulnerabilities/importers/__init__.py @@ -36,3 +36,4 @@ from vulnerabilities.importers.gentoo import GentooDataSource from vulnerabilities.importers.openssl import OpenSSLDataSource from vulnerabilities.importers.ubuntu_usn import UbuntuUSNDataSource +from vulnerabilities.importers.github import GitHubAPIDataSource diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py new file mode 100644 index 000000000..985a0db5a --- /dev/null +++ b/vulnerabilities/importers/github.py @@ -0,0 +1,260 @@ +# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# http://nexb.com and https://github.com/nexB/vulnerablecode/ +# The VulnerableCode software is licensed under the Apache License version 2.0. +# Data generated with VulnerableCode require an acknowledgment. +# +# You may not use this software except in compliance with the License. +# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software distributed +# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# +# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode +# derivative work, you must accompany this data with the following acknowledgment: +# +# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# OR CONDITIONS OF ANY KIND, either express or implied. No content created from +# VulnerableCode should be considered or used as legal advice. Consult an Attorney +# for any legal advice. +# VulnerableCode is a free software code scanning tool from nexB Inc. and others. +# Visit https://github.com/nexB/vulnerablecode/ for support and download. + + +import os +import dataclasses +import json +from typing import Set +from typing import Tuple +from typing import List +import xml.etree.ElementTree as ET + +import requests +from dephell_specifier import RangeSpecifier +from packageurl import PackageURL + +from vulnerabilities.data_source import Advisory +from vulnerabilities.data_source import DataSource +from vulnerabilities.data_source import DataSourceConfiguration + + +class GitHubTokenError(Exception): + pass + + +@dataclasses.dataclass +class GitHubAPIDataSourceConfiguration(DataSourceConfiguration): + endpoint: str + ecosystems: list + + +class GitHubAPIDataSource(DataSource): + + CONFIG_CLASS = GitHubAPIDataSourceConfiguration + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + try: + self.gh_token = os.environ["GH_TOKEN"] + except KeyError as e: + raise GitHubTokenMissingError("Envirnomental variable GH_TOKEN is missing") + + def __enter__(self): + self.advisories = self.fetch() + + def updated_advisories(self) -> Set[Advisory]: + return self.batch_advisories(self.process_response()) + + def fetch(self): + # set of all possible values of first '%s' = {'MAVEN','COMPOSER', 'NUGET'} + # second '%s' is interesting, it will have the value '' for the first request, + # since we don't have any value for endCursor at the beginning + # for all the subsequent requests it will have value 'after: "{endCursor}"' + query = """ + query MyQuery { + securityVulnerabilities(first: 100, ecosystem: %s, %s) { + edges { + node { + advisory { + identifiers { + type + value + } + summary + } + package { + name + } + vulnerableVersionRange + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + """ + headers = {"Authorization": "token " + self.gh_token} + api_data = {} + for ecosystem in self.config.ecosystems: + + api_data[ecosystem] = [] + end_cursor_exp = "" + + while True: + + query_json = {"query": query % (ecosystem, end_cursor_exp)} + resp = requests.post( + self.config.endpoint, headers=headers, json=query_json + ).json() + + if resp.get("message") == "Bad credentials": + raise GitHubTokenError("Invalid GitHub token") + + end_cursor = resp["data"]["securityVulnerabilities"]["pageInfo"][ + "endCursor" + ] + end_cursor_exp = "after: {}".format('"{}"'.format(end_cursor)) + api_data[ecosystem].append(resp) + + if not resp["data"]["securityVulnerabilities"]["pageInfo"][ + "hasNextPage" + ]: + break + + return api_data + + def set_version_api(self, ecosystem): + + if ecosystem == "MAVEN": + self.version_api = MavenVersionAPI() + + elif ecosystem == "NUGET": + self.version_api = NugetVersionAPI() + + elif ecosystem == "COMPOSER": + self.version_api = ComposerVersionAPI() + + def process_response(self) -> List[Advisory]: + adv_list = [] + for ecosystem in self.advisories: + self.set_version_api(ecosystem) + pkg_type = ecosystem.lower() + for resp_page in self.advisories[ecosystem]: + for adv in resp_page["data"]["securityVulnerabilities"]["edges"]: + artifact = adv["node"]["package"]["name"] + artifact_comps = artifact.split(":") + + if len(artifact_comps) != 2: + continue + + ns, pkg_name = artifact_comps + aff_range = adv["node"]["vulnerableVersionRange"] + # print(pkg_name,aff_range) + self.version_api.load_to_api(artifact) + aff_vers, unaff_vers = self.categorize_versions( + aff_range, self.version_api.get(artifact) + ) + + affected_purls = { + PackageURL( + name=pkg_name, namespace=ns, version=version, type=pkg_type + ) + for version in aff_vers + } + + unaffected_purls = { + PackageURL( + name=pkg_name, namespace=ns, version=version, type=pkg_type + ) + for version in unaff_vers + } + + cve_ids = set() + ref_ids = set() + vuln_desc = adv["node"]["advisory"]["summary"] + + for vuln in adv["node"]["advisory"]["identifiers"]: + if vuln["type"] == "CVE": + cve_ids.add(vuln["value"]) + else: + ref_ids.add(vuln["value"]) + for cve_id in cve_ids: + adv_list.append( + Advisory( + cve_id=cve_id, + summary=vuln_desc, + impacted_package_urls=affected_purls, + resolved_package_urls=unaffected_purls, + reference_ids=ref_ids, + ) + ) + print(adv_list[-1]) + return adv_list + + @staticmethod + def categorize_versions( + version_range: str, all_versions: Set[str] + ) -> Tuple[Set[str], Set[str]]: + version_range = RangeSpecifier(version_range) + affected_versions = { + version for version in all_versions if version in version_range + } + return (affected_versions, all_versions - affected_versions) + + +class MavenVersionAPI: + def __init__(self): + self.cache = {} + + def get(self, pkg_name: str) -> Set[str]: + return self.cache.get(pkg_name, set()) + + def load_to_api(self, pkg_name: str): + + if pkg_name in self.cache: + return + + artifact_comps = pkg_name.split(":") + endpoint = self.artifact_url(artifact_comps) + resp = requests.get(endpoint).content + + try: + + xml_resp = ET.ElementTree(ET.fromstring(resp.decode("utf-8"))) + self.cache[pkg_name] = self.extract_versions(xml_resp) + + except ET.ParseError: + self.cache[pkg_name] = set() + + @staticmethod + def artifact_url(artifact_comps: List[str]) -> str: + + base_url = "https://repo.maven.apache.org/maven2/{}" + group_id, artifact_id = artifact_comps + group_url = group_id.replace(".", "/") + suffix = group_url + "/" + artifact_id + "/" + "maven-metadata.xml" + endpoint = base_url.format(suffix) + + return endpoint + + @staticmethod + def extract_versions(xml_response: ET.ElementTree) -> Set[str]: + + all_versions = set() + for child in xml_response.getroot().iter(): + if child.tag == "version": + all_versions.add(child.text) + + return all_versions + + +class NugetVersionAPI: + def __init__(self): + raise NotImplementedError + + +class ComposerVersionAPI: + def __init__(self): + raise NotImplementedError diff --git a/vulnerabilities/migrations/0017_github_importer.py b/vulnerabilities/migrations/0017_github_importer.py new file mode 100644 index 000000000..c9bb55cec --- /dev/null +++ b/vulnerabilities/migrations/0017_github_importer.py @@ -0,0 +1,55 @@ +# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# http://nexb.com and https://github.com/nexB/vulnerablecode/ +# The VulnerableCode software is licensed under the Apache License version 2.0. +# Data generated with VulnerableCode require an acknowledgment. +# +# You may not use this software except in compliance with the License. +# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software distributed +# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# +# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode +# derivative work, you must accompany this data with the following acknowledgment: +# +# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# OR CONDITIONS OF ANY KIND, either express or implied. No content created from +# VulnerableCode should be considered or used as legal advice. Consult an Attorney +# for any legal advice. +# VulnerableCode is a free software code scanning tool from nexB Inc. and others. +# Visit https://github.com/nexB/vulnerablecode/ for support and download. + +from django.db import migrations + + +def add_github_importer(apps, _): + Importer = apps.get_model('vulnerabilities', 'Importer') + + Importer.objects.create( + name='github', + license='', + last_run=None, + data_source='GitHubAPIDataSource', + data_source_cfg={'endpoint':'https://api.github.com/graphql', + 'ecosystems':['MAVEN'] +}, + ) + + +def remove_github_importer(apps, _): + Importer = apps.get_model('vulnerabilities', 'Importer') + qs = Importer.objects.filter(name='github') + if qs: + qs[0].delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('vulnerabilities', '0016_ubuntu_usn_importer'), + ] + + operations = [ + migrations.RunPython(add_github_importer, remove_github_importer), + ] \ No newline at end of file diff --git a/vulnerabilities/tests/test_github.py b/vulnerabilities/tests/test_github.py new file mode 100644 index 000000000..8caa26108 --- /dev/null +++ b/vulnerabilities/tests/test_github.py @@ -0,0 +1,75 @@ +# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# http://nexb.com and https://github.com/nexB/vulnerablecode/ +# The VulnerableCode software is licensed under the Apache License version 2.0. +# Data generated with VulnerableCode require an acknowledgment. +# +# You may not use this software except in compliance with the License. +# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software distributed +# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# +# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode +# derivative work, you must accompany this data with the following acknowledgment: +# +# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# OR CONDITIONS OF ANY KIND, either express or implied. No content created from +# VulnerableCode should be considered or used as legal advice. Consult an Attorney +# for any legal advice. +# VulnerableCode is a free software code scanning tool from nexB Inc. and others. +# Visit https://github.com/nexB/vulnerablecode/ for support and download. + +import os +import unittest + +from vulnerabilities.importers.github import GitHubAPIDataSource +from vulnerabilities.importers.github import MavenVersionAPI + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +TEST_DATA = os.path.join(BASE_DIR, "test_data") + + +class TestGitHubAPIDataSource(unittest.TestCase): + @classmethod + def setUpClass(cls): + data_source_cfg = { + "endpoint": "https://api.example.com/graphql", + "ecosystems": ["MAVEN"], + } + cls.data_src = GitHubAPIDataSource(1, config=data_source_cfg) + + def test_categorize_versions(self): + eg_version_range = ">= 3.3.0, < 3.3.5" + eg_versions = {"3.3.6", "3.3.0", "3.3.4", "3.2.0"} + + aff_vers, safe_vers = self.data_src.categorize_versions( + eg_version_range, eg_versions + ) + exp_safe_vers = {"3.3.6", "3.2.0"} + exp_aff_vers = {"3.3.0", "3.3.4"} + + assert aff_vers == exp_aff_vers + assert safe_vers == exp_safe_vers + + +class TestMavenVersionAPI(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.version_api = MavenVersionAPI() + + def test_artifact_url(self): + eg_comps1 = ["org.apache", "kafka"] + eg_comps2 = ["apple.msft.windows.mac.oss", "exfat-ntfs"] + + url1 = self.version_api.artifact_url(eg_comps1) + url2 = self.version_api.artifact_url(eg_comps2) + + assert ( + "https://repo.maven.apache.org/maven2/org/apache/kafka/maven-metadata.xml" + == url1 + ) + assert ( + "https://repo.maven.apache.org/maven2" + "/apple/msft/windows/mac/oss/exfat-ntfs/maven-metadata.xml" == url2 + ) From bec7309bdce81293a0394583d142e30082686abb Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Mon, 15 Jun 2020 14:30:37 +0530 Subject: [PATCH 2/8] Add GH_TOKEN environment variable in Travis CI Signed-off-by: Shivam Sandbhor --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9f8d928eb..a6c60ceed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,9 @@ install: - pip install -r requirements.txt env: + global: - SECRET_KEY="i1bn=oly)w*2yl-5yc&f!vvgt)p)fh3_2$r#spa!*sw36f5ov7" + - GH_TOKEN="dummygithubtoken" before_script: - pycodestyle --exclude=migrations,settings.py,venv,lib_oval.py,test_ubuntu.py,test_suse.py,test_data_source.py --max-line-length=100 . From 56126ab09d02c07d7dc1c8a4dd31b248132e9935 Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Mon, 15 Jun 2020 22:06:37 +0530 Subject: [PATCH 3/8] Add import NUGET ecosystem data from GitHub API Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/github.py | 73 ++++++++++++++++--- .../migrations/0017_github_importer.py | 2 +- 2 files changed, 62 insertions(+), 13 deletions(-) diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index 985a0db5a..1ade8b314 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -56,8 +56,8 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) try: self.gh_token = os.environ["GH_TOKEN"] - except KeyError as e: - raise GitHubTokenMissingError("Envirnomental variable GH_TOKEN is missing") + except KeyError: + raise GitHubTokenError("Envirnomental variable GH_TOKEN is missing") def __enter__(self): self.advisories = self.fetch() @@ -136,6 +136,23 @@ def set_version_api(self, ecosystem): elif ecosystem == "COMPOSER": self.version_api = ComposerVersionAPI() + @staticmethod + def process_name(ecosystem, pkg_name): + + if ecosystem == "MAVEN": + + artifact_comps = pkg_name.split(":") + if len(artifact_comps) != 2: + return + ns, name = artifact_comps + return ns, name + + if ecosystem == "NUGET": + return None, pkg_name + + if ecosystem == "COMPOSER": + raise NotImplementedError + def process_response(self) -> List[Advisory]: adv_list = [] for ecosystem in self.advisories: @@ -143,18 +160,16 @@ def process_response(self) -> List[Advisory]: pkg_type = ecosystem.lower() for resp_page in self.advisories[ecosystem]: for adv in resp_page["data"]["securityVulnerabilities"]["edges"]: - artifact = adv["node"]["package"]["name"] - artifact_comps = artifact.split(":") + name = adv["node"]["package"]["name"] - if len(artifact_comps) != 2: + if self.process_name(ecosystem, name): + ns, pkg_name = self.process_name(ecosystem, name) + else: continue - - ns, pkg_name = artifact_comps aff_range = adv["node"]["vulnerableVersionRange"] - # print(pkg_name,aff_range) - self.version_api.load_to_api(artifact) + self.version_api.load_to_api(name) aff_vers, unaff_vers = self.categorize_versions( - aff_range, self.version_api.get(artifact) + aff_range, self.version_api.get(name) ) affected_purls = { @@ -190,7 +205,7 @@ def process_response(self) -> List[Advisory]: reference_ids=ref_ids, ) ) - print(adv_list[-1]) + # print(adv_list[-1]) return adv_list @staticmethod @@ -252,7 +267,41 @@ def extract_versions(xml_response: ET.ElementTree) -> Set[str]: class NugetVersionAPI: def __init__(self): - raise NotImplementedError + self.cache = {} + + def get(self, pkg_name): + return self.cache.get(pkg_name.lower(), set()) + + def load_to_api(self, pkg_name: str): + if pkg_name in self.cache: + return + endpoint = self.nuget_url(pkg_name) + try: + resp = requests.get(endpoint).json() + # pkg_name=Microsoft.NETCore.UniversalWindowsPlatform triggers + # JSONDecodeError. + except (json.decoder.JSONDecodeError, KeyError): + self.cache[pkg_name.lower()] = set() + return + + self.cache[pkg_name.lower()] = self.extract_versions(resp) + + @staticmethod + def nuget_url(pkg_name): + base_url = "https://api.nuget.org/v3/registration5-semver1/{}/index.json" + return base_url.format(pkg_name.lower()) + + @staticmethod + def extract_versions(json_resp): + all_versions = set() + try: + for entry in json_resp["items"][0]["items"]: + all_versions.add(entry["catalogEntry"]["version"]) + # json response for YamlDotNet.Signed triggers this exception + except KeyError: + return all_versions + + return all_versions class ComposerVersionAPI: diff --git a/vulnerabilities/migrations/0017_github_importer.py b/vulnerabilities/migrations/0017_github_importer.py index c9bb55cec..5b7d67a0c 100644 --- a/vulnerabilities/migrations/0017_github_importer.py +++ b/vulnerabilities/migrations/0017_github_importer.py @@ -32,7 +32,7 @@ def add_github_importer(apps, _): last_run=None, data_source='GitHubAPIDataSource', data_source_cfg={'endpoint':'https://api.github.com/graphql', - 'ecosystems':['MAVEN'] + 'ecosystems':['MAVEN','NUGET'] }, ) From 3e5b00e47503c7982ee863c24b3332fb8ac288e9 Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Tue, 16 Jun 2020 12:40:42 +0530 Subject: [PATCH 4/8] Add support for composer vulnerabilities Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/github.py | 36 +++++++++++++++++-- .../migrations/0017_github_importer.py | 2 +- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index 1ade8b314..f646148a1 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -151,7 +151,8 @@ def process_name(ecosystem, pkg_name): return None, pkg_name if ecosystem == "COMPOSER": - raise NotImplementedError + vendor, name = pkg_name.split("/") + return vendor, name def process_response(self) -> List[Advisory]: adv_list = [] @@ -306,4 +307,35 @@ def extract_versions(json_resp): class ComposerVersionAPI: def __init__(self): - raise NotImplementedError + self.cache = {} + + def get(self, pkg_name): + return self.cache.get(pkg_name.lower(), set()) + + def load_to_api(self, pkg_name): + if pkg_name in self.cache: + return + endpoint = self.composer_url(pkg_name) + json_resp = requests.get(endpoint).json() + self.cache[pkg_name] = self.extract_versions(json_resp, pkg_name) + + @staticmethod + def composer_url(pkg_name): + vendor, name = pkg_name.split("/") + return f"https://repo.packagist.org/p/{vendor}/{name}.json" + + @staticmethod + def extract_versions(json_resp, pkg_name): + all_versions = json_resp["packages"][pkg_name].keys() + # This filter ensures, that all_versions contains only released versions + all_versions = set(filter(lambda x: "dev" not in x, all_versions)) + # more_versions ensures that we have a version with and without version tag for + # each version present in all_versions + more_versions = set() + for version in all_versions: + if version.startswith("v"): + more_versions.add(version[1:]) + else: + more_versions.add("v" + version) + + return all_versions.union(more_versions) diff --git a/vulnerabilities/migrations/0017_github_importer.py b/vulnerabilities/migrations/0017_github_importer.py index 5b7d67a0c..46b639b17 100644 --- a/vulnerabilities/migrations/0017_github_importer.py +++ b/vulnerabilities/migrations/0017_github_importer.py @@ -32,7 +32,7 @@ def add_github_importer(apps, _): last_run=None, data_source='GitHubAPIDataSource', data_source_cfg={'endpoint':'https://api.github.com/graphql', - 'ecosystems':['MAVEN','NUGET'] + 'ecosystems':['MAVEN','NUGET','COMPOSER'] }, ) From 3ccb9ccbd95895e7e30144dc7c0db0ce46736c8b Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Wed, 17 Jun 2020 12:03:46 +0530 Subject: [PATCH 5/8] Add tests for Github importer Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/github.py | 108 +- .../test_data/composer_api/cms-core.json | 8179 +++++++++++++++++ .../tests/test_data/github_api/response.json | 118 + .../test_data/maven_api/maven-metadata.xml | 15 + .../tests/test_data/nuget_api/index.json | 1 + vulnerabilities/tests/test_github.py | 429 +- 6 files changed, 8795 insertions(+), 55 deletions(-) create mode 100644 vulnerabilities/tests/test_data/composer_api/cms-core.json create mode 100644 vulnerabilities/tests/test_data/github_api/response.json create mode 100644 vulnerabilities/tests/test_data/maven_api/maven-metadata.xml create mode 100644 vulnerabilities/tests/test_data/nuget_api/index.json diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index f646148a1..129390b2e 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -27,6 +27,8 @@ from typing import Set from typing import Tuple from typing import List +from typing import Mapping +from typing import Optional import xml.etree.ElementTree as ET import requests @@ -38,6 +40,37 @@ from vulnerabilities.data_source import DataSourceConfiguration +# set of all possible values of first '%s' = {'MAVEN','COMPOSER', 'NUGET'} +# second '%s' is interesting, it will have the value '' for the first request, +# since we don't have any value for endCursor at the beginning +# for all the subsequent requests it will have value 'after: "{endCursor}"' +query = """ + query MyQuery { + securityVulnerabilities(first: 100, ecosystem: %s, %s) { + edges { + node { + advisory { + identifiers { + type + value + } + summary + } + package { + name + } + vulnerableVersionRange + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + """ + + class GitHubTokenError(Exception): pass @@ -65,36 +98,8 @@ def __enter__(self): def updated_advisories(self) -> Set[Advisory]: return self.batch_advisories(self.process_response()) - def fetch(self): - # set of all possible values of first '%s' = {'MAVEN','COMPOSER', 'NUGET'} - # second '%s' is interesting, it will have the value '' for the first request, - # since we don't have any value for endCursor at the beginning - # for all the subsequent requests it will have value 'after: "{endCursor}"' - query = """ - query MyQuery { - securityVulnerabilities(first: 100, ecosystem: %s, %s) { - edges { - node { - advisory { - identifiers { - type - value - } - summary - } - package { - name - } - vulnerableVersionRange - } - } - pageInfo { - hasNextPage - endCursor - } - } - } - """ + def fetch(self) -> Mapping[str, List[Mapping]]: + headers = {"Authorization": "token " + self.gh_token} api_data = {} for ecosystem in self.config.ecosystems: @@ -122,10 +127,9 @@ def fetch(self): "hasNextPage" ]: break - return api_data - def set_version_api(self, ecosystem): + def set_version_api(self, ecosystem: str) -> None: if ecosystem == "MAVEN": self.version_api = MavenVersionAPI() @@ -137,7 +141,9 @@ def set_version_api(self, ecosystem): self.version_api = ComposerVersionAPI() @staticmethod - def process_name(ecosystem, pkg_name): + def process_name( + ecosystem: str, pkg_name: str + ) -> Optional[Tuple[Optional[str], str]]: if ecosystem == "MAVEN": @@ -206,7 +212,6 @@ def process_response(self) -> List[Advisory]: reference_ids=ref_ids, ) ) - # print(adv_list[-1]) return adv_list @staticmethod @@ -227,7 +232,7 @@ def __init__(self): def get(self, pkg_name: str) -> Set[str]: return self.cache.get(pkg_name, set()) - def load_to_api(self, pkg_name: str): + def load_to_api(self, pkg_name: str) -> None: if pkg_name in self.cache: return @@ -270,10 +275,10 @@ class NugetVersionAPI: def __init__(self): self.cache = {} - def get(self, pkg_name): + def get(self, pkg_name: str) -> Set[str]: return self.cache.get(pkg_name.lower(), set()) - def load_to_api(self, pkg_name: str): + def load_to_api(self, pkg_name: str) -> None: if pkg_name in self.cache: return endpoint = self.nuget_url(pkg_name) @@ -281,19 +286,19 @@ def load_to_api(self, pkg_name: str): resp = requests.get(endpoint).json() # pkg_name=Microsoft.NETCore.UniversalWindowsPlatform triggers # JSONDecodeError. - except (json.decoder.JSONDecodeError, KeyError): + except json.decoder.JSONDecodeError: self.cache[pkg_name.lower()] = set() return self.cache[pkg_name.lower()] = self.extract_versions(resp) @staticmethod - def nuget_url(pkg_name): + def nuget_url(pkg_name: str) -> str: base_url = "https://api.nuget.org/v3/registration5-semver1/{}/index.json" return base_url.format(pkg_name.lower()) @staticmethod - def extract_versions(json_resp): + def extract_versions(json_resp: dict) -> Set[str]: all_versions = set() try: for entry in json_resp["items"][0]["items"]: @@ -309,10 +314,10 @@ class ComposerVersionAPI: def __init__(self): self.cache = {} - def get(self, pkg_name): + def get(self, pkg_name: str) -> Set[str]: return self.cache.get(pkg_name.lower(), set()) - def load_to_api(self, pkg_name): + def load_to_api(self, pkg_name: str) -> None: if pkg_name in self.cache: return endpoint = self.composer_url(pkg_name) @@ -320,22 +325,17 @@ def load_to_api(self, pkg_name): self.cache[pkg_name] = self.extract_versions(json_resp, pkg_name) @staticmethod - def composer_url(pkg_name): + def composer_url(pkg_name: str) -> str: vendor, name = pkg_name.split("/") return f"https://repo.packagist.org/p/{vendor}/{name}.json" @staticmethod - def extract_versions(json_resp, pkg_name): + def extract_versions(json_resp: dict, pkg_name: str) -> Set[str]: all_versions = json_resp["packages"][pkg_name].keys() # This filter ensures, that all_versions contains only released versions all_versions = set(filter(lambda x: "dev" not in x, all_versions)) - # more_versions ensures that we have a version with and without version tag for - # each version present in all_versions - more_versions = set() - for version in all_versions: - if version.startswith("v"): - more_versions.add(version[1:]) - else: - more_versions.add("v" + version) - - return all_versions.union(more_versions) + # See https://github.com/composer/composer/blob/44a4429978d1b3c6223277b875762b2930e83e8c/doc/articles/versions.md#tags # nopep8 + # for explanation of removing 'v' + all_versions = set(map(lambda x: x.replace("v", ""), all_versions)) + + return all_versions diff --git a/vulnerabilities/tests/test_data/composer_api/cms-core.json b/vulnerabilities/tests/test_data/composer_api/cms-core.json new file mode 100644 index 000000000..ada11da0b --- /dev/null +++ b/vulnerabilities/tests/test_data/composer_api/cms-core.json @@ -0,0 +1,8179 @@ +{ + "packages": { + "typo3/cms-core": { + "10.2.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "10.2.x-dev", + "version_normalized": "10.2.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "947419f147aaa58303239122522a50465f687c67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/947419f147aaa58303239122522a50465f687c67", + "reference": "947419f147aaa58303239122522a50465f687c67", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-11T15:52:04+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~6.1.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3463039 + }, + "10.4.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "10.4.x-dev", + "version_normalized": "10.4.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "185c6f94c5512dd17435986aa63e070fdb789205" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/185c6f94c5512dd17435986aa63e070fdb789205", + "reference": "185c6f94c5512dd17435986aa63e070fdb789205", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-06-09T09:23:11+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3892285 + }, + "8.7.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "8.7.x-dev", + "version_normalized": "8.7.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "7011005023bde897da11b41cd07e0e91d125554f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/7011005023bde897da11b41cd07e0e91d125554f", + "reference": "7011005023bde897da11b41cd07e0e91d125554f", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-03-31T08:48:25+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/cms-cli": "^1.0.2", + "helhum/typo3-composer-setup": "^0.5", + "doctrine/lexer": "^1.0", + "algo26-matthias/idna-convert": "^1.1.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.5.5", + "php": "^7.0", + "symfony/http-foundation": "^3.4.28 || ^4.2.9" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-zip": "", + "ext-mysqli": "", + "ext-openssl": "" + }, + "conflict": { + "typo3/cms": "*", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5", + "guzzlehttp/guzzle": "6.5.0" + }, + "uid": 1695263 + }, + "9.2.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "9.2.x-dev", + "version_normalized": "9.2.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "1eaffde228376d130272926286e96ad430efcd78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1eaffde228376d130272926286e96ad430efcd78", + "reference": "1eaffde228376d130272926286e96ad430efcd78", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-11T10:36:21+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^3.1", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "~3.0.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "~9.0.1", + "typo3/testing-framework": "^3.2" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "uid": 2214987 + }, + "9.3.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "9.3.x-dev", + "version_normalized": "9.3.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a37c4c86d5af3df446dbd8d41de48c04e1cbcdfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a37c4c86d5af3df446dbd8d41de48c04e1cbcdfb", + "reference": "a37c4c86d5af3df446dbd8d41de48c04e1cbcdfb", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-11T10:36:09+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4", + "doctrine/dbal": "~2.7.0", + "doctrine/lexer": "^1.0" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "^9.1", + "typo3/testing-framework": "^3.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "uid": 2325977 + }, + "9.5.x-dev": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "9.5.x-dev", + "version_normalized": "9.5.9999999.9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "71b010af5c02d623a2754e0ec13aeb357f18ba37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/71b010af5c02d623a2754e0ec13aeb357f18ba37", + "reference": "71b010af5c02d623a2754e0ec13aeb357f18ba37", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-06-09T09:15:43+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "psr/container": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "symfony/polyfill-intl-idn": "^1.10", + "typo3/phar-stream-wrapper": "^3.1.3", + "doctrine/dbal": "^2.10", + "doctrine/annotations": "^1.7", + "typo3fluid/fluid": "^2.6.8", + "symfony/routing": "^4.3", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "psr/http-message": "^1.0", + "psr/log": "^1.0", + "nikic/php-parser": "^4.3.0" + }, + "require-dev": { + "fiunchinho/phpunit-randomizer": "^4.0", + "typo3/cms-styleguide": "~9.2.2", + "codeception/codeception": "^2.5.4", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/testing-framework": "^4.14.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "typo3fluid/fluid": "2.6.4 || 2.6.5", + "guzzlehttp/guzzle": "6.5.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2638889 + }, + "dev-master": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "dev-master", + "version_normalized": "9999999-dev", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "d94f2004eb2158cacb4c2e5acb21d73ffdf49858" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/d94f2004eb2158cacb4c2e5acb21d73ffdf49858", + "reference": "d94f2004eb2158cacb4c2e5acb21d73ffdf49858", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-06-09T07:29:08+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "11.0.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "symfony/polyfill-mbstring": "^1.2", + "typo3/class-alias-loader": "^1.0", + "cogpowered/finediff": "~0.3.1", + "guzzlehttp/guzzle": "^6.3.0", + "symfony/polyfill-intl-icu": "^1.6", + "php": "^7.2", + "psr/http-server-middleware": "^1.0", + "typo3/cms-cli": "^2.0", + "psr/container": "^1.0", + "doctrine/lexer": "^1.0", + "ext-pdo": "*", + "psr/http-server-handler": "^1.0", + "doctrine/instantiator": "^1.1", + "symfony/polyfill-intl-idn": "^1.10", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-client": "^1.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "doctrine/dbal": "^2.10", + "psr/http-message": "^1.0", + "psr/log": "^1.0", + "nikic/php-parser": "^4.3", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "doctrine/annotations": "^1.7", + "symfony/http-foundation": "^4.4 || ^5.0", + "egulias/email-validator": "^2.1", + "typo3fluid/fluid": "^2.6.8 || ^3", + "typo3/cms-composer-installers": "^2.0 || ^3.0" + }, + "require-dev": { + "typo3/cms-styleguide": "~10.0.2", + "phpspec/prophecy": "^1.7.5", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpstan/phpstan": "^0.12.13", + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "typo3/testing-framework": "^6.3.2" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-zip": "", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"" + }, + "conflict": { + "typo3/cms": "*", + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-sv": "*", + "typo3/cms-saltedpasswords": "*" + }, + "uid": 1695262 + }, + "v10.0.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.0.0", + "version_normalized": "10.0.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a5f643b16d85202d716e313e9558a5005c3f7137" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a5f643b16d85202d716e313e9558a5005c3f7137", + "reference": "a5f643b16d85202d716e313e9558a5005c3f7137", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-07-23T07:06:03+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.0.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.9", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "symfony/config": "^4.1", + "symfony/console": "^4.1", + "symfony/dependency-injection": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/mailer": "^4.3", + "symfony/mime": "^4.3", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.12.2", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~5.0.11" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.36 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3117731 + }, + "v10.1.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.1.0", + "version_normalized": "10.1.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "610a424b654b538912388816dec249383cba9406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/610a424b654b538912388816dec249383cba9406", + "reference": "610a424b654b538912388816dec249383cba9406", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-10-01T08:18:18+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.1.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.9", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "symfony/config": "^4.1", + "symfony/console": "^4.1", + "symfony/dependency-injection": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.3", + "symfony/mailer": "^4.3", + "symfony/mime": "^4.3", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.4" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.15.2", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~5.0.14" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.36 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3269885 + }, + "v10.2.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.2.0", + "version_normalized": "10.2.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "e0f2bbd3c7e2493c77aec94f6fc352236fc7e4d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/e0f2bbd3c7e2493c77aec94f6fc352236fc7e4d1", + "reference": "e0f2bbd3c7e2493c77aec94f6fc352236fc7e4d1", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-03T11:16:26+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.2.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~6.1.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3428517 + }, + "v10.2.1": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.2.1", + "version_normalized": "10.2.1.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "bde408e849e26ef871b0d1ce3d9800659c0f8b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/bde408e849e26ef871b0d1ce3d9800659c0f8b62", + "reference": "bde408e849e26ef871b0d1ce3d9800659c0f8b62", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-17T11:00:00+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.2.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~6.1.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3464031 + }, + "v10.2.2": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.2.2", + "version_normalized": "10.2.2.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "7a3ec251d13d0d5649183ae10d64f020f3a59ae4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/7a3ec251d13d0d5649183ae10d64f020f3a59ae4", + "reference": "7a3ec251d13d0d5649183ae10d64f020f3a59ae4", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-17T11:36:14+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.2.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~6.1.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3464102 + }, + "v10.3.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.3.0", + "version_normalized": "10.3.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "b56d8d595a457080bed7dc1354548fdc03eb66c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/b56d8d595a457080bed7dc1354548fdc03eb66c6", + "reference": "b56d8d595a457080bed7dc1354548fdc03eb66c6", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-25T12:50:09+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.3.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4 || ^3", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "~6.1.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": ">= 6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3640743 + }, + "v10.4.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.4.0", + "version_normalized": "10.4.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "c7b5957461a4813401c4d497ee9b0d1f275775d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/c7b5957461a4813401c4d497ee9b0d1f275775d3", + "reference": "c7b5957461a4813401c4d497ee9b0d1f275775d3", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-04-21T08:00:15+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.3" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3801229 + }, + "v10.4.1": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.4.1", + "version_normalized": "10.4.1.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "51f0192a6d286301b5777f3aa58c0721acdc1a48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/51f0192a6d286301b5777f3aa58c0721acdc1a48", + "reference": "51f0192a6d286301b5777f3aa58c0721acdc1a48", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-04-28T09:07:54+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.3" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3819719 + }, + "v10.4.2": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.4.2", + "version_normalized": "10.4.2.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "1584c47e1b3686fed1bc1b59a374d6104457ea2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1584c47e1b3686fed1bc1b59a374d6104457ea2f", + "reference": "1584c47e1b3686fed1bc1b59a374d6104457ea2f", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-05-12T10:41:40+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3858902 + }, + "v10.4.3": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.4.3", + "version_normalized": "10.4.3.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "439dcaf7699149e9206afcbe813de911071d4575" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/439dcaf7699149e9206afcbe813de911071d4575", + "reference": "439dcaf7699149e9206afcbe813de911071d4575", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-05-19T13:16:31+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3877663 + }, + "v10.4.4": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v10.4.4", + "version_normalized": "10.4.4.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "05880a17298fc781b20a8301352aaca8f689d43d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/05880a17298fc781b20a8301352aaca8f689d43d", + "reference": "05880a17298fc781b20a8301352aaca8f689d43d", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-06-09T08:56:30+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "egulias/email-validator": "^2.1", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/expression-language": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/mailer": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8 || ^3" + }, + "require-dev": { + "codeception/codeception": "^4.0", + "codeception/module-asserts": "^1.1", + "codeception/module-filesystem": "^1.0", + "codeception/module-webdriver": "^1.0.1", + "friendsofphp/php-cs-fixer": "^2.16.1", + "phpspec/prophecy": "^1.7.5", + "phpstan/phpstan": "^0.12.13", + "typo3/cms-styleguide": "~10.0.2", + "typo3/testing-framework": "^6.2.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "hoa/core": "*", + "guzzlehttp/guzzle": "6.5.0", + "typo3/cms": "*" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3935089 + }, + "v8.7.10": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.10", + "version_normalized": "8.7.10.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "68695e100a0be3b97c9d7b6fd246642e9e96eea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/68695e100a0be3b97c9d7b6fd246642e9e96eea6", + "reference": "68695e100a0be3b97c9d7b6fd246642e9e96eea6", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-02-06T10:46:02+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0.2", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "helhum/typo3-composer-setup": "^0.5" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-openssl": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1895070 + }, + "v8.7.11": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.11", + "version_normalized": "8.7.11.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "fad6bf40b818513342318c93c5983b364d328459" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/fad6bf40b818513342318c93c5983b364d328459", + "reference": "fad6bf40b818513342318c93c5983b364d328459", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-03-13T12:44:45+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0.2", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "helhum/typo3-composer-setup": "^0.5" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-openssl": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1986324 + }, + "v8.7.12": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.12", + "version_normalized": "8.7.12.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "ceb227021957adf46192aacccd89267582c349dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/ceb227021957adf46192aacccd89267582c349dd", + "reference": "ceb227021957adf46192aacccd89267582c349dd", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-03-22T11:35:42+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0.2", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "helhum/typo3-composer-setup": "^0.5" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-openssl": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2019875 + }, + "v8.7.13": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.13", + "version_normalized": "8.7.13.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "53bcce552e30d374414757fa6e119db5a4836187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/53bcce552e30d374414757fa6e119db5a4836187", + "reference": "53bcce552e30d374414757fa6e119db5a4836187", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-04-17T08:15:46+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2104370 + }, + "v8.7.14": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.14", + "version_normalized": "8.7.14.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "604c139c5514559bbc60d5a582c78777991a373f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/604c139c5514559bbc60d5a582c78777991a373f", + "reference": "604c139c5514559bbc60d5a582c78777991a373f", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-05-22T13:51:09+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2217170 + }, + "v8.7.15": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.15", + "version_normalized": "8.7.15.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a0145c0ac0d942cee4f4bdc74558acc4df01acfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a0145c0ac0d942cee4f4bdc74558acc4df01acfe", + "reference": "a0145c0ac0d942cee4f4bdc74558acc4df01acfe", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-05-23T11:31:21+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2218907 + }, + "v8.7.16": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.16", + "version_normalized": "8.7.16.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "95aaa2633fcf3eee695a0df4286a92c3b3a6e331" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/95aaa2633fcf3eee695a0df4286a92c3b3a6e331", + "reference": "95aaa2633fcf3eee695a0df4286a92c3b3a6e331", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-06-11T17:18:14+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2255078 + }, + "v8.7.17": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.17", + "version_normalized": "8.7.17.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "bec31f84e3d8cba731a44e6ce653cdea6d8a3432" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/bec31f84e3d8cba731a44e6ce653cdea6d8a3432", + "reference": "bec31f84e3d8cba731a44e6ce653cdea6d8a3432", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-07-12T11:29:19+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2327401 + }, + "v8.7.18": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.18", + "version_normalized": "8.7.18.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "768092f662e463085a7177959fe0d2e154cae1d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/768092f662e463085a7177959fe0d2e154cae1d7", + "reference": "768092f662e463085a7177959fe0d2e154cae1d7", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-07-31T08:15:29+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2370885 + }, + "v8.7.19": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.19", + "version_normalized": "8.7.19.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "8b70531974f35846f035db55d54bbad421b3daa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/8b70531974f35846f035db55d54bbad421b3daa5", + "reference": "8b70531974f35846f035db55d54bbad421b3daa5", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-08-21T07:23:21+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2411446 + }, + "v8.7.20": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.20", + "version_normalized": "8.7.20.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "3a40fcf47298e76c70c6d871ce5e863c9a63867b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/3a40fcf47298e76c70c6d871ce5e863c9a63867b", + "reference": "3a40fcf47298e76c70c6d871ce5e863c9a63867b", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-10-30T10:39:51+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.0.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2549850 + }, + "v8.7.21": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.21", + "version_normalized": "8.7.21.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "2a1f0cff0525b7f56564e79aceb98bb279f06c65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/2a1f0cff0525b7f56564e79aceb98bb279f06c65", + "reference": "2a1f0cff0525b7f56564e79aceb98bb279f06c65", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-12-11T12:40:12+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.0.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2632266 + }, + "v8.7.22": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.22", + "version_normalized": "8.7.22.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "0038f2a7b71f69246d188fd6458e4dc235cca1b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/0038f2a7b71f69246d188fd6458e4dc235cca1b7", + "reference": "0038f2a7b71f69246d188fd6458e4dc235cca1b7", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-12-14T07:43:50+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.0.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2638788 + }, + "v8.7.23": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.23", + "version_normalized": "8.7.23.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "40994a542be0d1da4c2c180541e04091ad38f17d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/40994a542be0d1da4c2c180541e04091ad38f17d", + "reference": "40994a542be0d1da4c2c180541e04091ad38f17d", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-01-22T10:10:02+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.0.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2706618 + }, + "v8.7.24": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.24", + "version_normalized": "8.7.24.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "cf2edb1222539016c6073bd6de46b146916150b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/cf2edb1222539016c6073bd6de46b146916150b4", + "reference": "cf2edb1222539016c6073bd6de46b146916150b4", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-01-22T15:25:55+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "mso/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.0.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2707409 + }, + "v8.7.25": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.25", + "version_normalized": "8.7.25.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "df7370142b096d72738ec9ffc4601735651939f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/df7370142b096d72738ec9ffc4601735651939f1", + "reference": "df7370142b096d72738ec9ffc4601735651939f1", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-05-07T10:05:55+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.1", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2945274 + }, + "v8.7.26": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.26", + "version_normalized": "8.7.26.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "8f356375551ebb66621fcd96d11fb3415d4c2a7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/8f356375551ebb66621fcd96d11fb3415d4c2a7b", + "reference": "8f356375551ebb66621fcd96d11fb3415d4c2a7b", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-05-15T11:24:12+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2963226 + }, + "v8.7.27": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.27", + "version_normalized": "8.7.27.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "29728d43cee7f71300effa037d2bfda00f94fa8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/29728d43cee7f71300effa037d2bfda00f94fa8c", + "reference": "29728d43cee7f71300effa037d2bfda00f94fa8c", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-06-25T08:24:21+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 3058316 + }, + "v8.7.28": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.28", + "version_normalized": "8.7.28.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "06bee894abe35412db5214c371b206a6e549d112" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/06bee894abe35412db5214c371b206a6e549d112", + "reference": "06bee894abe35412db5214c371b206a6e549d112", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-10-15T07:21:52+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "uid": 3301346 + }, + "v8.7.29": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.29", + "version_normalized": "8.7.29.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "3b8d91b7bbdae375b1e8910033af5a55300567ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/3b8d91b7bbdae375b1e8910033af5a55300567ad", + "reference": "3b8d91b7bbdae375b1e8910033af5a55300567ad", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-10-30T21:00:45+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0 <7.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "uid": 3341187 + }, + "v8.7.30": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.30", + "version_normalized": "8.7.30.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "55e9928167b7b855cca939823d065310c9267526" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/55e9928167b7b855cca939823d065310c9267526", + "reference": "55e9928167b7b855cca939823d065310c9267526", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-17T10:49:17+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": ">= 6.5.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "uid": 3463848 + }, + "v8.7.31": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.31", + "version_normalized": "8.7.31.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "b885452d54bb2c5db7df8c580c0b281bad3d074f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/b885452d54bb2c5db7df8c580c0b281bad3d074f", + "reference": "b885452d54bb2c5db7df8c580c0b281bad3d074f", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-17T23:29:16+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/http-foundation": "^3.4 || ^4.2", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": ">= 6.5.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "uid": 3620755 + }, + "v8.7.32": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.32", + "version_normalized": "8.7.32.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "69f3db31901d6e301c53300010eb428519649ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/69f3db31901d6e301c53300010eb428519649ec3", + "reference": "69f3db31901d6e301c53300010eb428519649ec3", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-03-31T08:33:03+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": "^7.0", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/dbal": "~2.5.4", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "helhum/typo3-composer-setup": "^0.5", + "algo26-matthias/idna-convert": "^1.1.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/http-foundation": "^3.4.28 || ^4.2.9", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^1.0.2", + "typo3/cms-composer-installers": "^1.2.8", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.5.5" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "uid": 3741351 + }, + "v8.7.7": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.7", + "version_normalized": "8.7.7.0", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "b23d71a6d75e01039c27e556a04cd5408c384362" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/b23d71a6d75e01039c27e556a04cd5408c384362", + "reference": "b23d71a6d75e01039c27e556a04cd5408c384362", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2017-09-19T14:22:53+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-TYPO3_8-7": "8.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": ">=7.0.0 <=7.1.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0", + "symfony/finder": "^2.7 || ^3.0", + "symfony/yaml": "^2.7 || ^3.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-soap": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1695260 + }, + "v8.7.8": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.8", + "version_normalized": "8.7.8.0", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "82636bce83829b56d726608fc859d6cbd65975e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/82636bce83829b56d726608fc859d6cbd65975e8", + "reference": "82636bce83829b56d726608fc859d6cbd65975e8", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2017-10-10T16:08:44+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-TYPO3_8-7": "8.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": ">=7.0.0 <=7.1.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0", + "symfony/finder": "^2.7 || ^3.0", + "symfony/yaml": "^2.7 || ^3.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-soap": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1695261 + }, + "v8.7.9": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v8.7.9", + "version_normalized": "8.7.9.0", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "e260f0631d774da14eb00c546120f348eb09d9cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/e260f0631d774da14eb00c546120f348eb09d9cb", + "reference": "e260f0631d774da14eb00c546120f348eb09d9cb", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2017-12-12T16:09:50+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-TYPO3_8-7": "8.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "require": { + "php": ">=7.0.0 <=7.2.99", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0", + "symfony/finder": "^2.7 || ^3.0", + "symfony/yaml": "^2.7 || ^3.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "typo3/cms-cli": "^1.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-soap": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1782574 + }, + "v9.0.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.0.0", + "version_normalized": "9.0.0.0", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "e520d5a50e635ed6c83cc7f78fdf8c117d2e5f4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/e520d5a50e635ed6c83cc7f78fdf8c117d2e5f4f", + "reference": "e520d5a50e635ed6c83cc7f78fdf8c117d2e5f4f", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2017-12-12T16:48:22+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.0.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "doctrine/annotations": "^1.3", + "typo3/cms-cli": "^1.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^2.0", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "typo3fluid/fluid": "^2.4", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "nikic/php-parser": "^3.1", + "symfony/polyfill-intl-icu": "^1.6" + }, + "require-dev": { + "typo3/testing-framework": "2.0.1", + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "typo3/cms-styleguide": "~9.0.0", + "friendsofphp/php-cs-fixer": "^2.0", + "fiunchinho/phpunit-randomizer": "~3.0.0" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-openssl": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1782645 + }, + "v9.1.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.1.0", + "version_normalized": "9.1.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "2e9c051d79e1a3804d60441be47c1045363362bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/2e9c051d79e1a3804d60441be47c1045363362bd", + "reference": "2e9c051d79e1a3804d60441be47c1045363362bd", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-01-30T15:31:12+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.1.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-mbstring": "^1.2", + "doctrine/instantiator": "~1.0.4", + "doctrine/annotations": "^1.3", + "typo3/cms-cli": "^1.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^2.0", + "psr/http-message": "~1.0", + "cogpowered/finediff": "~0.3.1", + "mso/idna-convert": "^1.1.0", + "typo3fluid/fluid": "^2.4", + "guzzlehttp/guzzle": "^6.3.0", + "doctrine/dbal": "~2.5.4", + "nikic/php-parser": "^3.1", + "symfony/polyfill-intl-icu": "^1.6" + }, + "require-dev": { + "typo3/testing-framework": "2.0.1", + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "typo3/cms-styleguide": "~9.0.0", + "friendsofphp/php-cs-fixer": "^2.0", + "fiunchinho/phpunit-randomizer": "~3.0.0" + }, + "suggest": { + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-openssl": "", + "ext-zip": "", + "ext-mysqli": "" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 1879921 + }, + "v9.2.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.2.0", + "version_normalized": "9.2.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "19476f389b36f26d3e41ad79c925afd7db244c8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/19476f389b36f26d3e41ad79c925afd7db244c8c", + "reference": "19476f389b36f26d3e41ad79c925afd7db244c8c", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-04-09T20:51:35+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.2.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^3.1", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "~3.0.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "~9.0.1", + "typo3/testing-framework": "^3.2" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2082719 + }, + "v9.2.1": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.2.1", + "version_normalized": "9.2.1.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "6be5a7f91d2caa07276d13ba2f66ce9000dfaa61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/6be5a7f91d2caa07276d13ba2f66ce9000dfaa61", + "reference": "6be5a7f91d2caa07276d13ba2f66ce9000dfaa61", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-05-22T13:47:11+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.2.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^3.1", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "~3.0.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "~9.0.1", + "typo3/testing-framework": "^3.2" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2217323 + }, + "v9.3.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.3.0", + "version_normalized": "9.3.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a9a625face9d5177d8d47763978a34beee6a33e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a9a625face9d5177d8d47763978a34beee6a33e7", + "reference": "a9a625face9d5177d8d47763978a34beee6a33e7", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-06-11T17:14:33+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.3.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.7", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "^9.1", + "typo3/testing-framework": "^3.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2255165 + }, + "v9.3.1": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.3.1", + "version_normalized": "9.3.1.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "4c8202d5b462dc8a55fd541abcacb8f778b0f814" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/4c8202d5b462dc8a55fd541abcacb8f778b0f814", + "reference": "4c8202d5b462dc8a55fd541abcacb8f778b0f814", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-07-12T11:33:12+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.3.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.7", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "^9.1", + "typo3/testing-framework": "^3.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2327493 + }, + "v9.3.2": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.3.2", + "version_normalized": "9.3.2.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "dcc2a2d3b34f103411d57656b10c872d1a816af3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/dcc2a2d3b34f103411d57656b10c872d1a816af3", + "reference": "dcc2a2d3b34f103411d57656b10c872d1a816af3", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-07-12T15:51:49+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.3.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.7", + "doctrine/instantiator": "~1.0.4", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "^9.1", + "typo3/testing-framework": "^3.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2327945 + }, + "v9.3.3": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.3.3", + "version_normalized": "9.3.3.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "9d08ad8c8f43021f37d7395634882fd7a9e82f80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/9d08ad8c8f43021f37d7395634882fd7a9e82f80", + "reference": "9d08ad8c8f43021f37d7395634882fd7a9e82f80", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-07-31T08:20:17+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.3.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.0", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/yaml": "^2.7 || ^3.0 || ^4.0", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3fluid/fluid": "^2.4" + }, + "require-dev": { + "codeception/codeception": "^2.3", + "enm1989/chromedriver": "~2.30", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.0", + "typo3/cms-styleguide": "^9.1", + "typo3/testing-framework": "^3.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*" + }, + "uid": 2370985 + }, + "v9.4.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.4.0", + "version_normalized": "9.4.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "ef5cadda8fc8ad9c8db7c9a93960b8e0944ac431" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/ef5cadda8fc8ad9c8db7c9a93960b8e0944ac431", + "reference": "ef5cadda8fc8ad9c8db7c9a93960b8e0944ac431", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-09-04T12:08:20+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.4.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^1.0.1", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.0", + "typo3/testing-framework": "~4.8.2" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2442325 + }, + "v9.5.0": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.0", + "version_normalized": "9.5.0.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "65cc2f636c32a2884b1c01b45e26233eb31a0fc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/65cc2f636c32a2884b1c01b45e26233eb31a0fc0", + "reference": "65cc2f636c32a2884b1c01b45e26233eb31a0fc0", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-10-02T08:10:33+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.5.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.0", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.1", + "typo3/testing-framework": "~4.9.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2496229 + }, + "v9.5.1": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.1", + "version_normalized": "9.5.1.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "6c6b889644051663f1f892701eb52ae2295fa5da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/6c6b889644051663f1f892701eb52ae2295fa5da", + "reference": "6c6b889644051663f1f892701eb52ae2295fa5da", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-10-30T10:45:30+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.5.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "~1.0.4", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.1", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.1", + "typo3/testing-framework": "~4.10.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2549933 + }, + "v9.5.10": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.10", + "version_normalized": "9.5.10.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "c35002293c084e625bdd124eef4885e30ade235d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/c35002293c084e625bdd124eef4885e30ade235d", + "reference": "c35002293c084e625bdd124eef4885e30ade235d", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-10-15T07:29:55+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.8.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.4" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.15.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3301422 + }, + "v9.5.11": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.11", + "version_normalized": "9.5.11.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "eff039b6fb8e7978a215f5341538bcf033762717" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/eff039b6fb8e7978a215f5341538bcf033762717", + "reference": "eff039b6fb8e7978a215f5341538bcf033762717", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-10-30T20:46:49+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.8.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.15.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3341136 + }, + "v9.5.12": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.12", + "version_normalized": "9.5.12.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "b42cd787823ce5844136301a06a3056820665593" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/b42cd787823ce5844136301a06a3056820665593", + "reference": "b42cd787823ce5844136301a06a3056820665593", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-17T10:53:45+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": ">= 6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3463966 + }, + "v9.5.13": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.13", + "version_normalized": "9.5.13.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "ba5f270e9ecb43040ea83a2b70d3086fab1f0fcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/ba5f270e9ecb43040ea83a2b70d3086fab1f0fcc", + "reference": "ba5f270e9ecb43040ea83a2b70d3086fab1f0fcc", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-12-17T14:17:37+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": ">= 6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3464576 + }, + "v9.5.14": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.14", + "version_normalized": "9.5.14.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a0e8eb1ca657cbb30c189f2930cfbcddae4a0b0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a0e8eb1ca657cbb30c189f2930cfbcddae4a0b0d", + "reference": "a0e8eb1ca657cbb30c189f2930cfbcddae4a0b0d", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-02-17T23:37:02+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": ">= 6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3620811 + }, + "v9.5.15": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.15", + "version_normalized": "9.5.15.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "1b955cdd084daf2596162c27d543891d6271b381" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1b955cdd084daf2596162c27d543891d6271b381", + "reference": "1b955cdd084daf2596162c27d543891d6271b381", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-03-31T08:40:25+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3741352 + }, + "v9.5.16": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.16", + "version_normalized": "9.5.16.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "1c345f39fa9890a2df8078368082210ab57a6cef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1c345f39fa9890a2df8078368082210ab57a6cef", + "reference": "1c345f39fa9890a2df8078368082210ab57a6cef", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-04-28T09:22:14+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.3" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3819857 + }, + "v9.5.17": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.17", + "version_normalized": "9.5.17.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "4ecdf459027eb96c6423f7cb8dfd9616027b2b18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/4ecdf459027eb96c6423f7cb8dfd9616027b2b18", + "reference": "4ecdf459027eb96c6423f7cb8dfd9616027b2b18", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-05-12T10:36:00+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3858828 + }, + "v9.5.18": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.18", + "version_normalized": "9.5.18.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "96a3fe773ed42a8362bf8e86ab66632015418037" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/96a3fe773ed42a8362bf8e86ab66632015418037", + "reference": "96a3fe773ed42a8362bf8e86ab66632015418037", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-05-19T13:10:50+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3877603 + }, + "v9.5.19": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.19", + "version_normalized": "9.5.19.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "c899b8d2e8a0f6c1ba843ee34df1c14e13b7d787" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/c899b8d2e8a0f6c1ba843ee34df1c14e13b7d787", + "reference": "c899b8d2e8a0f6c1ba843ee34df1c14e13b7d787", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2020-06-09T08:44:34+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.7", + "doctrine/dbal": "^2.10", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.3.0", + "psr/container": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.2.9 || ^5.0", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.3", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0 || ^3.0", + "typo3/phar-stream-wrapper": "^3.1.3", + "typo3fluid/fluid": "^2.6.8" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.16.1", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "^4.14.4" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint, and for extensions such as \"rsaauth\"", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "guzzlehttp/guzzle": "6.5.0", + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7", + "typo3fluid/fluid": "2.6.4 || 2.6.5" + }, + "replace": { + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3935028 + }, + "v9.5.2": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.2", + "version_normalized": "9.5.2.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "15312c64e2817b25a065851308e58ae19a7cc09c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/15312c64e2817b25a065851308e58ae19a7cc09c", + "reference": "15312c64e2817b25a065851308e58ae19a7cc09c", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-12-11T12:42:55+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.5.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.1", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.11.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2632124 + }, + "v9.5.3": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.3", + "version_normalized": "9.5.3.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "169b3ba93c9ce152fdb0a75085f0dfff576d8ae8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/169b3ba93c9ce152fdb0a75085f0dfff576d8ae8", + "reference": "169b3ba93c9ce152fdb0a75085f0dfff576d8ae8", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2018-12-14T07:28:48+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "9.5.x-dev" + }, + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.1", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.11.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2638731 + }, + "v9.5.4": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.4", + "version_normalized": "9.5.4.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "a2f35d02818d0bc5eccbce31387bfb8dbb1c6f9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/a2f35d02818d0bc5eccbce31387bfb8dbb1c6f9c", + "reference": "a2f35d02818d0bc5eccbce31387bfb8dbb1c6f9c", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-01-22T10:12:04+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.7.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.1", + "typo3fluid/fluid": "^2.5.2" + }, + "require-dev": { + "codeception/codeception": "^2.4.5", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.11.1" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2706682 + }, + "v9.5.5": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.5", + "version_normalized": "9.5.5.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "2c53d453a68bc9e88a31c87f59d3eefc0f9c4a12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/2c53d453a68bc9e88a31c87f59d3eefc0f9c4a12", + "reference": "2c53d453a68bc9e88a31c87f59d3eefc0f9c4a12", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-03-04T20:25:08+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.8.0", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "mso/idna-convert": "^1.1.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.0.1", + "typo3fluid/fluid": "^2.6.0" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2811293 + }, + "v9.5.6": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.6", + "version_normalized": "9.5.6.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "1a0ce1c0d9247c89ea4664f602ac395edcbea86a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/1a0ce1c0d9247c89ea4664f602ac395edcbea86a", + "reference": "1a0ce1c0d9247c89ea4664f602ac395edcbea86a", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-05-07T10:16:30+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.8.0", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.1", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2945495 + }, + "v9.5.7": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.7", + "version_normalized": "9.5.7.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "918ba8f151c5ce3b9df7eb613fd365fdb98c8531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/918ba8f151c5ce3b9df7eb613fd365fdb98c8531", + "reference": "918ba8f151c5ce3b9df7eb613fd365fdb98c8531", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-05-15T11:41:51+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "~2.8.0", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 2963309 + }, + "v9.5.8": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.8", + "version_normalized": "9.5.8.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "887bc9304473d3c2c9ebd453de4ab01f0dfd59a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/887bc9304473d3c2c9ebd453de4ab01f0dfd59a7", + "reference": "887bc9304473d3c2c9ebd453de4ab01f0dfd59a7", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-06-25T08:28:51+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.8.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.0", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3058386 + }, + "v9.5.9": { + "name": "typo3/cms-core", + "description": "The core library of TYPO3.", + "keywords": [], + "homepage": "https://typo3.org", + "version": "v9.5.9", + "version_normalized": "9.5.9.0", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "bd1efc03cb11b4a8c8249cc81d09ec87de87b8c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/bd1efc03cb11b4a8c8249cc81d09ec87de87b8c7", + "reference": "bd1efc03cb11b4a8c8249cc81d09ec87de87b8c7", + "shasum": "" + }, + "type": "typo3-cms-framework", + "time": "2019-08-20T09:33:35+00:00", + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ], + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "extra": { + "typo3/cms": { + "Package": { + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "require": { + "php": "^7.2", + "ext-pdo": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "algo26-matthias/idna-convert": "^1.1.0", + "cogpowered/finediff": "~0.3.1", + "doctrine/annotations": "^1.3", + "doctrine/dbal": "^2.8.1", + "doctrine/instantiator": "^1.1", + "doctrine/lexer": "^1.0", + "guzzlehttp/guzzle": "^6.3.0", + "nikic/php-parser": "^4.2", + "psr/container": "^1.0", + "psr/http-message": "~1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^4.1", + "symfony/expression-language": "^4.1", + "symfony/finder": "^4.1", + "symfony/polyfill-intl-icu": "^1.6", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.2", + "symfony/routing": "^4.1", + "symfony/yaml": "^4.1", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-cli": "^2.0", + "typo3/cms-composer-installers": "^2.0", + "typo3/phar-stream-wrapper": "^3.1.2", + "typo3fluid/fluid": "^2.6.1" + }, + "require-dev": { + "codeception/codeception": "^2.5.4", + "fiunchinho/phpunit-randomizer": "^4.0", + "friendsofphp/php-cs-fixer": "^2.12.2", + "typo3/cms-styleguide": "~9.2.2", + "typo3/testing-framework": "~4.12.0" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-intl": "TYPO3 with unicode-based filesystems", + "ext-mysqli": "", + "ext-openssl": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "conflict": { + "symfony/cache": "< 2.8.50 >= 2.8.0 || < 3.4.26 >= 3.4.0 || < 4.1.12 >= 4.1.0 || < 4.2.7 >= 4.2.0", + "symfony/finder": "2.7.44 || 2.8.37 || 3.4.7 || 4.0.7", + "typo3/cms": "*", + "symfony/routing": "4.2.7" + }, + "replace": { + "core": "*", + "typo3/cms-lang": "*", + "typo3/cms-saltedpasswords": "*", + "typo3/cms-sv": "*" + }, + "uid": 3173298 + } + } + } +} \ No newline at end of file diff --git a/vulnerabilities/tests/test_data/github_api/response.json b/vulnerabilities/tests/test_data/github_api/response.json new file mode 100644 index 000000000..2bc9dbb70 --- /dev/null +++ b/vulnerabilities/tests/test_data/github_api/response.json @@ -0,0 +1,118 @@ +{"MAVEN":[{ + "data": { + "securityVulnerabilities": { + "edges": [ + { + "node": { + "advisory": { + "identifiers": [ + { + "type": "GHSA", + "value": "GHSA-qcxh-w3j9-58qr" + }, + { + "type": "CVE", + "value": "CVE-2019-0199" + } + ], + "summary": "Denial of Service in Tomcat" + }, + "package": { + "name": "org.apache.tomcat.embed:tomcat-embed-core" + }, + "vulnerableVersionRange": ">= 8.0.0, < 8.5.38" + } + }, + { + "node": { + "advisory": { + "identifiers": [ + { + "type": "GHSA", + "value": "GHSA-qcxh-w3j9-58qr" + }, + { + "type": "CVE", + "value": "CVE-2019-0199" + } + ], + "summary": "Denial of Service in Tomcat" + }, + "package": { + "name": "org.apache.tomcat.embed:tomcat-embed-core" + }, + "vulnerableVersionRange": ">= 9.0.0, < 9.0.16" + } + }, + { + "node": { + "advisory": { + "identifiers": [ + { + "type": "GHSA", + "value": "GHSA-c9hw-wf7x-jp9j" + }, + { + "type": "CVE", + "value": "CVE-2020-1938" + } + ], + "summary": "Improper Input Validation in Tomcat" + }, + "package": { + "name": "org.apache.tomcat.embed:tomcat-embed-core" + }, + "vulnerableVersionRange": ">= 7.0.0, < 7.0.100" + } + }, + { + "node": { + "advisory": { + "identifiers": [ + { + "type": "GHSA", + "value": "GHSA-c9hw-wf7x-jp9j" + }, + { + "type": "CVE", + "value": "CVE-2020-1938" + } + ], + "summary": "Improper Input Validation in Tomcat" + }, + "package": { + "name": "org.apache.tomcat.embed:tomcat-embed-core" + }, + "vulnerableVersionRange": ">= 8.0.0, < 8.5.51" + } + }, + { + "node": { + "advisory": { + "identifiers": [ + { + "type": "GHSA", + "value": "GHSA-c9hw-wf7x-jp9j" + }, + { + "type": "CVE", + "value": "CVE-2020-1938" + } + ], + "summary": "Improper Input Validation in Tomcat" + }, + "package": { + "name": "org.apache.tomcat.embed:tomcat-embed-core" + }, + "vulnerableVersionRange": ">= 9.0.0, < 9.0.31" + } + } + ], + "pageInfo": { + "hasNextPage": true, + "endCursor": "Y3Vyc29yOnYyOpK5MjAyMC0wNi0xNVQyMTo0MDowOSswNTozMM0Nmw==" + } + } + } +}] +} \ No newline at end of file diff --git a/vulnerabilities/tests/test_data/maven_api/maven-metadata.xml b/vulnerabilities/tests/test_data/maven_api/maven-metadata.xml new file mode 100644 index 000000000..c1e07f44d --- /dev/null +++ b/vulnerabilities/tests/test_data/maven_api/maven-metadata.xml @@ -0,0 +1,15 @@ + + + eu.inloop + easygcm + + 1.3.0 + 1.3.0 + + 1.2.2 + 1.2.3 + 1.3.0 + + 20150312152220 + + diff --git a/vulnerabilities/tests/test_data/nuget_api/index.json b/vulnerabilities/tests/test_data/nuget_api/index.json new file mode 100644 index 000000000..33440b1f6 --- /dev/null +++ b/vulnerabilities/tests/test_data/nuget_api/index.json @@ -0,0 +1 @@ +{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json","@type":["catalog:CatalogRoot","PackageRegistration","catalog:Permalink"],"commitId":"4b2bebc9-f63a-432a-8bcc-f9a277093541","commitTimeStamp":"2020-04-21T12:30:33.5740394+00:00","count":1,"items":[{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json#page/0.23.0/2.7.0","@type":"catalog:CatalogPage","commitId":"4b2bebc9-f63a-432a-8bcc-f9a277093541","commitTimeStamp":"2020-04-21T12:30:33.5740394+00:00","count":14,"items":[{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/0.23.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.32/sustainsys.saml2.0.23.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.32/sustainsys.saml2.0.23.0.json#dependencygroup","@type":"PackageDependencyGroup"}],"description":"SAML2 Protocol library for ASP.NET. Don't reference this directly, use one of the API modules: Sustainsys.Saml2.HttpModule/Mvc/Owin/AspNetCore2.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.23.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.23.0/sustainsys.saml2.0.23.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-01-17T09:32:59.283+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"Sustainsys.Saml2","version":"0.23.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.23.0/sustainsys.saml2.0.23.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/0.24.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.32/sustainsys.saml2.0.24.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.32/sustainsys.saml2.0.24.0.json#dependencygroup","@type":"PackageDependencyGroup"}],"description":"SAML2 Protocol library for ASP.NET. Don't reference this directly, use one of the API modules: Sustainsys.Saml2.HttpModule/Mvc/Owin/AspNetCore2.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.24.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.24.0/sustainsys.saml2.0.24.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-03-30T07:25:18.393+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"Sustainsys.Saml2","version":"0.24.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/0.24.0/sustainsys.saml2.0.24.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/1.0.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.13.08.20.19/sustainsys.saml2.1.0.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.13.08.20.19/sustainsys.saml2.1.0.0.json#dependencygroup","@type":"PackageDependencyGroup"}],"description":"SAML2 Protocol library for ASP.NET. Don't reference this directly, use one of the API modules: Sustainsys.Saml2.HttpModule/Mvc/Owin/AspNetCore2.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.0/sustainsys.saml2.1.0.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-09-13T08:16:00.42+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"Sustainsys.Saml2","version":"1.0.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.0/sustainsys.saml2.1.0.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/1.0.1.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.33.40/sustainsys.saml2.1.0.1.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.33.40/sustainsys.saml2.1.0.1.json#dependencygroup","@type":"PackageDependencyGroup"}],"description":"SAML2 Protocol library for ASP.NET. Don't reference this directly, use one of the API modules: Sustainsys.Saml2.HttpModule/Mvc/Owin/AspNetCore2.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.1/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.1/sustainsys.saml2.1.0.1.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-01-17T15:31:41.857+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"Sustainsys.Saml2","version":"1.0.1"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.1/sustainsys.saml2.1.0.1.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/1.0.2.json","@type":"Package","commitId":"65b0f343-125e-4509-a679-d42e82c15314","commitTimeStamp":"2020-04-21T12:27:30.5473966+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.27.06/sustainsys.saml2.1.0.2.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.27.06/sustainsys.saml2.1.0.2.json#dependencygroup","@type":"PackageDependencyGroup"}],"description":"SAML2 Protocol library for ASP.NET. Don't reference this directly, use one of the API modules: Sustainsys.Saml2.HttpModule/Mvc/Owin/AspNetCore2.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.2/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.2/sustainsys.saml2.1.0.2.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-04-21T12:24:53.877+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"Sustainsys.Saml2","version":"1.0.2"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/1.0.2/sustainsys.saml2.1.0.2.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.0.0-preview01.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json#dependencygroup/.netframework4.5","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json#dependencygroup/.netframework4.5/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.0-preview2-41113220915, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"}],"targetFramework":".NETFramework4.5"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json#dependencygroup/.netcoreapp2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json#dependencygroup/.netcoreapp2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.0-preview2-41113220915, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.20.18.48.24/sustainsys.saml2.2.0.0-preview01.json#dependencygroup/.netcoreapp2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETCoreApp2.0"}],"description":"Protocol support for SAML2 for .NET Core and full framework","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0-preview01/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0-preview01/sustainsys.saml2.2.0.0-preview01.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-01-09T17:12:20.44+00:00","requireLicenseAcceptance":false,"summary":"","tags":[""],"title":"","version":"2.0.0-preview01"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0-preview01/sustainsys.saml2.2.0.0-preview01.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.0.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json","@type":"PackageDetails","authors":"Sustainsys.Saml2","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.09.27.17.39.53/sustainsys.saml2.2.0.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"Package Description","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0/sustainsys.saml2.2.0.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-09-27T13:33:15.37+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.0.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.0.0/sustainsys.saml2.2.0.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.1.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json","@type":"PackageDetails","authors":"Sustainsys.Saml2","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.10.16.07.05.10/sustainsys.saml2.2.1.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"Package Description","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.1.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.1.0/sustainsys.saml2.2.1.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-10-16T06:59:44.68+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.1.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.1.0/sustainsys.saml2.2.1.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.2.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.0.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2018.11.23.08.17.25/sustainsys.saml2.2.2.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.4.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"Package Description","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.2.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.2.0/sustainsys.saml2.2.2.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2018-11-23T08:13:08.003+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.2.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.2.0/sustainsys.saml2.2.2.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.3.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.6.1/system.valuetuple","@type":"PackageDependency","id":"System.ValueTuple","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.valuetuple/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.1.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2019.06.27.14.32.15/sustainsys.saml2.2.3.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"SAML2 protocol support. Do not use directly, use the high level package for your platform.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.3.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.3.0/sustainsys.saml2.2.3.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2019-06-27T14:27:31.613+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.3.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.3.0/sustainsys.saml2.2.3.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.4.0.json","@type":"Package","commitId":"98ea3ac2-146d-4d38-bdf9-532dbef29db5","commitTimeStamp":"2020-02-08T00:52:47.1835669+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.6.1/system.valuetuple","@type":"PackageDependency","id":"System.ValueTuple","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.valuetuple/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.1.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.01.17.15.23.31/sustainsys.saml2.2.4.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"SAML2 protocol support. Do not use directly, use the high level package for your platform.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.4.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"","licenseUrl":"https://github.com/Sustainsys/Saml2/blob/master/LICENSE","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.4.0/sustainsys.saml2.2.4.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-01-17T15:11:05.81+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.4.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.4.0/sustainsys.saml2.2.4.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.5.0.json","@type":"Package","commitId":"9559ccd8-4589-495d-8e6d-58cd8f93e893","commitTimeStamp":"2020-03-24T14:25:33.9377403+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.6.1/system.valuetuple","@type":"PackageDependency","id":"System.ValueTuple","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.valuetuple/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.1.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.24.14.25.15/sustainsys.saml2.2.5.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"SAML2 protocol support. Do not use directly, use the high level package for your platform.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.5.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"MIT","licenseUrl":"https://www.nuget.org/packages/Sustainsys.Saml2/2.5.0/license","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.5.0/sustainsys.saml2.2.5.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-03-24T14:22:39.96+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.5.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.5.0/sustainsys.saml2.2.5.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.6.0.json","@type":"Package","commitId":"26d895e3-cb4d-4607-af2a-783522ba1840","commitTimeStamp":"2020-03-27T11:09:03.672231+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.6.1/system.valuetuple","@type":"PackageDependency","id":"System.ValueTuple","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.valuetuple/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.1.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.03.27.11.08.40/sustainsys.saml2.2.6.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"SAML2 protocol support. Do not use directly, use the high level package for your platform.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.6.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"MIT","licenseUrl":"https://www.nuget.org/packages/Sustainsys.Saml2/2.6.0/license","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.6.0/sustainsys.saml2.2.6.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-03-27T11:06:27.5+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.6.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.6.0/sustainsys.saml2.2.6.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"},{"@id":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/2.7.0.json","@type":"Package","commitId":"4b2bebc9-f63a-432a-8bcc-f9a277093541","commitTimeStamp":"2020-04-21T12:30:33.5740394+00:00","catalogEntry":{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json","@type":"PackageDetails","authors":"Sustainsys","dependencyGroups":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.6.1/system.valuetuple","@type":"PackageDependency","id":"System.ValueTuple","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.valuetuple/index.json"}],"targetFramework":".NETFramework4.6.1"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netframework4.7/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETFramework4.7"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0","@type":"PackageDependencyGroup","dependencies":[{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/microsoft.extensions.caching.memory","@type":"PackageDependency","id":"Microsoft.Extensions.Caching.Memory","range":"[2.1.2, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.extensions.caching.memory/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.protocols","@type":"PackageDependency","id":"Microsoft.IdentityModel.Protocols","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.protocols/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/microsoft.identitymodel.tokens.saml","@type":"PackageDependency","id":"Microsoft.IdentityModel.Tokens.Saml","range":"[5.2.4, )","registration":"https://api.nuget.org/v3/registration5-semver1/microsoft.identitymodel.tokens.saml/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/system.configuration.configurationmanager","@type":"PackageDependency","id":"System.Configuration.ConfigurationManager","range":"[4.4.1, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.configuration.configurationmanager/index.json"},{"@id":"https://api.nuget.org/v3/catalog0/data/2020.04.21.12.30.11/sustainsys.saml2.2.7.0.json#dependencygroup/.netstandard2.0/system.security.cryptography.xml","@type":"PackageDependency","id":"System.Security.Cryptography.Xml","range":"[4.5.0, )","registration":"https://api.nuget.org/v3/registration5-semver1/system.security.cryptography.xml/index.json"}],"targetFramework":".NETStandard2.0"}],"description":"SAML2 protocol support. Do not use directly, use the high level package for your platform.","iconUrl":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.7.0/icon","id":"Sustainsys.Saml2","language":"","licenseExpression":"MIT","licenseUrl":"https://www.nuget.org/packages/Sustainsys.Saml2/2.7.0/license","listed":true,"minClientVersion":"","packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.7.0/sustainsys.saml2.2.7.0.nupkg","projectUrl":"https://github.com/Sustainsys/Saml2","published":"2020-04-21T12:27:36.427+00:00","requireLicenseAcceptance":false,"summary":"","tags":["SAML2","authentication","AspNet","SAML","SSO"],"title":"","version":"2.7.0"},"packageContent":"https://api.nuget.org/v3-flatcontainer/sustainsys.saml2/2.7.0/sustainsys.saml2.2.7.0.nupkg","registration":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json"}],"parent":"https://api.nuget.org/v3/registration5-semver1/sustainsys.saml2/index.json","lower":"0.23.0","upper":"2.7.0"}],"@context":{"@vocab":"http://schema.nuget.org/schema#","catalog":"http://schema.nuget.org/catalog#","xsd":"http://www.w3.org/2001/XMLSchema#","items":{"@id":"catalog:item","@container":"@set"},"commitTimeStamp":{"@id":"catalog:commitTimeStamp","@type":"xsd:dateTime"},"commitId":{"@id":"catalog:commitId"},"count":{"@id":"catalog:count"},"parent":{"@id":"catalog:parent","@type":"@id"},"tags":{"@id":"tag","@container":"@set"},"reasons":{"@container":"@set"},"packageTargetFrameworks":{"@id":"packageTargetFramework","@container":"@set"},"dependencyGroups":{"@id":"dependencyGroup","@container":"@set"},"dependencies":{"@id":"dependency","@container":"@set"},"packageContent":{"@type":"@id"},"published":{"@type":"xsd:dateTime"},"registration":{"@type":"@id"}}} \ No newline at end of file diff --git a/vulnerabilities/tests/test_github.py b/vulnerabilities/tests/test_github.py index 8caa26108..715db134f 100644 --- a/vulnerabilities/tests/test_github.py +++ b/vulnerabilities/tests/test_github.py @@ -21,10 +21,24 @@ # Visit https://github.com/nexB/vulnerablecode/ for support and download. import os +import json import unittest +from unittest.mock import patch +from unittest.mock import MagicMock +from unittest.mock import call +import xml.etree.ElementTree as ET +from collections import OrderedDict + +from requests.models import Response +from packageurl import PackageURL from vulnerabilities.importers.github import GitHubAPIDataSource from vulnerabilities.importers.github import MavenVersionAPI +from vulnerabilities.importers.github import ComposerVersionAPI +from vulnerabilities.importers.github import NugetVersionAPI +from vulnerabilities.importers.github import GitHubTokenError +from vulnerabilities.importers.github import query +from vulnerabilities.data_source import Advisory BASE_DIR = os.path.dirname(os.path.abspath(__file__)) TEST_DATA = os.path.join(BASE_DIR, "test_data") @@ -37,7 +51,12 @@ def setUpClass(cls): "endpoint": "https://api.example.com/graphql", "ecosystems": ["MAVEN"], } - cls.data_src = GitHubAPIDataSource(1, config=data_source_cfg) + # os.environ = {'GH_TOKEN':'abc'} + with patch.dict(os.environ, {"GH_TOKEN": "abc"}): + cls.data_src = GitHubAPIDataSource(1, config=data_source_cfg) + + def tearDown(self): + setattr(self.data_src, "version_api", None) def test_categorize_versions(self): eg_version_range = ">= 3.3.0, < 3.3.5" @@ -52,11 +71,349 @@ def test_categorize_versions(self): assert aff_vers == exp_aff_vers assert safe_vers == exp_safe_vers + def test_fetch_withinvalidtoken(self): + class MockErrorResponse(MagicMock): + @staticmethod + def json(): + return {"message": "Bad credentials"} + + # This test checks whether `fetch` raises an error when there is an Authentication + # failure. + exp_headers = {"Authorization": "token abc"} + first_query = {"query": query % ("MAVEN", "")} + mock = MockErrorResponse() + with patch("vulnerabilities.importers.github.requests.post", new=mock): + self.assertRaises(GitHubTokenError, self.data_src.fetch) + mock.assert_called_with( + self.data_src.config.endpoint, headers=exp_headers, json=first_query + ) + + def test_fetch_withvalidtoken(self): + class MockCorrectResponse(MagicMock): + has_next_page = False + # This owes an explanation. The intent of having + # has_next_page is to obtain different MockCorrectResponse objects + # the first one should have `has_next_page = True` and other should + # have `has_next_page = False`. This is required to test whether + # GitHubAPIDataSource.fetch stops as expected. + + def json(self): + self.has_next_page = not self.has_next_page + return { + "data": { + "securityVulnerabilities": { + "pageInfo": { + "endCursor": "page=2", + "hasNextPage": self.has_next_page, + } + } + } + } + + exp_headers = {"Authorization": "token abc"} + first_query = {"query": query % ("MAVEN", "")} + second_query = {"query": query % ("MAVEN", 'after: "page=2"')} + mock = MockCorrectResponse() + with patch("vulnerabilities.importers.github.requests.post", new=mock): + resp = self.data_src.fetch() + + call_1 = call( + self.data_src.config.endpoint, headers=exp_headers, json=first_query + ) + call_2 = call( + self.data_src.config.endpoint, headers=exp_headers, json=second_query + ) + + assert mock.call_args_list[0] == call_1 + assert mock.call_args_list[1] == call_2 + + def test_set_version_api(self): + + assert getattr(self.data_src, "version_api", None) is None + + self.data_src.set_version_api("MAVEN") + assert isinstance(self.data_src.version_api, MavenVersionAPI) + + self.data_src.set_version_api("NUGET") + assert isinstance(self.data_src.version_api, NugetVersionAPI) + + self.data_src.set_version_api("COMPOSER") + assert isinstance(self.data_src.version_api, ComposerVersionAPI) + + def test_process_name(self): + + expected_1 = ("org.apache", "kafka") + result_1 = self.data_src.process_name("MAVEN", "org.apache:kafka") + assert result_1 == expected_1 + + expected_2 = (None, "WindowS.nUget.ExIsts") + result_2 = self.data_src.process_name("NUGET", "WindowS.nUget.ExIsts") + assert result_2 == expected_2 + + expected_3 = ("psf", "black") + result_3 = self.data_src.process_name("COMPOSER", "psf/black") + assert result_3 == expected_3 + + expected_4 = None + result_4 = self.data_src.process_name("SAMPLE", "sample?example=True") + assert result_4 == expected_4 + + def test_process_response(self): + + with open(os.path.join(TEST_DATA, "github_api", "response.json")) as f: + resp = json.load(f) + self.data_src.advisories = resp + + expected_result = [ + Advisory( + summary="Denial of Service in Tomcat", + impacted_package_urls=set(), + resolved_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="1.2.0", + qualifiers=OrderedDict(), + subpath=None, + ), + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="9.0.2", + qualifiers=OrderedDict(), + subpath=None, + ), + }, + reference_urls=[], + reference_ids={"GHSA-qcxh-w3j9-58qr"}, + cve_id="CVE-2019-0199", + ), + Advisory( + summary="Denial of Service in Tomcat", + impacted_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="9.0.2", + qualifiers=OrderedDict(), + subpath=None, + ) + }, + resolved_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="1.2.0", + qualifiers=OrderedDict(), + subpath=None, + ) + }, + reference_urls=[], + reference_ids={"GHSA-qcxh-w3j9-58qr"}, + cve_id="CVE-2019-0199", + ), + Advisory( + summary="Improper Input Validation in Tomcat", + impacted_package_urls=set(), + resolved_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="1.2.0", + qualifiers=OrderedDict(), + subpath=None, + ), + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="9.0.2", + qualifiers=OrderedDict(), + subpath=None, + ), + }, + reference_urls=[], + reference_ids={"GHSA-c9hw-wf7x-jp9j"}, + cve_id="CVE-2020-1938", + ), + Advisory( + summary="Improper Input Validation in Tomcat", + impacted_package_urls=set(), + resolved_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="1.2.0", + qualifiers=OrderedDict(), + subpath=None, + ), + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="9.0.2", + qualifiers=OrderedDict(), + subpath=None, + ), + }, + reference_urls=[], + reference_ids={"GHSA-c9hw-wf7x-jp9j"}, + cve_id="CVE-2020-1938", + ), + Advisory( + summary="Improper Input Validation in Tomcat", + impacted_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="9.0.2", + qualifiers=OrderedDict(), + subpath=None, + ) + }, + resolved_package_urls={ + PackageURL( + type="maven", + namespace="org.apache.tomcat.embed", + name="tomcat-embed-core", + version="1.2.0", + qualifiers=OrderedDict(), + subpath=None, + ) + }, + reference_urls=[], + reference_ids={"GHSA-c9hw-wf7x-jp9j"}, + cve_id="CVE-2020-1938", + ), + ] + + mock_version_api = MagicMock() + mock_version_api.get = lambda x: {"1.2.0", "9.0.2"} + with patch( + "vulnerabilities.importers.github.MavenVersionAPI", + return_value=mock_version_api, + ): + found_result = self.data_src.process_response() + + assert expected_result == found_result + + +class TestComposerVersionAPI(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.version_api = ComposerVersionAPI() + with open(os.path.join(TEST_DATA, "composer_api", "cms-core.json")) as f: + cls.response = json.load(f) + + cls.expected_versions = { + "9.5.3", + "8.7.30", + "9.3.1", + "9.5.1", + "9.5.11", + "9.5.6", + "8.7.18", + "8.7.15", + "9.4.0", + "9.5.7", + "8.7.21", + "9.5.12", + "9.5.14", + "8.7.27", + "8.7.17", + "8.7.9", + "10.4.3", + "10.0.0", + "10.1.0", + "9.5.13", + "9.5.5", + "8.7.22", + "8.7.10", + "8.7.24", + "8.7.13", + "8.7.14", + "8.7.19", + "9.5.17", + "9.3.2", + "9.5.15", + "8.7.8", + "9.3.3", + "8.7.32", + "10.4.0", + "10.4.1", + "9.5.18", + "9.1.0", + "9.5.19", + "9.5.2", + "8.7.26", + "8.7.20", + "10.2.0", + "8.7.31", + "8.7.11", + "9.2.1", + "8.7.25", + "9.5.10", + "10.2.2", + "10.4.2", + "9.5.9", + "9.2.0", + "9.3.0", + "9.5.16", + "10.3.0", + "8.7.7", + "10.4.4", + "8.7.12", + "8.7.29", + "10.2.1", + "9.5.8", + "9.5.4", + "9.5.0", + "8.7.28", + "8.7.23", + "9.0.0", + "8.7.16", + } + + def test_composer_url(self): + expected_url = "https://repo.packagist.org/p/typo3/cms-core.json" + found_url = self.version_api.composer_url("typo3/cms-core") + assert expected_url == found_url + + def test_extract_versions(self): + + found_versions = self.version_api.extract_versions( + self.response, "typo3/cms-core" + ) + assert found_versions == self.expected_versions + + def test_load_to_api(self): + + assert self.version_api.get("typo3/cms-core") == set() + + mock_response = MagicMock() + mock_response.json = lambda: self.response + + with patch( + "vulnerabilities.importers.github.requests.get", return_value=mock_response + ): + self.version_api.load_to_api("typo3/cms-core") + + assert self.version_api.get("typo3/cms-core") == self.expected_versions + class TestMavenVersionAPI(unittest.TestCase): @classmethod def setUpClass(cls): cls.version_api = MavenVersionAPI() + with open(os.path.join(TEST_DATA, "maven_api", "maven-metadata.xml")) as f: + cls.response = ET.parse(f) def test_artifact_url(self): eg_comps1 = ["org.apache", "kafka"] @@ -73,3 +430,73 @@ def test_artifact_url(self): "https://repo.maven.apache.org/maven2" "/apple/msft/windows/mac/oss/exfat-ntfs/maven-metadata.xml" == url2 ) + + def test_extract_versions(self): + expected_versions = {"1.2.2", "1.2.3", "1.3.0"} + assert expected_versions == self.version_api.extract_versions(self.response) + + def test_load_to_api(self): + + assert self.version_api.get("org.apache:kafka") == set() + + mock_response = MagicMock() + mock_response.content = ET.tostring(self.response.getroot()) + expected = {"1.2.3", "1.3.0", "1.2.2"} + + with patch( + "vulnerabilities.importers.github.requests.get", return_value=mock_response + ): + self.version_api.load_to_api("org.apache:kafka") + + assert self.version_api.get("org.apache:kafka") == expected + + +class TestNugetVersionAPI(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.version_api = NugetVersionAPI() + with open(os.path.join(TEST_DATA, "nuget_api", "index.json")) as f: + cls.response = json.load(f) + + cls.expected_versions = { + "0.23.0", + "0.24.0", + "1.0.0", + "1.0.1", + "1.0.2", + "2.0.0", + "2.0.0-preview01", + "2.6.0", + "2.1.0", + "2.2.0", + "2.3.0", + "2.4.0", + "2.5.0", + "2.7.0", + } + + def test_nuget_url(self): + expected_url = ( + "https://api.nuget.org/v3/registration5-semver1/exfat.ntfs/index.json" + ) + found_url = self.version_api.nuget_url("exfat.ntfs") + assert expected_url == found_url + + def test_extract_versions(self): + + found_versions = self.version_api.extract_versions(self.response) + assert self.expected_versions == found_versions + + def test_load_to_api(self): + + assert self.version_api.get("exfat.ntfs") == set() + + mock_response = MagicMock() + mock_response.json = lambda: self.response + + with patch( + "vulnerabilities.importers.github.requests.get", return_value=mock_response + ): + self.version_api.load_to_api("Exfat.Ntfs") + + assert self.version_api.get("exfat.ntfs") == self.expected_versions From d7d25f0883d4dcda5214ebf499664bbf588624e9 Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Wed, 17 Jun 2020 12:13:39 +0530 Subject: [PATCH 6/8] Make GitHub importer have consistent style, by replacing double inverted commas to single inverted commas Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/github.py | 95 +++---- vulnerabilities/tests/test_github.py | 400 +++++++++++++-------------- 2 files changed, 248 insertions(+), 247 deletions(-) diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index 129390b2e..7c54727c2 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -6,14 +6,14 @@ # You may not use this software except in compliance with the License. # You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software distributed -# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR # CONDITIONS OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. # # When you publish or redistribute any data created with VulnerableCode or any VulnerableCode # derivative work, you must accompany this data with the following acknowledgment: # -# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# Generated with VulnerableCode and provided on an 'AS IS' BASIS, WITHOUT WARRANTIES # OR CONDITIONS OF ANY KIND, either express or implied. No content created from # VulnerableCode should be considered or used as legal advice. Consult an Attorney # for any legal advice. @@ -43,8 +43,8 @@ # set of all possible values of first '%s' = {'MAVEN','COMPOSER', 'NUGET'} # second '%s' is interesting, it will have the value '' for the first request, # since we don't have any value for endCursor at the beginning -# for all the subsequent requests it will have value 'after: "{endCursor}"' -query = """ +# for all the subsequent requests it will have value 'after: "{endCursor}"" +query = ''' query MyQuery { securityVulnerabilities(first: 100, ecosystem: %s, %s) { edges { @@ -68,7 +68,7 @@ } } } - """ + ''' class GitHubTokenError(Exception): @@ -88,9 +88,9 @@ class GitHubAPIDataSource(DataSource): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) try: - self.gh_token = os.environ["GH_TOKEN"] + self.gh_token = os.environ['GH_TOKEN'] except KeyError: - raise GitHubTokenError("Envirnomental variable GH_TOKEN is missing") + raise GitHubTokenError('Envirnomental variable GH_TOKEN is missing') def __enter__(self): self.advisories = self.fetch() @@ -100,44 +100,45 @@ def updated_advisories(self) -> Set[Advisory]: def fetch(self) -> Mapping[str, List[Mapping]]: - headers = {"Authorization": "token " + self.gh_token} + headers = {'Authorization': 'token ' + self.gh_token} api_data = {} for ecosystem in self.config.ecosystems: api_data[ecosystem] = [] - end_cursor_exp = "" + end_cursor_exp = '' while True: - query_json = {"query": query % (ecosystem, end_cursor_exp)} + query_json = {'query': query % (ecosystem, end_cursor_exp)} resp = requests.post( self.config.endpoint, headers=headers, json=query_json ).json() - if resp.get("message") == "Bad credentials": - raise GitHubTokenError("Invalid GitHub token") + if resp.get('message') == 'Bad credentials': + raise GitHubTokenError('Invalid GitHub token') - end_cursor = resp["data"]["securityVulnerabilities"]["pageInfo"][ - "endCursor" + end_cursor = resp['data']['securityVulnerabilities']['pageInfo'][ + 'endCursor' ] - end_cursor_exp = "after: {}".format('"{}"'.format(end_cursor)) + end_cursor_exp = 'after: {}'.format('"{}"'.format(end_cursor)) api_data[ecosystem].append(resp) + print(resp) - if not resp["data"]["securityVulnerabilities"]["pageInfo"][ - "hasNextPage" + if not resp['data']['securityVulnerabilities']['pageInfo'][ + 'hasNextPage' ]: break return api_data def set_version_api(self, ecosystem: str) -> None: - if ecosystem == "MAVEN": + if ecosystem == 'MAVEN': self.version_api = MavenVersionAPI() - elif ecosystem == "NUGET": + elif ecosystem == 'NUGET': self.version_api = NugetVersionAPI() - elif ecosystem == "COMPOSER": + elif ecosystem == 'COMPOSER': self.version_api = ComposerVersionAPI() @staticmethod @@ -145,19 +146,19 @@ def process_name( ecosystem: str, pkg_name: str ) -> Optional[Tuple[Optional[str], str]]: - if ecosystem == "MAVEN": + if ecosystem == 'MAVEN': - artifact_comps = pkg_name.split(":") + artifact_comps = pkg_name.split(':') if len(artifact_comps) != 2: return ns, name = artifact_comps return ns, name - if ecosystem == "NUGET": + if ecosystem == 'NUGET': return None, pkg_name - if ecosystem == "COMPOSER": - vendor, name = pkg_name.split("/") + if ecosystem == 'COMPOSER': + vendor, name = pkg_name.split('/') return vendor, name def process_response(self) -> List[Advisory]: @@ -166,14 +167,14 @@ def process_response(self) -> List[Advisory]: self.set_version_api(ecosystem) pkg_type = ecosystem.lower() for resp_page in self.advisories[ecosystem]: - for adv in resp_page["data"]["securityVulnerabilities"]["edges"]: - name = adv["node"]["package"]["name"] + for adv in resp_page['data']['securityVulnerabilities']['edges']: + name = adv['node']['package']['name'] if self.process_name(ecosystem, name): ns, pkg_name = self.process_name(ecosystem, name) else: continue - aff_range = adv["node"]["vulnerableVersionRange"] + aff_range = adv['node']['vulnerableVersionRange'] self.version_api.load_to_api(name) aff_vers, unaff_vers = self.categorize_versions( aff_range, self.version_api.get(name) @@ -195,13 +196,13 @@ def process_response(self) -> List[Advisory]: cve_ids = set() ref_ids = set() - vuln_desc = adv["node"]["advisory"]["summary"] + vuln_desc = adv['node']['advisory']['summary'] - for vuln in adv["node"]["advisory"]["identifiers"]: - if vuln["type"] == "CVE": - cve_ids.add(vuln["value"]) + for vuln in adv['node']['advisory']['identifiers']: + if vuln['type'] == 'CVE': + cve_ids.add(vuln['value']) else: - ref_ids.add(vuln["value"]) + ref_ids.add(vuln['value']) for cve_id in cve_ids: adv_list.append( Advisory( @@ -237,13 +238,13 @@ def load_to_api(self, pkg_name: str) -> None: if pkg_name in self.cache: return - artifact_comps = pkg_name.split(":") + artifact_comps = pkg_name.split(':') endpoint = self.artifact_url(artifact_comps) resp = requests.get(endpoint).content try: - xml_resp = ET.ElementTree(ET.fromstring(resp.decode("utf-8"))) + xml_resp = ET.ElementTree(ET.fromstring(resp.decode('utf-8'))) self.cache[pkg_name] = self.extract_versions(xml_resp) except ET.ParseError: @@ -252,10 +253,10 @@ def load_to_api(self, pkg_name: str) -> None: @staticmethod def artifact_url(artifact_comps: List[str]) -> str: - base_url = "https://repo.maven.apache.org/maven2/{}" + base_url = 'https://repo.maven.apache.org/maven2/{}' group_id, artifact_id = artifact_comps - group_url = group_id.replace(".", "/") - suffix = group_url + "/" + artifact_id + "/" + "maven-metadata.xml" + group_url = group_id.replace('.', '/') + suffix = group_url + '/' + artifact_id + '/' + 'maven-metadata.xml' endpoint = base_url.format(suffix) return endpoint @@ -265,7 +266,7 @@ def extract_versions(xml_response: ET.ElementTree) -> Set[str]: all_versions = set() for child in xml_response.getroot().iter(): - if child.tag == "version": + if child.tag == 'version': all_versions.add(child.text) return all_versions @@ -294,15 +295,15 @@ def load_to_api(self, pkg_name: str) -> None: @staticmethod def nuget_url(pkg_name: str) -> str: - base_url = "https://api.nuget.org/v3/registration5-semver1/{}/index.json" + base_url = 'https://api.nuget.org/v3/registration5-semver1/{}/index.json' return base_url.format(pkg_name.lower()) @staticmethod def extract_versions(json_resp: dict) -> Set[str]: all_versions = set() try: - for entry in json_resp["items"][0]["items"]: - all_versions.add(entry["catalogEntry"]["version"]) + for entry in json_resp['items'][0]['items']: + all_versions.add(entry['catalogEntry']['version']) # json response for YamlDotNet.Signed triggers this exception except KeyError: return all_versions @@ -326,16 +327,16 @@ def load_to_api(self, pkg_name: str) -> None: @staticmethod def composer_url(pkg_name: str) -> str: - vendor, name = pkg_name.split("/") - return f"https://repo.packagist.org/p/{vendor}/{name}.json" + vendor, name = pkg_name.split('/') + return f'https://repo.packagist.org/p/{vendor}/{name}.json' @staticmethod def extract_versions(json_resp: dict, pkg_name: str) -> Set[str]: - all_versions = json_resp["packages"][pkg_name].keys() + all_versions = json_resp['packages'][pkg_name].keys() # This filter ensures, that all_versions contains only released versions - all_versions = set(filter(lambda x: "dev" not in x, all_versions)) + all_versions = set(filter(lambda x: 'dev' not in x, all_versions)) # See https://github.com/composer/composer/blob/44a4429978d1b3c6223277b875762b2930e83e8c/doc/articles/versions.md#tags # nopep8 # for explanation of removing 'v' - all_versions = set(map(lambda x: x.replace("v", ""), all_versions)) + all_versions = set(map(lambda x: x.replace('v', ''), all_versions)) return all_versions diff --git a/vulnerabilities/tests/test_github.py b/vulnerabilities/tests/test_github.py index 715db134f..b2641ad25 100644 --- a/vulnerabilities/tests/test_github.py +++ b/vulnerabilities/tests/test_github.py @@ -6,14 +6,14 @@ # You may not use this software except in compliance with the License. # You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software distributed -# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR # CONDITIONS OF ANY KIND, either express or implied. See the License for the # specific language governing permissions and limitations under the License. # # When you publish or redistribute any data created with VulnerableCode or any VulnerableCode # derivative work, you must accompany this data with the following acknowledgment: # -# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES +# Generated with VulnerableCode and provided on an 'AS IS' BASIS, WITHOUT WARRANTIES # OR CONDITIONS OF ANY KIND, either express or implied. No content created from # VulnerableCode should be considered or used as legal advice. Consult an Attorney # for any legal advice. @@ -41,32 +41,32 @@ from vulnerabilities.data_source import Advisory BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -TEST_DATA = os.path.join(BASE_DIR, "test_data") +TEST_DATA = os.path.join(BASE_DIR, 'test_data') class TestGitHubAPIDataSource(unittest.TestCase): @classmethod def setUpClass(cls): data_source_cfg = { - "endpoint": "https://api.example.com/graphql", - "ecosystems": ["MAVEN"], + 'endpoint': 'https://api.example.com/graphql', + 'ecosystems': ['MAVEN'], } # os.environ = {'GH_TOKEN':'abc'} - with patch.dict(os.environ, {"GH_TOKEN": "abc"}): + with patch.dict(os.environ, {'GH_TOKEN': 'abc'}): cls.data_src = GitHubAPIDataSource(1, config=data_source_cfg) def tearDown(self): - setattr(self.data_src, "version_api", None) + setattr(self.data_src, 'version_api', None) def test_categorize_versions(self): - eg_version_range = ">= 3.3.0, < 3.3.5" - eg_versions = {"3.3.6", "3.3.0", "3.3.4", "3.2.0"} + eg_version_range = '>= 3.3.0, < 3.3.5' + eg_versions = {'3.3.6', '3.3.0', '3.3.4', '3.2.0'} aff_vers, safe_vers = self.data_src.categorize_versions( eg_version_range, eg_versions ) - exp_safe_vers = {"3.3.6", "3.2.0"} - exp_aff_vers = {"3.3.0", "3.3.4"} + exp_safe_vers = {'3.3.6', '3.2.0'} + exp_aff_vers = {'3.3.0', '3.3.4'} assert aff_vers == exp_aff_vers assert safe_vers == exp_safe_vers @@ -75,14 +75,14 @@ def test_fetch_withinvalidtoken(self): class MockErrorResponse(MagicMock): @staticmethod def json(): - return {"message": "Bad credentials"} + return {'message': 'Bad credentials'} # This test checks whether `fetch` raises an error when there is an Authentication # failure. - exp_headers = {"Authorization": "token abc"} - first_query = {"query": query % ("MAVEN", "")} + exp_headers = {'Authorization': 'token abc'} + first_query = {'query': query % ('MAVEN', '')} mock = MockErrorResponse() - with patch("vulnerabilities.importers.github.requests.post", new=mock): + with patch('vulnerabilities.importers.github.requests.post', new=mock): self.assertRaises(GitHubTokenError, self.data_src.fetch) mock.assert_called_with( self.data_src.config.endpoint, headers=exp_headers, json=first_query @@ -100,21 +100,21 @@ class MockCorrectResponse(MagicMock): def json(self): self.has_next_page = not self.has_next_page return { - "data": { - "securityVulnerabilities": { - "pageInfo": { - "endCursor": "page=2", - "hasNextPage": self.has_next_page, + 'data': { + 'securityVulnerabilities': { + 'pageInfo': { + 'endCursor': 'page=2', + 'hasNextPage': self.has_next_page, } } } } - exp_headers = {"Authorization": "token abc"} - first_query = {"query": query % ("MAVEN", "")} - second_query = {"query": query % ("MAVEN", 'after: "page=2"')} + exp_headers = {'Authorization': 'token abc'} + first_query = {'query': query % ('MAVEN', '')} + second_query = {'query': query % ('MAVEN', 'after: "page=2"')} mock = MockCorrectResponse() - with patch("vulnerabilities.importers.github.requests.post", new=mock): + with patch('vulnerabilities.importers.github.requests.post', new=mock): resp = self.data_src.fetch() call_1 = call( @@ -129,175 +129,175 @@ def json(self): def test_set_version_api(self): - assert getattr(self.data_src, "version_api", None) is None + assert getattr(self.data_src, 'version_api', None) is None - self.data_src.set_version_api("MAVEN") + self.data_src.set_version_api('MAVEN') assert isinstance(self.data_src.version_api, MavenVersionAPI) - self.data_src.set_version_api("NUGET") + self.data_src.set_version_api('NUGET') assert isinstance(self.data_src.version_api, NugetVersionAPI) - self.data_src.set_version_api("COMPOSER") + self.data_src.set_version_api('COMPOSER') assert isinstance(self.data_src.version_api, ComposerVersionAPI) def test_process_name(self): - expected_1 = ("org.apache", "kafka") - result_1 = self.data_src.process_name("MAVEN", "org.apache:kafka") + expected_1 = ('org.apache', 'kafka') + result_1 = self.data_src.process_name('MAVEN', 'org.apache:kafka') assert result_1 == expected_1 - expected_2 = (None, "WindowS.nUget.ExIsts") - result_2 = self.data_src.process_name("NUGET", "WindowS.nUget.ExIsts") + expected_2 = (None, 'WindowS.nUget.ExIsts') + result_2 = self.data_src.process_name('NUGET', 'WindowS.nUget.ExIsts') assert result_2 == expected_2 - expected_3 = ("psf", "black") - result_3 = self.data_src.process_name("COMPOSER", "psf/black") + expected_3 = ('psf', 'black') + result_3 = self.data_src.process_name('COMPOSER', 'psf/black') assert result_3 == expected_3 expected_4 = None - result_4 = self.data_src.process_name("SAMPLE", "sample?example=True") + result_4 = self.data_src.process_name('SAMPLE', 'sample?example=True') assert result_4 == expected_4 def test_process_response(self): - with open(os.path.join(TEST_DATA, "github_api", "response.json")) as f: + with open(os.path.join(TEST_DATA, 'github_api', 'response.json')) as f: resp = json.load(f) self.data_src.advisories = resp expected_result = [ Advisory( - summary="Denial of Service in Tomcat", + summary='Denial of Service in Tomcat', impacted_package_urls=set(), resolved_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="1.2.0", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='1.2.0', qualifiers=OrderedDict(), subpath=None, ), PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="9.0.2", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='9.0.2', qualifiers=OrderedDict(), subpath=None, ), }, reference_urls=[], - reference_ids={"GHSA-qcxh-w3j9-58qr"}, - cve_id="CVE-2019-0199", + reference_ids={'GHSA-qcxh-w3j9-58qr'}, + cve_id='CVE-2019-0199', ), Advisory( - summary="Denial of Service in Tomcat", + summary='Denial of Service in Tomcat', impacted_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="9.0.2", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='9.0.2', qualifiers=OrderedDict(), subpath=None, ) }, resolved_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="1.2.0", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='1.2.0', qualifiers=OrderedDict(), subpath=None, ) }, reference_urls=[], - reference_ids={"GHSA-qcxh-w3j9-58qr"}, - cve_id="CVE-2019-0199", + reference_ids={'GHSA-qcxh-w3j9-58qr'}, + cve_id='CVE-2019-0199', ), Advisory( - summary="Improper Input Validation in Tomcat", + summary='Improper Input Validation in Tomcat', impacted_package_urls=set(), resolved_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="1.2.0", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='1.2.0', qualifiers=OrderedDict(), subpath=None, ), PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="9.0.2", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='9.0.2', qualifiers=OrderedDict(), subpath=None, ), }, reference_urls=[], - reference_ids={"GHSA-c9hw-wf7x-jp9j"}, - cve_id="CVE-2020-1938", + reference_ids={'GHSA-c9hw-wf7x-jp9j'}, + cve_id='CVE-2020-1938', ), Advisory( - summary="Improper Input Validation in Tomcat", + summary='Improper Input Validation in Tomcat', impacted_package_urls=set(), resolved_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="1.2.0", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='1.2.0', qualifiers=OrderedDict(), subpath=None, ), PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="9.0.2", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='9.0.2', qualifiers=OrderedDict(), subpath=None, ), }, reference_urls=[], - reference_ids={"GHSA-c9hw-wf7x-jp9j"}, - cve_id="CVE-2020-1938", + reference_ids={'GHSA-c9hw-wf7x-jp9j'}, + cve_id='CVE-2020-1938', ), Advisory( - summary="Improper Input Validation in Tomcat", + summary='Improper Input Validation in Tomcat', impacted_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="9.0.2", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='9.0.2', qualifiers=OrderedDict(), subpath=None, ) }, resolved_package_urls={ PackageURL( - type="maven", - namespace="org.apache.tomcat.embed", - name="tomcat-embed-core", - version="1.2.0", + type='maven', + namespace='org.apache.tomcat.embed', + name='tomcat-embed-core', + version='1.2.0', qualifiers=OrderedDict(), subpath=None, ) }, reference_urls=[], - reference_ids={"GHSA-c9hw-wf7x-jp9j"}, - cve_id="CVE-2020-1938", + reference_ids={'GHSA-c9hw-wf7x-jp9j'}, + cve_id='CVE-2020-1938', ), ] mock_version_api = MagicMock() - mock_version_api.get = lambda x: {"1.2.0", "9.0.2"} + mock_version_api.get = lambda x: {'1.2.0', '9.0.2'} with patch( - "vulnerabilities.importers.github.MavenVersionAPI", + 'vulnerabilities.importers.github.MavenVersionAPI', return_value=mock_version_api, ): found_result = self.data_src.process_response() @@ -309,177 +309,177 @@ class TestComposerVersionAPI(unittest.TestCase): @classmethod def setUpClass(cls): cls.version_api = ComposerVersionAPI() - with open(os.path.join(TEST_DATA, "composer_api", "cms-core.json")) as f: + with open(os.path.join(TEST_DATA, 'composer_api', 'cms-core.json')) as f: cls.response = json.load(f) cls.expected_versions = { - "9.5.3", - "8.7.30", - "9.3.1", - "9.5.1", - "9.5.11", - "9.5.6", - "8.7.18", - "8.7.15", - "9.4.0", - "9.5.7", - "8.7.21", - "9.5.12", - "9.5.14", - "8.7.27", - "8.7.17", - "8.7.9", - "10.4.3", - "10.0.0", - "10.1.0", - "9.5.13", - "9.5.5", - "8.7.22", - "8.7.10", - "8.7.24", - "8.7.13", - "8.7.14", - "8.7.19", - "9.5.17", - "9.3.2", - "9.5.15", - "8.7.8", - "9.3.3", - "8.7.32", - "10.4.0", - "10.4.1", - "9.5.18", - "9.1.0", - "9.5.19", - "9.5.2", - "8.7.26", - "8.7.20", - "10.2.0", - "8.7.31", - "8.7.11", - "9.2.1", - "8.7.25", - "9.5.10", - "10.2.2", - "10.4.2", - "9.5.9", - "9.2.0", - "9.3.0", - "9.5.16", - "10.3.0", - "8.7.7", - "10.4.4", - "8.7.12", - "8.7.29", - "10.2.1", - "9.5.8", - "9.5.4", - "9.5.0", - "8.7.28", - "8.7.23", - "9.0.0", - "8.7.16", + '9.5.3', + '8.7.30', + '9.3.1', + '9.5.1', + '9.5.11', + '9.5.6', + '8.7.18', + '8.7.15', + '9.4.0', + '9.5.7', + '8.7.21', + '9.5.12', + '9.5.14', + '8.7.27', + '8.7.17', + '8.7.9', + '10.4.3', + '10.0.0', + '10.1.0', + '9.5.13', + '9.5.5', + '8.7.22', + '8.7.10', + '8.7.24', + '8.7.13', + '8.7.14', + '8.7.19', + '9.5.17', + '9.3.2', + '9.5.15', + '8.7.8', + '9.3.3', + '8.7.32', + '10.4.0', + '10.4.1', + '9.5.18', + '9.1.0', + '9.5.19', + '9.5.2', + '8.7.26', + '8.7.20', + '10.2.0', + '8.7.31', + '8.7.11', + '9.2.1', + '8.7.25', + '9.5.10', + '10.2.2', + '10.4.2', + '9.5.9', + '9.2.0', + '9.3.0', + '9.5.16', + '10.3.0', + '8.7.7', + '10.4.4', + '8.7.12', + '8.7.29', + '10.2.1', + '9.5.8', + '9.5.4', + '9.5.0', + '8.7.28', + '8.7.23', + '9.0.0', + '8.7.16', } def test_composer_url(self): - expected_url = "https://repo.packagist.org/p/typo3/cms-core.json" - found_url = self.version_api.composer_url("typo3/cms-core") + expected_url = 'https://repo.packagist.org/p/typo3/cms-core.json' + found_url = self.version_api.composer_url('typo3/cms-core') assert expected_url == found_url def test_extract_versions(self): found_versions = self.version_api.extract_versions( - self.response, "typo3/cms-core" + self.response, 'typo3/cms-core' ) assert found_versions == self.expected_versions def test_load_to_api(self): - assert self.version_api.get("typo3/cms-core") == set() + assert self.version_api.get('typo3/cms-core') == set() mock_response = MagicMock() mock_response.json = lambda: self.response with patch( - "vulnerabilities.importers.github.requests.get", return_value=mock_response + 'vulnerabilities.importers.github.requests.get', return_value=mock_response ): - self.version_api.load_to_api("typo3/cms-core") + self.version_api.load_to_api('typo3/cms-core') - assert self.version_api.get("typo3/cms-core") == self.expected_versions + assert self.version_api.get('typo3/cms-core') == self.expected_versions class TestMavenVersionAPI(unittest.TestCase): @classmethod def setUpClass(cls): cls.version_api = MavenVersionAPI() - with open(os.path.join(TEST_DATA, "maven_api", "maven-metadata.xml")) as f: + with open(os.path.join(TEST_DATA, 'maven_api', 'maven-metadata.xml')) as f: cls.response = ET.parse(f) def test_artifact_url(self): - eg_comps1 = ["org.apache", "kafka"] - eg_comps2 = ["apple.msft.windows.mac.oss", "exfat-ntfs"] + eg_comps1 = ['org.apache', 'kafka'] + eg_comps2 = ['apple.msft.windows.mac.oss', 'exfat-ntfs'] url1 = self.version_api.artifact_url(eg_comps1) url2 = self.version_api.artifact_url(eg_comps2) assert ( - "https://repo.maven.apache.org/maven2/org/apache/kafka/maven-metadata.xml" + 'https://repo.maven.apache.org/maven2/org/apache/kafka/maven-metadata.xml' == url1 ) assert ( - "https://repo.maven.apache.org/maven2" - "/apple/msft/windows/mac/oss/exfat-ntfs/maven-metadata.xml" == url2 + 'https://repo.maven.apache.org/maven2' + '/apple/msft/windows/mac/oss/exfat-ntfs/maven-metadata.xml' == url2 ) def test_extract_versions(self): - expected_versions = {"1.2.2", "1.2.3", "1.3.0"} + expected_versions = {'1.2.2', '1.2.3', '1.3.0'} assert expected_versions == self.version_api.extract_versions(self.response) def test_load_to_api(self): - assert self.version_api.get("org.apache:kafka") == set() + assert self.version_api.get('org.apache:kafka') == set() mock_response = MagicMock() mock_response.content = ET.tostring(self.response.getroot()) - expected = {"1.2.3", "1.3.0", "1.2.2"} + expected = {'1.2.3', '1.3.0', '1.2.2'} with patch( - "vulnerabilities.importers.github.requests.get", return_value=mock_response + 'vulnerabilities.importers.github.requests.get', return_value=mock_response ): - self.version_api.load_to_api("org.apache:kafka") + self.version_api.load_to_api('org.apache:kafka') - assert self.version_api.get("org.apache:kafka") == expected + assert self.version_api.get('org.apache:kafka') == expected class TestNugetVersionAPI(unittest.TestCase): @classmethod def setUpClass(cls): cls.version_api = NugetVersionAPI() - with open(os.path.join(TEST_DATA, "nuget_api", "index.json")) as f: + with open(os.path.join(TEST_DATA, 'nuget_api', 'index.json')) as f: cls.response = json.load(f) cls.expected_versions = { - "0.23.0", - "0.24.0", - "1.0.0", - "1.0.1", - "1.0.2", - "2.0.0", - "2.0.0-preview01", - "2.6.0", - "2.1.0", - "2.2.0", - "2.3.0", - "2.4.0", - "2.5.0", - "2.7.0", + '0.23.0', + '0.24.0', + '1.0.0', + '1.0.1', + '1.0.2', + '2.0.0', + '2.0.0-preview01', + '2.6.0', + '2.1.0', + '2.2.0', + '2.3.0', + '2.4.0', + '2.5.0', + '2.7.0', } def test_nuget_url(self): expected_url = ( - "https://api.nuget.org/v3/registration5-semver1/exfat.ntfs/index.json" + 'https://api.nuget.org/v3/registration5-semver1/exfat.ntfs/index.json' ) - found_url = self.version_api.nuget_url("exfat.ntfs") + found_url = self.version_api.nuget_url('exfat.ntfs') assert expected_url == found_url def test_extract_versions(self): @@ -489,14 +489,14 @@ def test_extract_versions(self): def test_load_to_api(self): - assert self.version_api.get("exfat.ntfs") == set() + assert self.version_api.get('exfat.ntfs') == set() mock_response = MagicMock() mock_response.json = lambda: self.response with patch( - "vulnerabilities.importers.github.requests.get", return_value=mock_response + 'vulnerabilities.importers.github.requests.get', return_value=mock_response ): - self.version_api.load_to_api("Exfat.Ntfs") + self.version_api.load_to_api('Exfat.Ntfs') - assert self.version_api.get("exfat.ntfs") == self.expected_versions + assert self.version_api.get('exfat.ntfs') == self.expected_versions From 16371fad76b17a3de319ca2238f0bfbfa855eb5c Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Wed, 17 Jun 2020 16:19:20 +0530 Subject: [PATCH 7/8] Make more style corrections in GitHubAPI importer Signed-off-by: Shivam Sandbhor --- vulnerabilities/importers/github.py | 144 +++++++++++---------------- vulnerabilities/tests/test_github.py | 2 +- 2 files changed, 61 insertions(+), 85 deletions(-) diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index 7c54727c2..775096f9e 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# Copyright (c) nexB Inc. and others. All rights reserved. # http://nexb.com and https://github.com/nexB/vulnerablecode/ # The VulnerableCode software is licensed under the Apache License version 2.0. # Data generated with VulnerableCode require an acknowledgment. @@ -44,8 +44,8 @@ # second '%s' is interesting, it will have the value '' for the first request, # since we don't have any value for endCursor at the beginning # for all the subsequent requests it will have value 'after: "{endCursor}"" -query = ''' - query MyQuery { +query = """ + query{ securityVulnerabilities(first: 100, ecosystem: %s, %s) { edges { node { @@ -68,7 +68,7 @@ } } } - ''' + """ class GitHubTokenError(Exception): @@ -88,9 +88,9 @@ class GitHubAPIDataSource(DataSource): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) try: - self.gh_token = os.environ['GH_TOKEN'] + self.gh_token = os.environ["GH_TOKEN"] except KeyError: - raise GitHubTokenError('Envirnomental variable GH_TOKEN is missing') + raise GitHubTokenError("Envirnomental variable GH_TOKEN is missing") def __enter__(self): self.advisories = self.fetch() @@ -99,66 +99,53 @@ def updated_advisories(self) -> Set[Advisory]: return self.batch_advisories(self.process_response()) def fetch(self) -> Mapping[str, List[Mapping]]: - - headers = {'Authorization': 'token ' + self.gh_token} + headers = {"Authorization": "token " + self.gh_token} api_data = {} for ecosystem in self.config.ecosystems: api_data[ecosystem] = [] - end_cursor_exp = '' + end_cursor_exp = "" while True: - query_json = {'query': query % (ecosystem, end_cursor_exp)} - resp = requests.post( - self.config.endpoint, headers=headers, json=query_json - ).json() + query_json = {"query": query % (ecosystem, end_cursor_exp)} + resp = requests.post(self.config.endpoint, headers=headers, json=query_json).json() - if resp.get('message') == 'Bad credentials': - raise GitHubTokenError('Invalid GitHub token') + if resp.get("message") == "Bad credentials": + raise GitHubTokenError("Invalid GitHub token") - end_cursor = resp['data']['securityVulnerabilities']['pageInfo'][ - 'endCursor' - ] - end_cursor_exp = 'after: {}'.format('"{}"'.format(end_cursor)) + end_cursor = resp["data"]["securityVulnerabilities"]["pageInfo"]["endCursor"] + end_cursor_exp = "after: {}".format('"{}"'.format(end_cursor)) api_data[ecosystem].append(resp) - print(resp) - if not resp['data']['securityVulnerabilities']['pageInfo'][ - 'hasNextPage' - ]: + if not resp["data"]["securityVulnerabilities"]["pageInfo"]["hasNextPage"]: break return api_data def set_version_api(self, ecosystem: str) -> None: - - if ecosystem == 'MAVEN': - self.version_api = MavenVersionAPI() - - elif ecosystem == 'NUGET': - self.version_api = NugetVersionAPI() - - elif ecosystem == 'COMPOSER': - self.version_api = ComposerVersionAPI() + versioners = { + "MAVEN": MavenVersionAPI, + "NUGET": NugetVersionAPI, + "COMPOSER": ComposerVersionAPI, + } + versioner = versioners.get(ecosystem) + if versioner: + self.version_api = versioner() @staticmethod - def process_name( - ecosystem: str, pkg_name: str - ) -> Optional[Tuple[Optional[str], str]]: - - if ecosystem == 'MAVEN': - - artifact_comps = pkg_name.split(':') + def process_name(ecosystem: str, pkg_name: str) -> Optional[Tuple[Optional[str], str]]: + if ecosystem == "MAVEN": + artifact_comps = pkg_name.split(":") if len(artifact_comps) != 2: return ns, name = artifact_comps return ns, name - if ecosystem == 'NUGET': + if ecosystem == "NUGET": return None, pkg_name - if ecosystem == 'COMPOSER': - vendor, name = pkg_name.split('/') + if ecosystem == "COMPOSER": + vendor, name = pkg_name.split("/") return vendor, name def process_response(self) -> List[Advisory]: @@ -167,42 +154,38 @@ def process_response(self) -> List[Advisory]: self.set_version_api(ecosystem) pkg_type = ecosystem.lower() for resp_page in self.advisories[ecosystem]: - for adv in resp_page['data']['securityVulnerabilities']['edges']: - name = adv['node']['package']['name'] + for adv in resp_page["data"]["securityVulnerabilities"]["edges"]: + name = adv["node"]["package"]["name"] if self.process_name(ecosystem, name): ns, pkg_name = self.process_name(ecosystem, name) else: continue - aff_range = adv['node']['vulnerableVersionRange'] + aff_range = adv["node"]["vulnerableVersionRange"] self.version_api.load_to_api(name) aff_vers, unaff_vers = self.categorize_versions( aff_range, self.version_api.get(name) ) affected_purls = { - PackageURL( - name=pkg_name, namespace=ns, version=version, type=pkg_type - ) + PackageURL(name=pkg_name, namespace=ns, version=version, type=pkg_type) for version in aff_vers } unaffected_purls = { - PackageURL( - name=pkg_name, namespace=ns, version=version, type=pkg_type - ) + PackageURL(name=pkg_name, namespace=ns, version=version, type=pkg_type) for version in unaff_vers } cve_ids = set() ref_ids = set() - vuln_desc = adv['node']['advisory']['summary'] + vuln_desc = adv["node"]["advisory"]["summary"] - for vuln in adv['node']['advisory']['identifiers']: - if vuln['type'] == 'CVE': - cve_ids.add(vuln['value']) + for vuln in adv["node"]["advisory"]["identifiers"]: + if vuln["type"] == "CVE": + cve_ids.add(vuln["value"]) else: - ref_ids.add(vuln['value']) + ref_ids.add(vuln["value"]) for cve_id in cve_ids: adv_list.append( Advisory( @@ -216,13 +199,9 @@ def process_response(self) -> List[Advisory]: return adv_list @staticmethod - def categorize_versions( - version_range: str, all_versions: Set[str] - ) -> Tuple[Set[str], Set[str]]: + def categorize_versions(version_range: str, all_versions: Set[str]) -> Tuple[Set[str], Set[str]]: # nopep8 version_range = RangeSpecifier(version_range) - affected_versions = { - version for version in all_versions if version in version_range - } + affected_versions = {version for version in all_versions if version in version_range} return (affected_versions, all_versions - affected_versions) @@ -234,39 +213,34 @@ def get(self, pkg_name: str) -> Set[str]: return self.cache.get(pkg_name, set()) def load_to_api(self, pkg_name: str) -> None: - if pkg_name in self.cache: return - artifact_comps = pkg_name.split(':') + artifact_comps = pkg_name.split(":") endpoint = self.artifact_url(artifact_comps) resp = requests.get(endpoint).content try: - - xml_resp = ET.ElementTree(ET.fromstring(resp.decode('utf-8'))) + xml_resp = ET.ElementTree(ET.fromstring(resp.decode("utf-8"))) self.cache[pkg_name] = self.extract_versions(xml_resp) - except ET.ParseError: self.cache[pkg_name] = set() @staticmethod def artifact_url(artifact_comps: List[str]) -> str: - - base_url = 'https://repo.maven.apache.org/maven2/{}' + base_url = "https://repo.maven.apache.org/maven2/{}" group_id, artifact_id = artifact_comps - group_url = group_id.replace('.', '/') - suffix = group_url + '/' + artifact_id + '/' + 'maven-metadata.xml' + group_url = group_id.replace(".", "/") + suffix = group_url + "/" + artifact_id + "/" + "maven-metadata.xml" endpoint = base_url.format(suffix) return endpoint @staticmethod def extract_versions(xml_response: ET.ElementTree) -> Set[str]: - all_versions = set() for child in xml_response.getroot().iter(): - if child.tag == 'version': + if child.tag == "version": all_versions.add(child.text) return all_versions @@ -295,18 +269,19 @@ def load_to_api(self, pkg_name: str) -> None: @staticmethod def nuget_url(pkg_name: str) -> str: - base_url = 'https://api.nuget.org/v3/registration5-semver1/{}/index.json' + base_url = "https://api.nuget.org/v3/registration5-semver1/{}/index.json" return base_url.format(pkg_name.lower()) @staticmethod - def extract_versions(json_resp: dict) -> Set[str]: + def extract_versions(resp: dict) -> Set[str]: all_versions = set() + try: - for entry in json_resp['items'][0]['items']: - all_versions.add(entry['catalogEntry']['version']) + for entry in resp["items"][0]["items"]: + all_versions.add(entry["catalogEntry"]["version"]) # json response for YamlDotNet.Signed triggers this exception except KeyError: - return all_versions + pass return all_versions @@ -321,22 +296,23 @@ def get(self, pkg_name: str) -> Set[str]: def load_to_api(self, pkg_name: str) -> None: if pkg_name in self.cache: return + endpoint = self.composer_url(pkg_name) json_resp = requests.get(endpoint).json() self.cache[pkg_name] = self.extract_versions(json_resp, pkg_name) @staticmethod def composer_url(pkg_name: str) -> str: - vendor, name = pkg_name.split('/') - return f'https://repo.packagist.org/p/{vendor}/{name}.json' + vendor, name = pkg_name.split("/") + return f"https://repo.packagist.org/p/{vendor}/{name}.json" @staticmethod - def extract_versions(json_resp: dict, pkg_name: str) -> Set[str]: - all_versions = json_resp['packages'][pkg_name].keys() + def extract_versions(resp: dict, pkg_name: str) -> Set[str]: + all_versions = resp["packages"][pkg_name].keys() # This filter ensures, that all_versions contains only released versions - all_versions = set(filter(lambda x: 'dev' not in x, all_versions)) + all_versions = set(filter(lambda x: "dev" not in x, all_versions)) # See https://github.com/composer/composer/blob/44a4429978d1b3c6223277b875762b2930e83e8c/doc/articles/versions.md#tags # nopep8 # for explanation of removing 'v' - all_versions = set(map(lambda x: x.replace('v', ''), all_versions)) + all_versions = set(map(lambda x: x.replace("v", ""), all_versions)) return all_versions diff --git a/vulnerabilities/tests/test_github.py b/vulnerabilities/tests/test_github.py index b2641ad25..eb65c359d 100644 --- a/vulnerabilities/tests/test_github.py +++ b/vulnerabilities/tests/test_github.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 nexB Inc. and others. All rights reserved. +# Copyright (c) nexB Inc. and others. All rights reserved. # http://nexb.com and https://github.com/nexB/vulnerablecode/ # The VulnerableCode software is licensed under the Apache License version 2.0. # Data generated with VulnerableCode require an acknowledgment. From fe442bf6c1851a23a066b5d03457be77ee773a54 Mon Sep 17 00:00:00 2001 From: Shivam Sandbhor Date: Wed, 22 Jul 2020 17:00:13 +0530 Subject: [PATCH 8/8] Refactor migrations for github api importer Github API importer was made pre importer_yielder.py era. This commit adds the seed data to importer_yielder.py Signed-off-by: Shivam Sandbhor --- vulnerabilities/importer_yielder.py | 11 ++++ vulnerabilities/importers/github.py | 4 +- .../migrations/0017_github_importer.py | 55 ------------------- 3 files changed, 13 insertions(+), 57 deletions(-) delete mode 100644 vulnerabilities/migrations/0017_github_importer.py diff --git a/vulnerabilities/importer_yielder.py b/vulnerabilities/importer_yielder.py index 2b91947ec..8fabb36fa 100644 --- a/vulnerabilities/importer_yielder.py +++ b/vulnerabilities/importer_yielder.py @@ -157,6 +157,17 @@ 'etags': {}, 'db_url': 'https://usn.ubuntu.com/usn-db/database-all.json.bz2' }, + }, + + { + 'name': 'github', + 'license': '', + 'last_run': None, + 'data_source': 'GitHubAPIDataSource', + 'data_source_cfg': { + 'endpoint': 'https://api.github.com/graphql', + 'ecosystems': ['MAVEN', 'NUGET', 'COMPOSER'] + } } ] diff --git a/vulnerabilities/importers/github.py b/vulnerabilities/importers/github.py index 775096f9e..5a8042cc2 100644 --- a/vulnerabilities/importers/github.py +++ b/vulnerabilities/importers/github.py @@ -90,7 +90,7 @@ def __init__(self, *args, **kwargs): try: self.gh_token = os.environ["GH_TOKEN"] except KeyError: - raise GitHubTokenError("Envirnomental variable GH_TOKEN is missing") + raise GitHubTokenError("Environment variable GH_TOKEN is missing") def __enter__(self): self.advisories = self.fetch() @@ -110,7 +110,7 @@ def fetch(self) -> Mapping[str, List[Mapping]]: query_json = {"query": query % (ecosystem, end_cursor_exp)} resp = requests.post(self.config.endpoint, headers=headers, json=query_json).json() - + print(resp) if resp.get("message") == "Bad credentials": raise GitHubTokenError("Invalid GitHub token") diff --git a/vulnerabilities/migrations/0017_github_importer.py b/vulnerabilities/migrations/0017_github_importer.py deleted file mode 100644 index 46b639b17..000000000 --- a/vulnerabilities/migrations/0017_github_importer.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2017 nexB Inc. and others. All rights reserved. -# http://nexb.com and https://github.com/nexB/vulnerablecode/ -# The VulnerableCode software is licensed under the Apache License version 2.0. -# Data generated with VulnerableCode require an acknowledgment. -# -# You may not use this software except in compliance with the License. -# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, software distributed -# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR -# CONDITIONS OF ANY KIND, either express or implied. See the License for the -# specific language governing permissions and limitations under the License. -# -# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode -# derivative work, you must accompany this data with the following acknowledgment: -# -# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. No content created from -# VulnerableCode should be considered or used as legal advice. Consult an Attorney -# for any legal advice. -# VulnerableCode is a free software code scanning tool from nexB Inc. and others. -# Visit https://github.com/nexB/vulnerablecode/ for support and download. - -from django.db import migrations - - -def add_github_importer(apps, _): - Importer = apps.get_model('vulnerabilities', 'Importer') - - Importer.objects.create( - name='github', - license='', - last_run=None, - data_source='GitHubAPIDataSource', - data_source_cfg={'endpoint':'https://api.github.com/graphql', - 'ecosystems':['MAVEN','NUGET','COMPOSER'] -}, - ) - - -def remove_github_importer(apps, _): - Importer = apps.get_model('vulnerabilities', 'Importer') - qs = Importer.objects.filter(name='github') - if qs: - qs[0].delete() - - -class Migration(migrations.Migration): - - dependencies = [ - ('vulnerabilities', '0016_ubuntu_usn_importer'), - ] - - operations = [ - migrations.RunPython(add_github_importer, remove_github_importer), - ] \ No newline at end of file