Coverage for src/couchers/servicers/media.py: 96%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import logging
3import grpc
4from google.protobuf import empty_pb2
6from couchers.crypto import secure_compare
7from couchers.db import session_scope
8from couchers.interceptors import ManualAuthValidatorInterceptor
9from couchers.models import InitiatedUpload, Upload
10from couchers.sql import couchers_select as select
11from proto import media_pb2_grpc
13logger = logging.getLogger(__name__)
16def get_media_auth_interceptor(secret_token):
17 def is_authorized(token):
18 return secure_compare(token.encode("ascii"), secret_token.encode("ascii"))
20 return ManualAuthValidatorInterceptor(is_authorized)
23class Media(media_pb2_grpc.MediaServicer):
24 def UploadConfirmation(self, request, context):
25 with session_scope() as session:
26 initiated_upload = session.execute(
27 select(InitiatedUpload).where(InitiatedUpload.key == request.key).where(InitiatedUpload.is_valid)
28 ).scalar_one_or_none()
30 if not initiated_upload:
31 context.abort(grpc.StatusCode.NOT_FOUND, "Upload not found.")
33 # move it to a completed upload
34 upload = Upload(
35 key=request.key,
36 filename=request.filename,
37 creator_user_id=initiated_upload.initiator_user_id,
38 )
39 session.add(upload)
41 # delete the old upload
42 session.delete(initiated_upload)
44 return empty_pb2.Empty()