@@ -154,6 +154,15 @@ def __init__(self, config, logger):
154154 def verify_metadata (self , metadata ):
155155 current_user = Auth .token_auth .current_user ()
156156 metadata_user_id = metadata .user_id
157+ if current_user is None :
158+ # The request is not from a logged-in user
159+ if metadata_user_id is None :
160+ return True
161+ self .logger .warning (
162+ "Metadata user verification: Public user is trying to access private metadata object for user {}" ,
163+ metadata_user_id ,
164+ )
165+ return False
157166 if current_user .id != metadata_user_id and not current_user .is_admin ():
158167 self .logger .warning (
159168 "Metadata user verification: Logged in user_id {} is different than the one provided in the URI {}" ,
@@ -163,15 +172,16 @@ def verify_metadata(self, metadata):
163172 return False
164173 return True
165174
166- @Auth .token_auth .login_required ()
175+ @Auth .token_auth .login_required (optional = True )
167176 def get (self , id = None ):
168177 """
169178 Get request for querying a metadata object of a user given a metadata id.
170- This requires a Pbench auth token in the header field
179+ This requires a Pbench auth token in the header field if the metadata object is private to a user
180+
171181
172182 The url requires a metadata object id such as /user/metadata/<int:id>
173183
174- Required headers include
184+ Optional headers include
175185 Authorization: Bearer <Pbench authentication token (user received upon login)>
176186
177187 :return: JSON Payload
@@ -191,14 +201,19 @@ def get(self, id=None):
191201
192202 try :
193203 # Fetch the metadata object
194- metadata_object = Metadata .query (id = id )[ 0 ]
204+ metadata_objects = Metadata .query (id = id )
195205 except Exception :
196206 self .logger .exception (
197207 "Exception occurred in the GET request while querying the Metadata model, id: {}" ,
198208 id ,
199209 )
200210 abort (500 , message = "INTERNAL ERROR" )
201211
212+ if metadata_objects :
213+ metadata_object = metadata_objects [0 ]
214+ else :
215+ abort (404 , message = "Not found" )
216+
202217 # Verify if the metadata object id in the url belongs to the logged in user
203218 if not self .verify_metadata (metadata_object ):
204219 abort (403 , message = "Not authorized to perform the GET request" )
@@ -210,7 +225,7 @@ def get(self, id=None):
210225 }
211226 return make_response (jsonify (response_object ), 200 )
212227
213- @Auth .token_auth .login_required ()
228+ @Auth .token_auth .login_required (optional = True )
214229 def put (self , id = None ):
215230 """
216231 Put request for updating a metadata object of a user given a metadata id.
@@ -248,14 +263,19 @@ def put(self, id=None):
248263 abort (400 , message = "Invalid json object in request" )
249264
250265 try :
251- metadata_object = Metadata .query (id = id )[ 0 ]
266+ metadata_objects = Metadata .query (id = id )
252267 except Exception :
253268 self .logger .exception (
254269 "Exception occurred in the PUT request while querying the Metadata model, id: {}" ,
255270 id ,
256271 )
257272 abort (500 , message = "INTERNAL ERROR" )
258273
274+ if metadata_objects :
275+ metadata_object = metadata_objects [0 ]
276+ else :
277+ abort (404 , message = "Not found" )
278+
259279 # Verify if the metadata object id in the url belongs to the logged in user
260280 if not self .verify_metadata (metadata_object ):
261281 abort (403 , message = "Not authorized to perform the PUT request" )
@@ -293,7 +313,7 @@ def put(self, id=None):
293313 }
294314 return make_response (jsonify (response_object ), 200 )
295315
296- @Auth .token_auth .login_required ()
316+ @Auth .token_auth .login_required (optional = True )
297317 def delete (self , id = None ):
298318 """
299319 Delete request for deleting a metadata object of a user given a metadata id.
@@ -315,14 +335,19 @@ def delete(self, id=None):
315335
316336 try :
317337 # Fetch the metadata object
318- metadata_object = Metadata .query (id = id )[ 0 ]
338+ metadata_objects = Metadata .query (id = id )
319339 except Exception :
320340 self .logger .exception (
321341 "Exception occurred in the Delete request while querying the Metadata model, id: {}" ,
322342 id ,
323343 )
324344 abort (500 , message = "INTERNAL ERROR" )
325345
346+ if metadata_objects :
347+ metadata_object = metadata_objects [0 ]
348+ else :
349+ abort (404 , message = "Not found" )
350+
326351 # Verify if the metadata object id in the url belongs to the logged in user
327352 if not self .verify_metadata (metadata_object ):
328353 abort (403 , message = "Not authorized to perform the DELETE request" )
0 commit comments