package com.yahoo.vespa.hosted.controller.restapi; import com.yahoo.application.container.handler.Request; import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; import com.yahoo.vespa.hosted.controller.api.role.SimplePrincipal; import java.nio.charset.StandardCharsets; import java.security.Principal; import java.util.Set; import java.util.function.Supplier; /** * Controller container test with services.xml which accommodates cloud user management. * * @author jonmv */ public class ControllerContainerCloudTest extends ControllerContainerTest { @Override protected SystemName system() { return SystemName.Public; } @Override protected String variablePartXml() { return " \n" + " \n" + " \n" + " \n" + " http://*/application/v4/*\n" + " http://*/api/application/v4/*\n" + " \n" + " \n" + " http://*/zone/v1\n" + " http://*/zone/v1/*\n" + " http://*/api/zone/v1\n" + " http://*/api/zone/v1/*\n" + " \n" + " \n" + " http://*/user/v1/*\n" + " http://*/api/user/v1/*\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " http://*/*\n" + " \n" + " \n" + " \n"; } protected static final String accessDenied = "{\n" + " \"code\" : 403,\n" + " \"message\" : \"Access denied\"\n" + "}"; protected RequestBuilder request(String path) { return new RequestBuilder(path, Request.Method.GET); } protected RequestBuilder request(String path, Request.Method method) { return new RequestBuilder(path, method); } protected class RequestBuilder implements Supplier { private final String path; private final Request.Method method; private byte[] data = new byte[0]; private Principal user = () -> "user@test"; private Set roles = Set.of(Role.everyone()); private RequestBuilder(String path, Request.Method method) { this.path = path; this.method = method; } public RequestBuilder data(byte[] data) { this.data = data; return this; } public RequestBuilder data(String data) { this.data = data.getBytes(StandardCharsets.UTF_8); return this; } public RequestBuilder user(String user) { this.user = new SimplePrincipal(user); return this; } public RequestBuilder roles(Set roles) { this.roles = roles; return this; } @Override public Request get() { Request request = new Request("http://localhost:8080" + path, data, method, user); request.getAttributes().put(SecurityContext.ATTRIBUTE_NAME, new SecurityContext(user, roles)); request.getHeaders().put("Content-Type", "application/json"); return request; } } }