in repository/service/src/main/java/org/apache/karaf/cave/repository/service/maven/MavenServlet.java [159:212]
protected boolean authorize(HttpServletRequest request, HttpServletResponse response, String role) throws IOException {
if (role == null) {
return true;
}
// Return immediately if the header is missing
String authHeader = request.getHeader(HEADER_AUTHORIZATION);
if (authHeader != null && authHeader.length() > 0) {
// Get the authType (Basic, Digest) and authInfo (user/password)
// from the header
authHeader = authHeader.trim();
int blank = authHeader.indexOf(' ');
if (blank > 0) {
String authType = authHeader.substring(0, blank);
String authInfo = authHeader.substring(blank).trim();
// Check whether authorization type matches
if (authType.equalsIgnoreCase(AUTHENTICATION_SCHEME_BASIC)) {
try {
String srcString = base64Decode(authInfo);
int i = srcString.indexOf(':');
String username = srcString.substring(0, i);
String password = srcString.substring(i + 1);
// authenticate
Subject subject = doAuthenticate(username, password, role);
if (subject != null) {
// as per the spec, set attributes
request.setAttribute(HttpContext.AUTHENTICATION_TYPE, HttpServletRequest.BASIC_AUTH);
request.setAttribute(HttpContext.REMOTE_USER, username);
// succeed
return true;
}
} catch (Exception e) {
// Ignore
}
}
}
}
// request authentication
try {
response.setHeader(HEADER_WWW_AUTHENTICATE, AUTHENTICATION_SCHEME_BASIC + " realm=\"" + this.realm + "\"");
// must response with status and flush as Jetty may report org.eclipse.jetty.server.Response Committed before 401 null
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentLength(0);
response.flushBuffer();
} catch (IOException ioe) {
// failed sending the response ... cannot do anything about it
}
// inform HttpService that authentication failed
return false;
}