1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.linecorp.centraldogma.server;
17
18 import javax.annotation.Nullable;
19
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 import com.linecorp.armeria.common.HttpRequest;
24 import com.linecorp.armeria.common.HttpResponse;
25 import com.linecorp.armeria.common.HttpStatus;
26 import com.linecorp.armeria.server.HttpService;
27 import com.linecorp.armeria.server.ServiceRequestContext;
28 import com.linecorp.armeria.server.auth.AuthFailureHandler;
29 import com.linecorp.centraldogma.common.AuthorizationException;
30 import com.linecorp.centraldogma.common.ShuttingDownException;
31 import com.linecorp.centraldogma.server.internal.api.HttpApiUtil;
32
33 final class CentralDogmaAuthFailureHandler implements AuthFailureHandler {
34
35 private static final Logger logger = LoggerFactory.getLogger(CentralDogmaAuthFailureHandler.class);
36
37 private static final AuthorizationException AUTHORIZATION_EXCEPTION = new AuthorizationException("", false);
38
39 @Override
40 public HttpResponse authFailed(HttpService delegate,
41 ServiceRequestContext ctx, HttpRequest req,
42 @Nullable Throwable cause) throws Exception {
43 if (cause != null) {
44 if (!(cause instanceof ShuttingDownException)) {
45 logger.warn("Unexpected exception during authorization:", cause);
46 }
47 return HttpApiUtil.newResponse(ctx, HttpStatus.INTERNAL_SERVER_ERROR, cause);
48 }
49
50 return HttpApiUtil.newResponse(ctx, HttpStatus.UNAUTHORIZED, AUTHORIZATION_EXCEPTION);
51 }
52 }