From f7002ab2a0bd2f91e201451acb157d64256f9cb9 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 6 May 2022 18:30:59 +0200 Subject: [PATCH] feat(api): vault support --- ee/api/.gitignore | 1 - .../core/sessions_favorite_viewed.py | 74 +++++++++++++++++++ ee/api/chalicelib/utils/s3_extra.py | 30 ++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 ee/api/chalicelib/core/sessions_favorite_viewed.py create mode 100644 ee/api/chalicelib/utils/s3_extra.py diff --git a/ee/api/.gitignore b/ee/api/.gitignore index c5a8d9ce4..fb839d5e6 100644 --- a/ee/api/.gitignore +++ b/ee/api/.gitignore @@ -207,7 +207,6 @@ Pipfile /chalicelib/core/mobile.py /chalicelib/core/sessions.py /chalicelib/core/sessions_assignments.py -/chalicelib/core/sessions_favorite_viewed.py /chalicelib/core/sessions_metas.py /chalicelib/core/sessions_mobs.py /chalicelib/core/significance.py diff --git a/ee/api/chalicelib/core/sessions_favorite_viewed.py b/ee/api/chalicelib/core/sessions_favorite_viewed.py new file mode 100644 index 000000000..bef7787d1 --- /dev/null +++ b/ee/api/chalicelib/core/sessions_favorite_viewed.py @@ -0,0 +1,74 @@ +from chalicelib.core import sessions +from chalicelib.utils import pg_client, s3_extra +from decouple import config + + +def add_favorite_session(project_id, user_id, session_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify(f"""\ + INSERT INTO public.user_favorite_sessions + (user_id, session_id) + VALUES + (%(userId)s,%(sessionId)s);""", + {"userId": user_id, "sessionId": session_id}) + ) + return sessions.get_by_id2_pg(project_id=project_id, session_id=session_id, user_id=user_id, full_data=False, + include_fav_viewed=True) + + +def remove_favorite_session(project_id, user_id, session_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify(f"""\ + DELETE FROM public.user_favorite_sessions + WHERE + user_id = %(userId)s + AND session_id = %(sessionId)s;""", + {"userId": user_id, "sessionId": session_id}) + ) + return sessions.get_by_id2_pg(project_id=project_id, session_id=session_id, user_id=user_id, full_data=False, + include_fav_viewed=True) + + +def add_viewed_session(project_id, user_id, session_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify("""\ + INSERT INTO public.user_viewed_sessions + (user_id, session_id) + VALUES + (%(userId)s,%(sessionId)s) + ON CONFLICT DO NOTHING;""", + {"userId": user_id, "sessionId": session_id}) + ) + + +def favorite_session(project_id, user_id, session_id): + if favorite_session_exists(user_id=user_id, session_id=session_id): + s3_extra.tag_file(session_id=str(session_id), tag_value=config('RETENTION_D_VALUE', default='default')) + s3_extra.tag_file(session_id=str(session_id) + "e", tag_value=config('RETENTION_D_VALUE', default='default')) + return remove_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id) + s3_extra.tag_file(session_id=str(session_id), tag_value=config('RETENTION_L_VALUE', default='vault')) + s3_extra.tag_file(session_id=str(session_id) + "e", tag_value=config('RETENTION_L_VALUE', default='vault')) + return add_favorite_session(project_id=project_id, user_id=user_id, session_id=session_id) + + +def view_session(project_id, user_id, session_id): + return add_viewed_session(project_id=project_id, user_id=user_id, session_id=session_id) + + +def favorite_session_exists(user_id, session_id): + with pg_client.PostgresClient() as cur: + cur.execute( + cur.mogrify( + """SELECT + session_id + FROM public.user_favorite_sessions + WHERE + user_id = %(userId)s + AND session_id = %(sessionId)s""", + {"userId": user_id, "sessionId": session_id}) + ) + r = cur.fetchone() + return r is not None diff --git a/ee/api/chalicelib/utils/s3_extra.py b/ee/api/chalicelib/utils/s3_extra.py new file mode 100644 index 000000000..bd74d8277 --- /dev/null +++ b/ee/api/chalicelib/utils/s3_extra.py @@ -0,0 +1,30 @@ +from chalicelib.utils.s3 import client +from decouple import config + +def tag_file( session_id, tag_key='retention', tag_value='vault'): + return client.put_object_tagging( + Bucket=config("sessions_bucket"), + Key=session_id, + # VersionId='string', + # ContentMD5='string', + # ChecksumAlgorithm='CRC32'|'CRC32C'|'SHA1'|'SHA256', + Tagging={ + 'TagSet': [ + { + 'Key': tag_key, + 'Value': tag_value + }, + ] + }, + # ExpectedBucketOwner='string', + # RequestPayer='requester' + ) + + # generate_presigned_url( + # 'put_object', + # Params={ + # 'Bucket': bucket, + # 'Key': key + # }, + # ExpiresIn=expires_in + # )