diff --git a/env_secrets/prod-azure.json b/env_secrets/prod-azure.json index edb6cff1..f99f83cc 100644 Binary files a/env_secrets/prod-azure.json and b/env_secrets/prod-azure.json differ diff --git a/server/config/settings/base.py b/server/config/settings/base.py index a94b145c..fd947667 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -685,9 +685,9 @@ else: # default settings for python sftpserver test-server ABACUS_EXPORT_SFTP_HOST = env("ABACUS_EXPORT_SFTP_HOST", default="localhost") +ABACUS_EXPORT_SFTP_PASSWORD = env("ABACUS_EXPORT_SFTP_PASSWORD", default="admin") ABACUS_EXPORT_SFTP_PORT = env("ABACUS_EXPORT_SFTP_PORT", default="3373") ABACUS_EXPORT_SFTP_USERNAME = env("ABACUS_EXPORT_SFTP_USERNAME", default="admin") -ABACUS_EXPORT_SFTP_PASSWORD = env("ABACUS_EXPORT_SFTP_PASSWORD", default="admin") # S3 BUCKET CONFIGURATION diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index 0f1371aa..688146b5 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -1,6 +1,7 @@ from datetime import datetime import djclick as click +from django.contrib.auth.hashers import make_password from django.utils import timezone from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion @@ -14,6 +15,7 @@ from vbv_lernwelt.core.constants import ( TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID, TEST_STUDENT3_USER_ID, TEST_TRAINER1_USER_ID, + TEST_USER_EMPTY_ID, ) from vbv_lernwelt.core.models import Organisation, User from vbv_lernwelt.course.consts import ( @@ -48,6 +50,7 @@ from vbv_lernwelt.self_evaluation_feedback.models import ( CourseCompletionFeedback, SelfEvaluationFeedback, ) +from vbv_lernwelt.shop.models import CheckoutInformation @click.command() @@ -142,6 +145,18 @@ def command( User.objects.all().update(language="de") User.objects.all().update(additional_json_data={}) + CheckoutInformation.objects.filter(user_id=TEST_USER_EMPTY_ID).delete() + User.objects.filter(id=TEST_USER_EMPTY_ID).delete() + user, _ = User.objects.get_or_create( + id=TEST_USER_EMPTY_ID, + username="empty@example.com", + email="empty@example.com", + language="de", + first_name="Flasche", + last_name="Leer", + password=make_password("test"), + ) + if create_assignment_completion or create_assignment_evaluation: print("create assignment completion data for test course") create_test_assignment_submitted_data( diff --git a/server/vbv_lernwelt/shop/datatrans_fake_server.py b/server/vbv_lernwelt/shop/datatrans_fake_server.py index 332ce09f..34fccb10 100644 --- a/server/vbv_lernwelt/shop/datatrans_fake_server.py +++ b/server/vbv_lernwelt/shop/datatrans_fake_server.py @@ -55,31 +55,87 @@ def fake_datatrans_pay_view(request, api_url=""): ) print(response) - if api_url.startswith("/v1/start/") and request.method == "GET": + if api_url.startswith("/v1/start/"): transaction_id = api_url.split("/")[-1] transaction_user = User.objects.filter( additional_json_data__datatrans_transaction_payload__refno=transaction_id ).first() - redirect_url = transaction_user.additional_json_data[ - "datatrans_transaction_payload" - ]["redirect"]["successUrl"] + if transaction_user is None: + return HttpResponse( + content=f""" +

Fake Datatrans Payment

+

No active transaction found for {transaction_id}

+ """, + status=404, + ) - # start new thread which will call webhook after 2 seconds - webhook_url = transaction_user.additional_json_data[ - "datatrans_transaction_payload" - ]["webhook"]["url"] - thread = threading.Thread( - target=call_transaction_complete_webhook, - args=( - webhook_url, - transaction_id, - ), - ) - thread.start() + if request.method == "GET": + return HttpResponse( + content=f""" +

Fake Datatrans Payment

+
+
+ Datatrans payment result status +
+ + - # redirect to url - return redirect(redirect_url + f"?datatransTrxId={transaction_id}") + + + + + +
+
+ +
+
+
+ """ + ) + + elif request.method == "POST": + payment_status = request.POST.get("payment", "settled") + + if payment_status == "settled": + success_url = transaction_user.additional_json_data[ + "datatrans_transaction_payload" + ]["redirect"]["successUrl"] + + # start new thread which will call webhook after 2 seconds + webhook_url = transaction_user.additional_json_data[ + "datatrans_transaction_payload" + ]["webhook"]["url"] + thread = threading.Thread( + target=call_transaction_complete_webhook, + args=( + webhook_url, + transaction_id, + ), + ) + thread.start() + + # redirect to url + return redirect(success_url + f"?datatransTrxId={transaction_id}") + + if payment_status == "cancelled": + cancel_url = transaction_user.additional_json_data[ + "datatrans_transaction_payload" + ]["redirect"]["cancelUrl"] + + # redirect to url + return redirect(cancel_url + f"?datatransTrxId={transaction_id}") + + if payment_status == "failed": + error_url = transaction_user.additional_json_data[ + "datatrans_transaction_payload" + ]["redirect"]["errorUrl"] + + # redirect to url + return redirect(error_url + f"?datatransTrxId={transaction_id}") return HttpResponse( content="unknown api url", content_type="application/json", status=400