37
37
import uk .ac .cam .cl .dtg .isaac .dos .QuizFeedbackMode ;
38
38
import uk .ac .cam .cl .dtg .isaac .dos .content .Content ;
39
39
import uk .ac .cam .cl .dtg .isaac .dos .content .Question ;
40
+ import uk .ac .cam .cl .dtg .isaac .dos .users .Role ;
40
41
import uk .ac .cam .cl .dtg .isaac .dto .AssignmentStatusDTO ;
41
42
import uk .ac .cam .cl .dtg .isaac .dto .IsaacQuestionBaseDTO ;
42
43
import uk .ac .cam .cl .dtg .isaac .dto .IsaacQuizDTO ;
54
55
import uk .ac .cam .cl .dtg .isaac .dto .content .ContentBaseDTO ;
55
56
import uk .ac .cam .cl .dtg .isaac .dto .content .ContentSummaryDTO ;
56
57
import uk .ac .cam .cl .dtg .isaac .dto .content .DetailedQuizSummaryDTO ;
58
+ import uk .ac .cam .cl .dtg .isaac .dto .users .AbstractSegueUserDTO ;
57
59
import uk .ac .cam .cl .dtg .isaac .dto .users .RegisteredUserDTO ;
58
60
import uk .ac .cam .cl .dtg .isaac .dto .users .UserSummaryDTO ;
59
61
import uk .ac .cam .cl .dtg .segue .api .ErrorResponseWrapper ;
@@ -161,7 +163,7 @@ public QuizFacade(final AbstractConfigLoader properties, final ILogManager logMa
161
163
/**
162
164
* Get quizzes visible to this user, starting from index 0.
163
165
*
164
- * Anonymous users can't see quizzes .
166
+ * See {@link #getAvailableQuizzes(Request, HttpServletRequest, Integer)} .
165
167
*
166
168
* @return a Response containing a list of ContentSummaryDTO for the visible quizzes.
167
169
*/
@@ -176,7 +178,7 @@ public final Response getAvailableQuizzes(@Context final Request request, @Conte
176
178
/**
177
179
* Get quizzes visible to this user, starting from the specified index.
178
180
*
179
- * Anonymous users can't see quizzes.
181
+ * Anonymous users can't view or take quizzes, but can list STUDENT quizzes using this endpoint .
180
182
*
181
183
* @param request the Request needed for ETag checking.
182
184
* @param httpServletRequest the Request needed for Cookies for the current user.
@@ -187,17 +189,21 @@ public final Response getAvailableQuizzes(@Context final Request request, @Conte
187
189
@ Path ("/available/{startIndex}" )
188
190
@ Produces (MediaType .APPLICATION_JSON )
189
191
@ GZIP
190
- @ Operation (summary = "Get tests visible to this user, from the specified index." )
192
+ @ Operation (summary = "Get tests visible to this user, from the specified index." ,
193
+ description = "Anonymous users can list student quizzes, but cannot take them." )
191
194
public final Response getAvailableQuizzes (@ Context final Request request ,
192
195
@ Context final HttpServletRequest httpServletRequest ,
193
196
@ PathParam ("startIndex" ) final Integer startIndex ) {
194
197
try {
195
- RegisteredUserDTO user = this .userManager .getCurrentRegisteredUser (httpServletRequest );
196
198
197
- String userRoleString = user .getRole ().name ();
199
+ String userRoleString = Role .STUDENT .name (); // Allow anonymous users to list STUDENT quizzes.
200
+ AbstractSegueUserDTO currentUser = userManager .getCurrentUser (httpServletRequest );
201
+ if (currentUser instanceof RegisteredUserDTO ) {
202
+ userRoleString = ((RegisteredUserDTO ) currentUser ).getRole ().name ();
203
+ }
198
204
199
205
// Cache the list of quizzes based on current content version, user's role, and startIndex:
200
- int etagValue = this .contentManager .getCurrentContentSHA ().hashCode () + user . getRole () .hashCode ();
206
+ int etagValue = this .contentManager .getCurrentContentSHA ().hashCode () + userRoleString .hashCode ();
201
207
if (null != startIndex ) {
202
208
etagValue += startIndex ;
203
209
}
@@ -220,8 +226,10 @@ public final Response getAvailableQuizzes(@Context final Request request,
220
226
String message = "ContentManagerException whilst getting available tests" ;
221
227
log .error (message , e );
222
228
return new SegueErrorResponse (Status .INTERNAL_SERVER_ERROR , message ).toResponse ();
223
- } catch (NoUserLoggedInException e ) {
224
- return SegueErrorResponse .getNotLoggedInResponse ();
229
+ } catch (SegueDatabaseException e ) {
230
+ String message = "Database error whilst getting available tests" ;
231
+ log .error (message , e );
232
+ return new SegueErrorResponse (Response .Status .INTERNAL_SERVER_ERROR , message ).toResponse ();
225
233
}
226
234
}
227
235
@@ -256,7 +264,7 @@ public final Response getAssignedQuizzes(@Context final HttpServletRequest reque
256
264
return Response .ok (assignments )
257
265
.cacheControl (getCacheControl (NEVER_CACHE_WITHOUT_ETAG_CHECK , false )).build ();
258
266
} catch (SegueDatabaseException e ) {
259
- String message = "SegueDatabaseException whilst getting available tests" ;
267
+ String message = "Database error whilst getting available tests" ;
260
268
log .error (message , e );
261
269
return new SegueErrorResponse (Response .Status .INTERNAL_SERVER_ERROR , message ).toResponse ();
262
270
} catch (NoUserLoggedInException e ) {
@@ -287,7 +295,7 @@ public final Response getFreeAttempts(@Context final HttpServletRequest request)
287
295
return Response .ok (attempts )
288
296
.cacheControl (getCacheControl (NEVER_CACHE_WITHOUT_ETAG_CHECK , false )).build ();
289
297
} catch (SegueDatabaseException e ) {
290
- String message = "SegueDatabaseException whilst getting available tests" ;
298
+ String message = "Database error whilst getting available tests" ;
291
299
log .error (message , e );
292
300
return new SegueErrorResponse (Response .Status .INTERNAL_SERVER_ERROR , message ).toResponse ();
293
301
} catch (NoUserLoggedInException e ) {
0 commit comments