1 package emissary.server.api;
2
3 import emissary.client.response.MapResponseEntity;
4 import emissary.command.ServerCommand;
5 import emissary.core.Namespace;
6 import emissary.core.NamespaceException;
7 import emissary.server.EmissaryServer;
8
9 import jakarta.ws.rs.GET;
10 import jakarta.ws.rs.Path;
11 import jakarta.ws.rs.Produces;
12 import jakarta.ws.rs.core.MediaType;
13 import jakarta.ws.rs.core.Response;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 import java.util.Map;
18
19
20
21
22
23
24 @Path("")
25
26 public class Env {
27
28 public static final String EMISSARY_SERVER = "EmissaryServer";
29 private final Logger logger = LoggerFactory.getLogger(this.getClass());
30
31 @GET
32 @Path("/env")
33 @Produces(MediaType.APPLICATION_JSON)
34 public Response getEnvJson() {
35 return Response.ok().entity(getEnv()).build();
36 }
37
38 @GET
39 @Path("/env.sh")
40 @Produces(MediaType.TEXT_PLAIN)
41 public Response getEnvForBash() {
42 return Response.ok().entity(envString()).build();
43 }
44
45 private MapResponseEntity getEnv() {
46 MapResponseEntity entity = new MapResponseEntity();
47 try {
48 EmissaryServer server = (EmissaryServer) Namespace.lookup(EMISSARY_SERVER);
49 ServerCommand command = server.getServerCommand();
50 entity.addKeyValue("CONFIG_DIR", command.getConfig().toAbsolutePath().toString());
51 entity.addKeyValue("PROJECT_BASE", command.getProjectBase().toAbsolutePath().toString());
52 entity.addKeyValue("OUTPUT_ROOT", command.getOutputDir().toAbsolutePath().toString());
53 entity.addKeyValue("BIN_DIR", command.getBinDir().toAbsolutePath().toString());
54 entity.addKeyValue("HOST", command.getHost());
55 entity.addKeyValue("PORT", Integer.toString(command.getPort()));
56 entity.addKeyValue("SCHEME", command.getScheme());
57 logger.debug("Returning env: {}", entity.getResponse());
58 } catch (NamespaceException e) {
59 logger.error("Error looking up namespace \"EMISSARY_SERVER\": {}", e.getMessage());
60 entity.addError("Error looking up namespace \"" + EMISSARY_SERVER + "\"");
61 }
62 return entity;
63 }
64
65 private String envString() {
66 StringBuilder sb = new StringBuilder();
67 MapResponseEntity entity = getEnv();
68 if (entity.getErrors().size() > 0) {
69 for (String msg : entity.getErrors()) {
70 sb.append(msg + "\n");
71 }
72 } else {
73 for (Map.Entry<String, String> entry : entity.getResponse().entrySet()) {
74 sb.append("export " + entry.getKey() + "=\"" + entry.getValue() + "\"\n");
75 }
76 }
77 return sb.toString();
78 }
79
80 }