Skip to content

Commit

Permalink
LITE-28161 Add user id and name to Configuration events
Browse files Browse the repository at this point in the history
  • Loading branch information
Hairash committed Jul 23, 2023
1 parent 3725d30 commit 5bfb3f4
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 14 deletions.
4 changes: 2 additions & 2 deletions connect_ext_ppr/models/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ class Configuration(Model):
default=ConfigurationStateChoices.INACTIVE,
)
created_at = db.Column(db.DateTime(), default=datetime.utcnow)
created_by = db.Column(db.String(20))
created_by = db.Column(db.JSON)
updated_at = db.Column(db.DateTime(), default=datetime.utcnow)
updated_by = db.Column(db.String(20))
updated_by = db.Column(db.JSON)

def activate(self):
self.state = ConfigurationStateChoices.ACTIVE
Expand Down
2 changes: 1 addition & 1 deletion connect_ext_ppr/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class ConfigurationSchema(NonNullSchema):
id: str
file: FileSchema
state: ConfigurationStateChoices
events: Dict[str, Dict[str, Union[datetime, str]]]
events: Dict[str, Dict[str, Union[datetime, Dict[str, str]]]]


class ConfigurationReferenceSchema(NonNullSchema):
Expand Down
20 changes: 18 additions & 2 deletions connect_ext_ppr/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from connect.eaas.core.logging import RequestLogger
from fastapi import status
from jsonschema.exceptions import _Error
import jwt
import pandas as pd

from connect_ext_ppr.errors import ExtensionHttpError
Expand Down Expand Up @@ -224,8 +225,14 @@ def get_configuration_schema(configuration, file):
file=file_schema,
state=configuration.state,
events={
'created': {'at': configuration.created_at},
'updated': {'at': configuration.updated_at},
'created': {
'at': configuration.created_at,
'by': configuration.created_by,
},
'updated': {
'at': configuration.updated_at,
'by': configuration.updated_by,
},
},
)

Expand Down Expand Up @@ -279,3 +286,12 @@ def _parse_json_schema_error(ex: _Error):
sub_list = _parse_json_schema_error(sub_ex)
error_list.extend(sub_list)
return error_list


def get_user_data_from_auth_token(token):
payload = jwt.decode(token, options={"verify_signature": False})

return {
'id': payload['u']['oid'],
'name': payload['u']['name'],
}
11 changes: 8 additions & 3 deletions connect_ext_ppr/webapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
)
from connect.eaas.core.inject.synchronous import get_installation, get_installation_client
from connect.eaas.core.extension import WebApplicationBase
from fastapi import Depends, Response, status
from fastapi import Depends, Request, Response, status
from sqlalchemy import exists
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import joinedload
Expand Down Expand Up @@ -44,6 +44,7 @@
get_deployment_request_schema,
get_deployment_schema,
get_hubs,
get_user_data_from_auth_token,
)


Expand All @@ -61,7 +62,7 @@ class ConnectExtensionXvsWebApplication(WebApplicationBase):

@router.get(
'/deployments/requests',
summary='List all request accross deployments',
summary='List all requests across deployments',
response_model=List[DeploymentRequestSchema],
)
def list_deployment_requests(
Expand Down Expand Up @@ -220,6 +221,7 @@ def add_configuration(
deployment_id: str,
db: VerboseBaseSession = Depends(get_db),
installation: dict = Depends(get_installation),
request: Request = None,
):
get_deployment_by_id(deployment_id, db, installation)
file_data = configuration.file
Expand All @@ -238,7 +240,7 @@ def add_configuration(
mime_type=file_data.mime_type,
)
db.add(file_instance)
db.commit()
db.flush()

prev_configuration = (
db.query(Configuration)
Expand All @@ -251,10 +253,13 @@ def add_configuration(
if prev_configuration:
prev_configuration.state = ConfigurationStateChoices.INACTIVE

user_data = get_user_data_from_auth_token(request.headers['connect-auth'])
configuration_instance = Configuration(
file=file_data.id,
deployment=deployment_id,
state=ConfigurationStateChoices.ACTIVE,
created_by=user_data,
updated_by=user_data,
)
db.set_verbose(configuration_instance)
db.commit()
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ sqlalchemy = "^1.3.12"
psycopg2-binary = "^2.9.6"
pandas = "^2.0.3"
openpyxl = "^3.1.2"
PyJWT = "^2.8.0"

[tool.poetry.dev-dependencies]
pytest = ">=6.1.2,<8"
Expand Down
21 changes: 20 additions & 1 deletion tests/api/test_configurations.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ def test_post_configuration(
'mime_type': media_response['mime_type'],
},
},
headers={
"connect-auth": (
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1Ijp7Im9pZCI6IlNVLTI5NS02ODktN"
"jI4IiwibmFtZSI6Ik5lcmkifX0.U_T6vuXnD293hcWNTJZ9QBViteNv8JXUL2gM0BezQ-k"
),
},
)
assert response.status_code == 200
data = response.json()
Expand All @@ -123,8 +129,15 @@ def test_post_configuration(
'size': 17,
'mime_type': 'application/json',
}

assert data['state'] == ConfigurationStateChoices.ACTIVE
assert data['events']['created']['by'] == {
'id': 'SU-295-689-628',
'name': 'Neri',
}
assert data['events']['updated']['by'] == {
'id': 'SU-295-689-628',
'name': 'Neri',
}

assert dbsession.query(Configuration).count() == 1
assert dbsession.query(File).count() == 1
Expand All @@ -150,6 +163,12 @@ def test_post_configuration_deactivate_previous(
'mime_type': file.mime_type,
},
},
headers={
"connect-auth": (
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1Ijp7Im9pZCI6IlNVLTI5NS02ODktN"
"jI4IiwibmFtZSI6Ik5lcmkifX0.U_T6vuXnD293hcWNTJZ9QBViteNv8JXUL2gM0BezQ-k"
),
},
)
assert response.status_code == 200

Expand Down
12 changes: 11 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,10 +474,12 @@ def api_client(test_client_factory, dbsession):


@pytest.fixture
def configuration(dbsession, deployment, file):
def configuration(dbsession, deployment, file, user):
conf = Configuration(
file=file.id,
deployment=deployment.id,
created_by=user,
updated_by=user,
)
dbsession.set_verbose(conf)
dbsession.commit()
Expand Down Expand Up @@ -724,3 +726,11 @@ def task_logs_response():
'task_id': 106,
},
]


@pytest.fixture
def user():
return {
'id': 'SU-295-689-628',
'name': 'Neri',
}
14 changes: 10 additions & 4 deletions tests/test_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ def test_configuration_schema(state, file):
),
state=state,
events={
'created': {'at': now, 'by': 'SU-295-689-628'},
'updated': {'at': now, 'by': 'SU-295-689-628'},
'created': {'at': now, 'by': {'id': 'SU-295-689-628', 'name': 'Neri'}},
'updated': {'at': now, 'by': {'id': 'SU-295-689-628', 'name': 'Neri'}},
},
)
assert serializer.dict() == {
Expand All @@ -137,11 +137,17 @@ def test_configuration_schema(state, file):
"events": {
"created": {
"at": now,
"by": "SU-295-689-628",
"by": {
'id': 'SU-295-689-628',
'name': 'Neri',
},
},
"updated": {
"at": now,
"by": "SU-295-689-628",
"by": {
'id': 'SU-295-689-628',
'name': 'Neri',
},
},
},
}
Expand Down

0 comments on commit 5bfb3f4

Please sign in to comment.