manually picked changes from pull-request: Integrate SEB Server in OLAT again #121
This commit is contained in:
parent
c8ff644e7d
commit
d6e65eb8ad
3 changed files with 33 additions and 27 deletions
|
@ -275,7 +275,7 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
final DateTime quizFromTime = (filterMap != null) ? filterMap.getQuizFromTime() : null;
|
||||
final long fromCutTime = (quizFromTime != null) ? Utils.toUnixTimeInSeconds(quizFromTime) : -1;
|
||||
|
||||
String url = "/restapi/assessment_modes/seb?";
|
||||
String url = "/restapi/repo/assessmentmodes?";
|
||||
if (fromCutTime != -1) {
|
||||
url = String.format("%sdateFrom=%s&", url, fromCutTime);
|
||||
}
|
||||
|
@ -295,8 +295,8 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
lmsSetup.getLmsType(),
|
||||
a.name,
|
||||
a.description,
|
||||
Utils.toDateTimeUTC(a.dateFrom),
|
||||
Utils.toDateTimeUTC(a.dateTo),
|
||||
Utils.toDateTimeUTC(a.begin - a.leadTime * 1000 * 60),
|
||||
Utils.toDateTimeUTC(a.end + a.followupTime * 1000 * 60),
|
||||
examUrl(a.repositoryEntryKey),
|
||||
new HashMap<String, String>());
|
||||
})
|
||||
|
@ -316,7 +316,7 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
|
||||
private QuizData quizById(final OlatLmsRestTemplate restTemplate, final String id) {
|
||||
final LmsSetup lmsSetup = this.apiTemplateDataSupplier.getLmsSetup();
|
||||
final String url = String.format("/restapi/assessment_modes/%s", id);
|
||||
final String url = String.format("/restapi/repo/assessmentmodes/%s", id);
|
||||
final AssessmentData a = this.apiGet(restTemplate, url, AssessmentData.class);
|
||||
return new QuizData(
|
||||
String.format("%d", a.key),
|
||||
|
@ -325,26 +325,26 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
lmsSetup.getLmsType(),
|
||||
a.name,
|
||||
a.description,
|
||||
Utils.toDateTimeUTC(a.dateFrom),
|
||||
Utils.toDateTimeUTC(a.dateTo),
|
||||
Utils.toDateTimeUTC(a.begin - a.leadTime * 1000 * 60),
|
||||
Utils.toDateTimeUTC(a.end + a.followupTime * 1000 * 60),
|
||||
examUrl(a.repositoryEntryKey),
|
||||
new HashMap<String, String>());
|
||||
}
|
||||
|
||||
private ExamineeAccountDetails getExamineeById(final RestTemplate restTemplate, final String id) {
|
||||
final String url = String.format("/restapi/users/%s/name_username", id);
|
||||
final String url = String.format("/restapi/users/%s", id);
|
||||
final UserData u = this.apiGet(restTemplate, url, UserData.class);
|
||||
final Map<String, String> attrs = new HashMap<>();
|
||||
return new ExamineeAccountDetails(
|
||||
String.valueOf(u.key),
|
||||
u.lastName + ", " + u.firstName,
|
||||
u.username,
|
||||
"OLAT API does not provide email addresses",
|
||||
u.login,
|
||||
u.email,
|
||||
attrs);
|
||||
}
|
||||
|
||||
private SEBRestriction getRestrictionForAssignmentId(final RestTemplate restTemplate, final String id) {
|
||||
final String url = String.format("/restapi/assessment_modes/%s/seb_restriction", id);
|
||||
final String url = String.format("/restapi/repo/assessmentmodes/%s/seb", id);
|
||||
final RestrictionData r = this.apiGet(restTemplate, url, RestrictionData.class);
|
||||
final HashMap<String, String> additionalAttributes = new HashMap<>();
|
||||
if (StringUtils.isNotBlank(r.quitLink)) {
|
||||
|
@ -362,7 +362,7 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
final String id,
|
||||
final SEBRestriction restriction) {
|
||||
|
||||
final String url = String.format("/restapi/assessment_modes/%s/seb_restriction", id);
|
||||
final String url = String.format("/restapi/repo/assessmentmodes/%s/seb", id);
|
||||
final RestrictionDataPost post = new RestrictionDataPost();
|
||||
post.browserExamKeys = new ArrayList<>(restriction.browserExamKeys);
|
||||
post.configKeys = new ArrayList<>(restriction.configKeys);
|
||||
|
@ -377,7 +377,7 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
}
|
||||
|
||||
private SEBRestriction deleteRestrictionForAssignmentId(final RestTemplate restTemplate, final String id) {
|
||||
final String url = String.format("/restapi/assessment_modes/%s/seb_restriction", id);
|
||||
final String url = String.format("/restapi/repo/assessmentmodes/%s/seb", id);
|
||||
final RestrictionData r = this.apiDelete(restTemplate, url, RestrictionData.class);
|
||||
// OLAT returns RestrictionData with null values upon deletion.
|
||||
// We return it here for consistency, even though SEB server does not need it
|
||||
|
@ -473,7 +473,7 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
.getOrThrow();
|
||||
|
||||
final ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
|
||||
details.setAccessTokenUri(lmsSetup.lmsApiUrl + "/restapi/auth/");
|
||||
details.setAccessTokenUri(lmsSetup.lmsApiUrl + "/restapi/auth/{username}?password={password}");
|
||||
details.setClientId(plainClientId.toString());
|
||||
details.setClientSecret(plainClientSecret.toString());
|
||||
|
||||
|
@ -489,4 +489,5 @@ public class OlatLmsAPITemplate extends AbstractCachedCourseAccess implements Lm
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -20,22 +20,24 @@ public final class OlatLmsData {
|
|||
/*
|
||||
* OLAT API example:
|
||||
* {
|
||||
* "courseName": "course 1",
|
||||
* "dateFrom": 1624420800000,
|
||||
* "dateTo": 1624658400000,
|
||||
* "begin": 1624420800000,
|
||||
* "end": 1624658400000,
|
||||
* "description": "",
|
||||
* "key": 6356992,
|
||||
* “repositoryEntryKey”: 462324,
|
||||
* "name": "SEB test"
|
||||
* "name": "SEB test",
|
||||
* "leadTime": 15,
|
||||
* "followupTime", 5
|
||||
* }
|
||||
*/
|
||||
public long key;
|
||||
public long repositoryEntryKey;
|
||||
public String name;
|
||||
public String description;
|
||||
public String courseName;
|
||||
public long dateFrom;
|
||||
public long dateTo;
|
||||
public Long begin;
|
||||
public Long end;
|
||||
public long leadTime;
|
||||
public long followupTime;
|
||||
}
|
||||
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
|
@ -46,13 +48,15 @@ public final class OlatLmsData {
|
|||
* "firstName": "OpenOLAT",
|
||||
* "key": 360448,
|
||||
* "lastName": "Administrator",
|
||||
* "username": "administrator"
|
||||
* "login": "administrator",
|
||||
* "email": "admin@example.org"
|
||||
* }
|
||||
*/
|
||||
public long key;
|
||||
public String firstName;
|
||||
public String lastName;
|
||||
public String username;
|
||||
public String login;
|
||||
public String email;
|
||||
}
|
||||
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpRequest;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
@ -116,14 +117,14 @@ public class OlatLmsRestTemplate extends RestTemplate {
|
|||
// Authenticate with OLAT and store the received X-OLAT-TOKEN
|
||||
this.token = "authenticating";
|
||||
final String authUrl = this.details.getAccessTokenUri();
|
||||
final Map<String, String> credentials = new HashMap<>();
|
||||
credentials.put("username", this.details.getClientId());
|
||||
credentials.put("password", this.details.getClientSecret());
|
||||
final Map<String, String> parameters = new HashMap<>();
|
||||
parameters.put("username", this.details.getClientId());
|
||||
parameters.put("password", this.details.getClientSecret());
|
||||
final HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.set("content-type", "application/json");
|
||||
final HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(credentials, httpHeaders);
|
||||
final HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(httpHeaders);
|
||||
try {
|
||||
final ResponseEntity<String> response = this.postForEntity(authUrl, requestEntity, String.class);
|
||||
final ResponseEntity<String> response = this.exchange(authUrl, HttpMethod.GET, requestEntity, String.class, parameters);
|
||||
final HttpHeaders responseHeaders = response.getHeaders();
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
|
|
Loading…
Reference in a new issue