Merge remote-tracking branch 'origin/dev-1.3' into development

This commit is contained in:
anhefti 2022-06-09 13:51:16 +02:00
parent 74b2c358c6
commit a79a5f87a0

View file

@ -44,55 +44,62 @@ public class OlatLmsRestTemplate extends RestTemplate {
final byte[] body, final byte[] body,
final ClientHttpRequestExecution execution) throws IOException { final ClientHttpRequestExecution execution) throws IOException {
// if there's no token, authenticate first try {
if (OlatLmsRestTemplate.this.token == null) {
authenticate();
}
// when authenticating, just do a normal call
else if (OlatLmsRestTemplate.this.token.equals("authenticating")) {
if (log.isDebugEnabled()) { // if there's no token, authenticate first
log.debug("OLAT [authentication call]: URL {}", request.getURI()); if (OlatLmsRestTemplate.this.token == null) {
authenticate();
} }
// when authenticating, just do a normal call
else if (OlatLmsRestTemplate.this.token.equals("authenticating")) {
return execution.execute(request, body); if (log.isDebugEnabled()) {
} log.debug("OLAT [authentication call]: URL {}", request.getURI());
// otherwise, add the X-OLAT-TOKEN }
request.getHeaders().set("accept", "application/json");
request.getHeaders().set("X-OLAT-TOKEN", OlatLmsRestTemplate.this.token);
if (log.isDebugEnabled()) { return execution.execute(request, body);
log.debug("OLAT [regular API call]: URL {}", request.getURI()); }
} // otherwise, add the X-OLAT-TOKEN
request.getHeaders().set("accept", "application/json");
ClientHttpResponse response = execution.execute(request, body);
if (log.isDebugEnabled()) {
log.debug("OLAT [regular API call response] {} Headers: {}",
response.getStatusCode(),
response.getHeaders());
}
// If we get a 401, re-authenticate and try once more
if (response.getStatusCode() == HttpStatus.UNAUTHORIZED
/* || response.getStatusCode() == HttpStatus.FORBIDDEN */) {
authenticate();
request.getHeaders().set("X-OLAT-TOKEN", OlatLmsRestTemplate.this.token); request.getHeaders().set("X-OLAT-TOKEN", OlatLmsRestTemplate.this.token);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("OLAT [retry API call]: URL {}", request.getURI()); log.debug("OLAT [regular API call]: URL {}", request.getURI());
} }
response = execution.execute(request, body); ClientHttpResponse response = execution.execute(request, body);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("OLAT [retry API call response] {} Headers: {}", log.debug("OLAT [regular API call response] {} Headers: {}",
response.getStatusCode(), response.getStatusCode(),
response.getHeaders()); response.getHeaders());
} }
// If we get a 401, re-authenticate and try once more
if (response.getStatusCode() == HttpStatus.UNAUTHORIZED) {
authenticate();
request.getHeaders().set("X-OLAT-TOKEN", OlatLmsRestTemplate.this.token);
if (log.isDebugEnabled()) {
log.debug("OLAT [retry API call]: URL {}", request.getURI());
}
response = execution.execute(request, body);
if (log.isDebugEnabled()) {
log.debug("OLAT [retry API call response] {} Headers: {}",
response.getStatusCode(),
response.getHeaders());
}
}
return response;
} catch (final Exception e) {
// TODO find a way to better deal with Olat temporary unavailability
log.error("Unexpected error: ", e);
throw e;
} }
return response;
} }
}); });
} }