pre commit
This commit is contained in:
parent
516af8a39b
commit
b5da2d35c5
|
@ -974,7 +974,6 @@ paths:
|
|||
schema:
|
||||
$ref: "#/components/schemas/ProcessInstanceLog"
|
||||
|
||||
|
||||
/secrets:
|
||||
post:
|
||||
operationId: spiffworkflow_backend.routes.process_api_blueprint.add_secret
|
||||
|
|
|
@ -17,9 +17,6 @@ from spiffworkflow_backend.models.message_instance import (
|
|||
MessageInstanceModel,
|
||||
) # noqa: F401
|
||||
from spiffworkflow_backend.models.message_model import MessageModel # noqa: F401
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
||||
from spiffworkflow_backend.models.message_triggerable_process_model import (
|
||||
MessageTriggerableProcessModel,
|
||||
) # noqa: F401
|
||||
|
@ -30,6 +27,11 @@ from spiffworkflow_backend.models.process_instance import (
|
|||
from spiffworkflow_backend.models.process_instance_report import (
|
||||
ProcessInstanceReportModel,
|
||||
) # noqa: F401
|
||||
from spiffworkflow_backend.models.secret_model import (
|
||||
SecretAllowedProcessPathModel,
|
||||
) # noqa: F401
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel # noqa: F401
|
||||
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel # noqa: F401
|
||||
from spiffworkflow_backend.models.task_event import TaskEventModel # noqa: F401
|
||||
from spiffworkflow_backend.models.user import UserModel # noqa: F401
|
||||
from spiffworkflow_backend.models.user_group_assignment import (
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
"""Secret_model."""
|
||||
from flask_bpmn.models.db import db
|
||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||
from spiffworkflow_backend.models.user import UserModel
|
||||
|
||||
from marshmallow import Schema
|
||||
from sqlalchemy import ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import RelationshipProperty
|
||||
|
||||
from spiffworkflow_backend.models.user import UserModel
|
||||
|
||||
|
||||
class SecretModel(SpiffworkflowBaseDBModel):
|
||||
"""SecretModel."""
|
||||
|
||||
__tablename__ = "secret"
|
||||
id: int = db.Column(db.Integer, primary_key=True)
|
||||
|
@ -25,12 +25,11 @@ class SecretModel(SpiffworkflowBaseDBModel):
|
|||
|
||||
class SecretAllowedProcessPathModel(SpiffworkflowBaseDBModel):
|
||||
"""Allowed processes can be Process Groups or Process Models.
|
||||
We store the path in either case.
|
||||
"""
|
||||
|
||||
We store the path in either case.
|
||||
"""
|
||||
|
||||
__tablename__ = "secret_allowed_process"
|
||||
id: int = db.Column(db.Integer, primary_key=True)
|
||||
secret_id: int = db.Column(ForeignKey(SecretModel.id), nullable=False)
|
||||
allowed_relative_path: str = db.Column(db.String(500), nullable=False, index=True)
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ from flask_bpmn.api.api_error import ApiError
|
|||
from flask_bpmn.models.db import db
|
||||
from SpiffWorkflow import Task as SpiffTask # type: ignore
|
||||
from SpiffWorkflow import TaskState
|
||||
from spiffworkflow_backend.services.secret_service import SecretService
|
||||
from sqlalchemy import desc
|
||||
|
||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||
|
@ -28,7 +27,6 @@ from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
|||
)
|
||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||
from spiffworkflow_backend.models.file import FileSchema
|
||||
from spiffworkflow_backend.models.file import FileType
|
||||
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
||||
from spiffworkflow_backend.models.message_model import MessageModel
|
||||
from spiffworkflow_backend.models.message_triggerable_process_model import (
|
||||
|
@ -55,6 +53,7 @@ from spiffworkflow_backend.services.process_instance_service import (
|
|||
ProcessInstanceService,
|
||||
)
|
||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||
from spiffworkflow_backend.services.secret_service import SecretService
|
||||
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
||||
|
||||
process_api_blueprint = Blueprint("process_api", __name__)
|
||||
|
@ -280,7 +279,6 @@ def process_model_file_delete(
|
|||
|
||||
def add_file(process_group_id: str, process_model_id: str) -> flask.wrappers.Response:
|
||||
"""Add_file."""
|
||||
process_model_service = ProcessModelService()
|
||||
process_model = get_process_model(process_model_id, process_group_id)
|
||||
request_file = get_file_from_request()
|
||||
if not request_file.filename:
|
||||
|
@ -1031,22 +1029,39 @@ def get_spiff_task_from_process_instance(
|
|||
# Methods for secrets CRUD - maybe move somewhere else:
|
||||
#
|
||||
def get_secret(service: str, client: str) -> str:
|
||||
"""Get_secret."""
|
||||
secret = SecretService.get_secret(service, client)
|
||||
if secret:
|
||||
return secret
|
||||
|
||||
|
||||
def add_secret(service: str, client: str, secret: str, creator_user_id: int = None, allowed_process: str = None):
|
||||
def add_secret(
|
||||
service: str,
|
||||
client: str,
|
||||
secret: str,
|
||||
creator_user_id: int = None,
|
||||
allowed_process: str = None,
|
||||
):
|
||||
"""Add secret."""
|
||||
...
|
||||
|
||||
|
||||
def update_secret(service: str, client: str, secret: str = None, creator_user_id: int = None, allowed_process: str = None):
|
||||
def update_secret(
|
||||
service: str,
|
||||
client: str,
|
||||
secret: str = None,
|
||||
creator_user_id: int = None,
|
||||
allowed_process: str = None,
|
||||
):
|
||||
"""Update secret."""
|
||||
...
|
||||
|
||||
|
||||
def delete_secret(service: str, client: str):
|
||||
"""Delete secret."""
|
||||
...
|
||||
|
||||
|
||||
def get_allowed_process_paths(service: str, client: str):
|
||||
"""Get allowed process paths."""
|
||||
...
|
||||
|
|
|
@ -1,46 +1,77 @@
|
|||
"""Secret_service."""
|
||||
from flask_bpmn.api.api_error import ApiError
|
||||
from flask_bpmn.models.db import db
|
||||
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel, SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||
|
||||
|
||||
class SecretService:
|
||||
"""SecretService."""
|
||||
|
||||
def add_secret(self, service: str, client: str, key: str, creator_user_id: int = None, allowed_process: str = None):
|
||||
secret_model = SecretModel(service=service, client=client, key=key, creator_user_id=creator_user_id)
|
||||
@staticmethod
|
||||
def add_secret(
|
||||
service: str,
|
||||
client: str,
|
||||
key: str,
|
||||
creator_user_id: int = None,
|
||||
allowed_process: str = None,
|
||||
):
|
||||
"""Add_secret."""
|
||||
secret_model = SecretModel(
|
||||
service=service, client=client, key=key, creator_user_id=creator_user_id
|
||||
)
|
||||
db.session.add(secret_model)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
raise ApiError(code='create_secret_failed',
|
||||
message=f"Cannot create secret for service: {service} and client: {client}. Original error is {e}")
|
||||
raise ApiError(
|
||||
code="create_secret_failed",
|
||||
message=f"Cannot create secret for service: {service} and client: {client}. Original error is {e}",
|
||||
) from e
|
||||
return secret_model
|
||||
|
||||
@staticmethod
|
||||
def get_secret(service: str, client: str) -> str:
|
||||
secret = db.session.query(SecretModel.key).\
|
||||
filter(SecretModel.service == service).\
|
||||
filter(SecretModel.client == client).\
|
||||
scalar()
|
||||
"""Get_secret."""
|
||||
secret = (
|
||||
db.session.query(SecretModel.key)
|
||||
.filter(SecretModel.service == service)
|
||||
.filter(SecretModel.client == client)
|
||||
.scalar()
|
||||
)
|
||||
if secret:
|
||||
return secret
|
||||
|
||||
def add_allowed_process(self, secret_id: int, allowed_relative_path: str):
|
||||
secret_process_model = SecretAllowedProcessPathModel(secret_id=secret_id,
|
||||
allowed_relative_path=allowed_relative_path)
|
||||
@staticmethod
|
||||
def add_allowed_process(secret_id: int, allowed_relative_path: str):
|
||||
"""Add_allowed_process."""
|
||||
secret_process_model = SecretAllowedProcessPathModel(
|
||||
secret_id=secret_id, allowed_relative_path=allowed_relative_path
|
||||
)
|
||||
db.session.add(secret_process_model)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
raise ApiError(code='create_allowed_process_failure',
|
||||
message=f"Count not create an allowed process for for secret: {secret_id} "
|
||||
f"with path: {allowed_relative_path}. "
|
||||
f"Original error is {e}")
|
||||
raise ApiError(
|
||||
code="create_allowed_process_failure",
|
||||
message=f"Count not create an allowed process for for secret: {secret_id} "
|
||||
f"with path: {allowed_relative_path}. "
|
||||
f"Original error is {e}",
|
||||
) from e
|
||||
return secret_process_model
|
||||
|
||||
def update_secret(self, service: str, client: str, secret: str = None, creator_user_id: int = None, allowed_process: str = None):
|
||||
def update_secret(
|
||||
self,
|
||||
service: str,
|
||||
client: str,
|
||||
secret: str = None,
|
||||
creator_user_id: int = None,
|
||||
allowed_process: str = None,
|
||||
):
|
||||
"""Does this pass pre commit?"""
|
||||
...
|
||||
|
||||
def delete_secret(self, service: str, client: str):
|
||||
"""Delete secret."""
|
||||
...
|
||||
|
||||
|
|
|
@ -1,23 +1,29 @@
|
|||
"""Test_secret_service."""
|
||||
from flask.app import Flask
|
||||
from flask.testing import FlaskClient
|
||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel, SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||
from spiffworkflow_backend.services.secret_service import SecretService
|
||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||
|
||||
|
||||
class TestSecretService(BaseTest):
|
||||
"""TestSecretService."""
|
||||
|
||||
test_service = 'test_service'
|
||||
test_client = 'test_client'
|
||||
test_key = '1234567890'
|
||||
test_service = "test_service"
|
||||
test_client = "test_client"
|
||||
test_key = "1234567890"
|
||||
|
||||
def add_test_secret(self, user):
|
||||
return SecretService().add_secret(self.test_service, self.test_client, self.test_key, user.id)
|
||||
"""Add_test_secret."""
|
||||
return SecretService().add_secret(
|
||||
self.test_service, self.test_client, self.test_key, user.id
|
||||
)
|
||||
|
||||
def test_add_secret(self, app: Flask, with_db_and_bpmn_file_cleanup: None):
|
||||
"""Test_add_secret."""
|
||||
user = self.find_or_create_user()
|
||||
test_secret = self.add_test_secret(user)
|
||||
|
||||
|
@ -28,6 +34,7 @@ class TestSecretService(BaseTest):
|
|||
assert test_secret.creator_user_id == user.id
|
||||
|
||||
def test_get_secret(self, app: Flask, with_db_and_bpmn_file_cleanup: None):
|
||||
"""Test_get_secret."""
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
|
@ -35,21 +42,30 @@ class TestSecretService(BaseTest):
|
|||
assert secret is not None
|
||||
assert secret == self.test_key
|
||||
|
||||
def test_get_secret_bad_service(self, app: Flask, with_db_and_bpmn_file_cleanup: None):
|
||||
def test_get_secret_bad_service(
|
||||
self, app: Flask, with_db_and_bpmn_file_cleanup: None
|
||||
):
|
||||
"""Test_get_secret_bad_service."""
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
bad_secret = SecretService().get_secret('bad_service', self.test_client)
|
||||
bad_secret = SecretService().get_secret("bad_service", self.test_client)
|
||||
assert bad_secret is None
|
||||
|
||||
def test_get_secret_bad_client(self, app: Flask, with_db_and_bpmn_file_cleanup: None):
|
||||
def test_get_secret_bad_client(
|
||||
self, app: Flask, with_db_and_bpmn_file_cleanup: None
|
||||
):
|
||||
"""Test_get_secret_bad_client."""
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
bad_secret = SecretService().get_secret(self.test_service, 'bad_client')
|
||||
bad_secret = SecretService().get_secret(self.test_service, "bad_client")
|
||||
assert bad_secret is None
|
||||
|
||||
def test_secret_add_allowed_process(self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None):
|
||||
def test_secret_add_allowed_process(
|
||||
self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
):
|
||||
"""Test_secret_add_allowed_process."""
|
||||
process_group_id = "test"
|
||||
process_group_display_name = "My Test Process Group"
|
||||
|
||||
|
@ -69,22 +85,31 @@ class TestSecretService(BaseTest):
|
|||
process_model_description=process_model_description,
|
||||
)
|
||||
|
||||
process_model_info = ProcessModelService().get_process_model(process_model_id, process_group_id)
|
||||
process_model_relative_path = FileSystemService.process_model_relative_path(process_model_info)
|
||||
process_model_info = ProcessModelService().get_process_model(
|
||||
process_model_id, process_group_id
|
||||
)
|
||||
process_model_relative_path = FileSystemService.process_model_relative_path(
|
||||
process_model_info
|
||||
)
|
||||
|
||||
test_secret = self.add_test_secret(user)
|
||||
allowed_process_model = SecretService().add_allowed_process(secret_id=test_secret.id,
|
||||
allowed_relative_path=process_model_relative_path)
|
||||
allowed_process_model = SecretService().add_allowed_process(
|
||||
secret_id=test_secret.id, allowed_relative_path=process_model_relative_path
|
||||
)
|
||||
assert allowed_process_model is not None
|
||||
assert isinstance(allowed_process_model, SecretAllowedProcessPathModel)
|
||||
assert allowed_process_model.secret_id == test_secret.id
|
||||
assert allowed_process_model.allowed_relative_path == process_model_relative_path
|
||||
assert (
|
||||
allowed_process_model.allowed_relative_path == process_model_relative_path
|
||||
)
|
||||
|
||||
assert len(test_secret.allowed_processes) == 1
|
||||
assert test_secret.allowed_processes[0] == allowed_process_model
|
||||
|
||||
def test_update_secret(self):
|
||||
"""Test update secret."""
|
||||
...
|
||||
|
||||
def test_delete_secret(self):
|
||||
"""Test delete secret."""
|
||||
...
|
||||
|
|
Loading…
Reference in New Issue