/
UserDataDownloadController.java
53 lines (45 loc) · 2.55 KB
/
UserDataDownloadController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package org.sagebionetworks.bridge.spring.controllers;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.sagebionetworks.bridge.exceptions.BadRequestException;
import org.sagebionetworks.bridge.models.DateRange;
import org.sagebionetworks.bridge.models.StatusMessage;
import org.sagebionetworks.bridge.models.accounts.StudyParticipant;
import org.sagebionetworks.bridge.models.accounts.UserSession;
import org.sagebionetworks.bridge.services.UserDataDownloadService;
@CrossOrigin
@RestController
public class UserDataDownloadController extends BaseController {
static final StatusMessage ACCEPTED_MSG = new StatusMessage("Request submitted.");
private UserDataDownloadService userDataDownloadService;
/** Service handler for User Data Download requests. */
@Autowired
final void setUserDataDownloadService(UserDataDownloadService userDataDownloadService) {
this.userDataDownloadService = userDataDownloadService;
}
/**
* Play handler for requesting user data. User must be authenticated and consented. (Otherwise, they couldn't have
* any data to download to begin with.)
*/
@PostMapping({"/v3/users/self/emailData", "/v3/users/self/sendData"})
@ResponseStatus(HttpStatus.ACCEPTED)
public StatusMessage requestUserData() throws JsonProcessingException {
UserSession session = getAuthenticatedAndConsentedSession();
String appId = session.getAppId();
// At least for now, if the user does not have a verified email address, do not allow this service.
StudyParticipant participant = session.getParticipant();
boolean verifiedEmail = (participant.getEmail() != null && Boolean.TRUE.equals(participant.getEmailVerified()));
boolean verifiedPhone = (participant.getPhone() != null && Boolean.TRUE.equals(participant.getPhoneVerified()));
if (!verifiedEmail && !verifiedPhone) {
throw new BadRequestException("Cannot request user data, account has no verified email address or phone number.");
}
DateRange dateRange = parseJson(DateRange.class);
userDataDownloadService.requestUserData(appId, session.getParticipant().getId(), dateRange);
return ACCEPTED_MSG;
}
}