diff --git a/fedcode/importer.py b/fedcode/importer.py index 7770d42..3a32a01 100644 --- a/fedcode/importer.py +++ b/fedcode/importer.py @@ -54,10 +54,10 @@ def run(self): if diff.a_path.startswith("."): continue - yaml_data_a_blob = ( + yaml_data_a_blob = dict( saneyaml.load(diff.a_blob.data_stream.read()) if diff.a_blob else None ) - yaml_data_b_blob = ( + yaml_data_b_blob = dict( saneyaml.load(diff.b_blob.data_stream.read()) if diff.b_blob else None ) @@ -113,7 +113,7 @@ def vul_handler(change_type, repo_obj, yaml_data_a_blob, yaml_data_b_blob, a_pat def pkg_handler(change_type, default_service, yaml_data_a_blob, yaml_data_b_blob): if change_type == "A": - package = yaml_data_b_blob.get("package") + package = yaml_data_b_blob.get("pacakge") pkg, _ = Package.objects.get_or_create(purl=package, service=default_service) diff --git a/fedcode/management/commands/federate.py b/fedcode/management/commands/federate.py new file mode 100644 index 0000000..ca5b77f --- /dev/null +++ b/fedcode/management/commands/federate.py @@ -0,0 +1,35 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# FederatedCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/federatedcode for support or download. +# See https://aboutcode.org for more information about AboutCode.org OSS projects. +# +from django.core.management import BaseCommand + +from fedcode.models import FederateRequest +from fedcode.signatures import FEDERATEDCODE_PRIVATE_KEY +from fedcode.signatures import HttpSignature + + +class Command(BaseCommand): + def handle(self, *args, **options): + """ + Federate Command is sending the http signed request to the target and save the status of the request + """ + + for rq in FederateRequest.objects.all().order_by("created_at"): + if rq.done: + continue + + try: + HttpSignature.signed_request( + rq.target, rq.body, FEDERATEDCODE_PRIVATE_KEY, rq.key_id + ) + rq.done = True + rq.save() + except Exception as e: + rq.error_message = e + finally: + rq.save() diff --git a/fedcode/management/commands/sync.py b/fedcode/management/commands/sync.py new file mode 100644 index 0000000..2c2a61e --- /dev/null +++ b/fedcode/management/commands/sync.py @@ -0,0 +1,33 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# FederatedCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/federatedcode for support or download. +# See https://aboutcode.org for more information about AboutCode.org OSS projects. +# +from django.core.management import BaseCommand + +from fedcode.importer import Importer +from fedcode.models import SyncRequest + + +class Command(BaseCommand): + def handle(self, *args, **options): + """ + The Sync Command is responsible for running the Importer and updating the status of pending sync requests. + """ + for sync_r in SyncRequest.objects.all().order_by("created_at"): + if sync_r.done: + continue + + try: + repo = sync_r.repo + repo.git_repo_obj.remotes.origin.pull() + importer = Importer(repo, repo.admin) + importer.run() + sync_r.done = True + except Exception as e: + sync_r.error_message = e + finally: + sync_r.save() diff --git a/fedcode/management/commands/tasks.py b/fedcode/management/commands/tasks.py deleted file mode 100644 index 0c5dc13..0000000 --- a/fedcode/management/commands/tasks.py +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) nexB Inc. and others. All rights reserved. -# FederatedCode is a trademark of nexB Inc. -# SPDX-License-Identifier: Apache-2.0 -# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. -# See https://github.com/nexB/federatedcode for support or download. -# See https://aboutcode.org for more information about AboutCode.org OSS projects. -# -from django.core.management.base import BaseCommand -from django.core.management.base import CommandError - -from fedcode.importer import Importer -from fedcode.models import FederateRequest -from fedcode.models import SyncRequest -from fedcode.signatures import FEDERATEDCODE_PRIVATE_KEY -from fedcode.signatures import HttpSignature - - -def sync_task(): - """ - sync_task is a task to run the Importer and save the status - """ - for sync_r in SyncRequest.objects.all().order_by("created_at"): - if not sync_r.done: - try: - repo = sync_r.repo - repo.git_repo_obj.remotes.origin.pull() - importer = Importer(repo, repo.admin) - importer.run() - sync_r.done = True - except Exception as e: - sync_r.error_message = e - finally: - sync_r.save() - - -def send_fed_req_task(): - """ - send_fed_req_task is a task to send the http signed request to the target and save the status of the request - """ - for rq in FederateRequest.objects.all().order_by("created_at"): - if not rq.done: - try: - HttpSignature.signed_request( - rq.target, rq.body, FEDERATEDCODE_PRIVATE_KEY, rq.key_id - ) - rq.done = True - rq.save() - except Exception as e: - rq.error_message = e - finally: - rq.save() - - -class Command(BaseCommand): - def add_arguments(self, parser): - parser.add_argument("task", choices=["sync", "federate"]) - - def handle(self, *args, **options): - if options["task"] == "sync": - sync_task() - elif options["task"] == "federate": - send_fed_req_task() diff --git a/federatedcode/urls.py b/federatedcode/urls.py index 97d4d3a..a059387 100644 --- a/federatedcode/urls.py +++ b/federatedcode/urls.py @@ -82,7 +82,7 @@ redirect_vulnerability, name="vulnerability-page", ), - path("notes/", NoteView.as_view(), name="note-page"), + path("notes/", NoteView.as_view(), name="note-page"), path("api/v0/users/@", UserProfile.as_view(), name="user-ap-profile"), path( "api/v0/purls/@/",