Skip to content

Commit 3e4e069

Browse files
pujaganidiemol
andauthored
[grid] Add registration secret to the New Session Queuer (#9026)
* [grid] Add registration secret to the New Session Queuer * [grid] Removed unused local variable from LocalNewSessionQueuer Co-authored-by: Diego Molina <[email protected]>
1 parent dd5d7a0 commit 3e4e069

20 files changed

+236
-67
lines changed

java/server/src/org/openqa/selenium/grid/commands/Hub.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.openqa.selenium.grid.log.LoggingOptions;
3232
import org.openqa.selenium.grid.router.ProxyCdpIntoGrid;
3333
import org.openqa.selenium.grid.router.Router;
34+
import org.openqa.selenium.grid.security.Secret;
3435
import org.openqa.selenium.grid.security.SecretOptions;
3536
import org.openqa.selenium.grid.server.BaseServerOptions;
3637
import org.openqa.selenium.grid.server.EventBusOptions;
@@ -130,6 +131,7 @@ protected Handlers createHandlers(Config config) {
130131

131132
BaseServerOptions serverOptions = new BaseServerOptions(config);
132133
SecretOptions secretOptions = new SecretOptions(config);
134+
Secret secret = secretOptions.getRegistrationSecret();
133135

134136
URL externalUrl;
135137
try {
@@ -150,7 +152,7 @@ protected Handlers createHandlers(Config config) {
150152
bus,
151153
newSessionQueueOptions.getSessionRequestRetryInterval(),
152154
newSessionQueueOptions.getSessionRequestTimeout());
153-
NewSessionQueuer queuer = new LocalNewSessionQueuer(tracer, bus, sessionRequests);
155+
NewSessionQueuer queuer = new LocalNewSessionQueuer(tracer, bus, sessionRequests, secret);
154156
handler.addHandler(queuer);
155157

156158
Distributor distributor = new LocalDistributor(
@@ -159,7 +161,7 @@ protected Handlers createHandlers(Config config) {
159161
clientFactory,
160162
sessions,
161163
queuer,
162-
secretOptions.getRegistrationSecret());
164+
secret);
163165
handler.addHandler(distributor);
164166

165167
Router router = new Router(tracer, clientFactory, sessions, queuer, distributor);

java/server/src/org/openqa/selenium/grid/commands/Standalone.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,11 @@ protected Handlers createHandlers(Config config) {
149149
bus,
150150
newSessionQueueOptions.getSessionRequestRetryInterval(),
151151
newSessionQueueOptions.getSessionRequestTimeout());
152-
NewSessionQueuer queuer = new LocalNewSessionQueuer(tracer, bus, sessionRequests);
152+
NewSessionQueuer queuer = new LocalNewSessionQueuer(
153+
tracer,
154+
bus,
155+
sessionRequests,
156+
registrationSecret);
153157
combinedHandler.addHandler(queuer);
154158

155159
Distributor distributor = new LocalDistributor(

java/server/src/org/openqa/selenium/grid/router/httpd/RouterServer.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.openqa.selenium.grid.log.LoggingOptions;
3434
import org.openqa.selenium.grid.router.ProxyCdpIntoGrid;
3535
import org.openqa.selenium.grid.router.Router;
36+
import org.openqa.selenium.grid.security.Secret;
3637
import org.openqa.selenium.grid.security.SecretOptions;
3738
import org.openqa.selenium.grid.server.BaseServerOptions;
3839
import org.openqa.selenium.grid.server.NetworkOptions;
@@ -110,25 +111,27 @@ protected Handlers createHandlers(Config config) {
110111
NetworkOptions networkOptions = new NetworkOptions(config);
111112
HttpClient.Factory clientFactory = networkOptions.getHttpClientFactory(tracer);
112113

114+
BaseServerOptions serverOptions = new BaseServerOptions(config);
115+
SecretOptions secretOptions = new SecretOptions(config);
116+
Secret secret = secretOptions.getRegistrationSecret();
117+
113118
SessionMapOptions sessionsOptions = new SessionMapOptions(config);
114119
SessionMap sessions = sessionsOptions.getSessionMap();
115120

116121
NewSessionQueuerOptions sessionQueuerOptions = new NewSessionQueuerOptions(config);
117122
URL sessionQueuerUrl = fromUri(sessionQueuerOptions.getSessionQueuerUri());
118123
NewSessionQueuer queuer = new RemoteNewSessionQueuer(
119-
tracer,
120-
clientFactory.createClient(sessionQueuerUrl));
121-
122-
BaseServerOptions serverOptions = new BaseServerOptions(config);
123-
SecretOptions secretOptions = new SecretOptions(config);
124+
tracer,
125+
clientFactory.createClient(sessionQueuerUrl),
126+
secret);
124127

125128
DistributorOptions distributorOptions = new DistributorOptions(config);
126129
URL distributorUrl = fromUri(distributorOptions.getDistributorUri());
127130
Distributor distributor = new RemoteDistributor(
128131
tracer,
129132
clientFactory,
130133
distributorUrl,
131-
secretOptions.getRegistrationSecret());
134+
secret);
132135

133136
GraphqlHandler graphqlHandler = new GraphqlHandler(tracer, distributor, serverOptions.getExternalUri());
134137

java/server/src/org/openqa/selenium/grid/sessionqueue/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ java_library(
2121
"//java/server/src/org/openqa/selenium/grid/log",
2222
"//java/server/src/org/openqa/selenium/status",
2323
"//java/server/src/org/openqa/selenium/remote/server/jmx",
24+
"//java/server/src/org/openqa/selenium/grid/security",
2425
artifact("com.google.guava:guava"),
2526
],
2627
)

java/server/src/org/openqa/selenium/grid/sessionqueue/NewSessionQueuer.java

+19-11
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.openqa.selenium.Capabilities;
2828
import org.openqa.selenium.SessionNotCreatedException;
2929
import org.openqa.selenium.grid.data.RequestId;
30+
import org.openqa.selenium.grid.security.RequiresSecretFilter;
31+
import org.openqa.selenium.grid.security.Secret;
3032
import org.openqa.selenium.internal.Require;
3133
import org.openqa.selenium.remote.NewSessionPayload;
3234
import org.openqa.selenium.remote.http.HttpRequest;
@@ -54,20 +56,26 @@ public abstract class NewSessionQueuer implements HasReadyState, Routable {
5456
private final Route routes;
5557
protected final Tracer tracer;
5658

57-
protected NewSessionQueuer(Tracer tracer) {
59+
protected NewSessionQueuer(Tracer tracer, Secret registrationSecret) {
5860
this.tracer = Require.nonNull("Tracer", tracer);
5961

62+
Require.nonNull("Registration secret", registrationSecret);
63+
RequiresSecretFilter requiresSecret = new RequiresSecretFilter(registrationSecret);
64+
6065
routes = combine(
61-
post("/session")
62-
.to(() -> this::addToQueue),
63-
post("/se/grid/newsessionqueuer/session")
64-
.to(() -> new AddToSessionQueue(tracer, this)),
65-
post("/se/grid/newsessionqueuer/session/retry/{requestId}")
66-
.to(params -> new AddBackToSessionQueue(tracer, this, requestIdFrom(params))),
67-
get("/se/grid/newsessionqueuer/session/{requestId}")
68-
.to(params -> new RemoveFromSessionQueue(tracer, this, requestIdFrom(params))),
69-
delete("/se/grid/newsessionqueuer/queue")
70-
.to(() -> new ClearSessionQueue(tracer, this)));
66+
post("/session")
67+
.to(() -> this::addToQueue),
68+
post("/se/grid/newsessionqueuer/session")
69+
.to(() -> new AddToSessionQueue(tracer, this)),
70+
post("/se/grid/newsessionqueuer/session/retry/{requestId}")
71+
.to(params -> new AddBackToSessionQueue(tracer, this, requestIdFrom(params)))
72+
.with(requiresSecret),
73+
get("/se/grid/newsessionqueuer/session/{requestId}")
74+
.to(params -> new RemoveFromSessionQueue(tracer, this, requestIdFrom(params)))
75+
.with(requiresSecret),
76+
delete("/se/grid/newsessionqueuer/queue")
77+
.to(() -> new ClearSessionQueue(tracer, this))
78+
.with(requiresSecret));
7179
}
7280

7381
private RequestId requestIdFrom(Map<String, String> params) {

java/server/src/org/openqa/selenium/grid/sessionqueue/local/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ java_library(
1919
"//java/server/src/org/openqa/selenium/grid/sessionqueue",
2020
"//java/server/src/org/openqa/selenium/grid/sessionqueue/config",
2121
"//java/server/src/org/openqa/selenium/remote/server/jmx",
22+
"//java/server/src/org/openqa/selenium/grid/security",
2223
artifact("com.google.guava:guava"),
2324
],
2425
)

java/server/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueuer.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.openqa.selenium.grid.config.Config;
2222
import org.openqa.selenium.grid.data.RequestId;
2323
import org.openqa.selenium.grid.log.LoggingOptions;
24+
import org.openqa.selenium.grid.security.Secret;
25+
import org.openqa.selenium.grid.security.SecretOptions;
2426
import org.openqa.selenium.grid.server.EventBusOptions;
2527
import org.openqa.selenium.grid.sessionqueue.GetNewSessionResponse;
2628
import org.openqa.selenium.grid.sessionqueue.NewSessionQueue;
@@ -42,8 +44,9 @@ public class LocalNewSessionQueuer extends NewSessionQueuer {
4244
public LocalNewSessionQueuer(
4345
Tracer tracer,
4446
EventBus bus,
45-
NewSessionQueue sessionRequests) {
46-
super(tracer);
47+
NewSessionQueue sessionRequests,
48+
Secret registrationSecret) {
49+
super(tracer, registrationSecret);
4750
this.bus = Require.nonNull("Event bus", bus);
4851
this.sessionRequests = Require.nonNull("New Session Request Queue", sessionRequests);
4952
}
@@ -58,7 +61,11 @@ public static NewSessionQueuer create(Config config) {
5861
bus,
5962
retryInterval,
6063
requestTimeout);
61-
return new LocalNewSessionQueuer(tracer, bus, sessionRequests);
64+
65+
SecretOptions secretOptions = new SecretOptions(config);
66+
Secret registrationSecret = secretOptions.getRegistrationSecret();
67+
68+
return new LocalNewSessionQueuer(tracer, bus, sessionRequests, registrationSecret);
6269
}
6370

6471
@Override

java/server/src/org/openqa/selenium/grid/sessionqueue/remote/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ java_library(
1818
"//java/server/src/org/openqa/selenium/grid/sessionqueue",
1919
"//java/server/src/org/openqa/selenium/grid/sessionqueue/config",
2020
"//java/server/src/org/openqa/selenium/grid/web",
21+
"//java/server/src/org/openqa/selenium/grid/security",
2122
artifact("com.google.guava:guava"),
2223
],
2324
)

java/server/src/org/openqa/selenium/grid/sessionqueue/remote/RemoteNewSessionQueuer.java

+20-6
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,15 @@
2727
import org.openqa.selenium.grid.config.Config;
2828
import org.openqa.selenium.grid.data.RequestId;
2929
import org.openqa.selenium.grid.log.LoggingOptions;
30+
import org.openqa.selenium.grid.security.AddSecretFilter;
31+
import org.openqa.selenium.grid.security.Secret;
32+
import org.openqa.selenium.grid.security.SecretOptions;
3033
import org.openqa.selenium.grid.server.NetworkOptions;
3134
import org.openqa.selenium.grid.sessionqueue.NewSessionQueuer;
3235
import org.openqa.selenium.grid.sessionqueue.config.NewSessionQueuerOptions;
3336
import org.openqa.selenium.grid.web.Values;
3437
import org.openqa.selenium.internal.Require;
38+
import org.openqa.selenium.remote.http.Filter;
3539
import org.openqa.selenium.remote.http.HttpClient;
3640
import org.openqa.selenium.remote.http.HttpRequest;
3741
import org.openqa.selenium.remote.http.HttpResponse;
@@ -50,19 +54,29 @@ public class RemoteNewSessionQueuer extends NewSessionQueuer {
5054
private final HttpClient client;
5155
private static final String timestampHeader= SESSIONREQUEST_TIMESTAMP_HEADER;
5256
private static final String reqIdHeader= SESSIONREQUEST_ID_HEADER;
57+
private final Filter addSecret;
5358

54-
public RemoteNewSessionQueuer(Tracer tracer, HttpClient client) {
55-
super(tracer);
59+
public RemoteNewSessionQueuer(Tracer tracer, HttpClient client, Secret registrationSecret) {
60+
super(tracer, registrationSecret);
5661
this.client = Require.nonNull("HTTP client", client);
62+
63+
Require.nonNull("Registration secret", registrationSecret);
64+
this.addSecret = new AddSecretFilter(registrationSecret);
5765
}
5866

5967
public static NewSessionQueuer create(Config config) {
6068
Tracer tracer = new LoggingOptions(config).getTracer();
6169
URI uri = new NewSessionQueuerOptions(config).getSessionQueuerUri();
6270
HttpClient.Factory clientFactory = new NetworkOptions(config).getHttpClientFactory(tracer);
6371

72+
SecretOptions secretOptions = new SecretOptions(config);
73+
Secret registrationSecret = secretOptions.getRegistrationSecret();
74+
6475
try {
65-
return new RemoteNewSessionQueuer(tracer, clientFactory.createClient(uri.toURL()));
76+
return new RemoteNewSessionQueuer(
77+
tracer,
78+
clientFactory.createClient(uri.toURL()),
79+
registrationSecret);
6680
} catch (MalformedURLException e) {
6781
throw new UncheckedIOException(e);
6882
}
@@ -84,7 +98,7 @@ public boolean retryAddToQueue(HttpRequest request, RequestId reqId) {
8498
upstream.setContent(request.getContent());
8599
upstream.setHeader(timestampHeader, request.getHeader(timestampHeader));
86100
upstream.setHeader(reqIdHeader, reqId.toString());
87-
HttpResponse response = client.execute(upstream);
101+
HttpResponse response = client.with(addSecret).execute(upstream);
88102
return Values.get(response, Boolean.class);
89103
}
90104

@@ -93,7 +107,7 @@ public Optional<HttpRequest> remove(RequestId reqId) {
93107
HttpRequest upstream =
94108
new HttpRequest(GET, "/se/grid/newsessionqueuer/session/" + reqId.toString());
95109
HttpTracing.inject(tracer, tracer.getCurrentContext(), upstream);
96-
HttpResponse response = client.execute(upstream);
110+
HttpResponse response = client.with(addSecret).execute(upstream);
97111

98112
if(response.getStatus()==HTTP_OK) {
99113
HttpRequest httpRequest = new HttpRequest(POST, "/session");
@@ -110,7 +124,7 @@ public Optional<HttpRequest> remove(RequestId reqId) {
110124
public int clearQueue() {
111125
HttpRequest upstream = new HttpRequest(DELETE, "/se/grid/newsessionqueuer/queue");
112126
HttpTracing.inject(tracer, tracer.getCurrentContext(), upstream);
113-
HttpResponse response = client.execute(upstream);
127+
HttpResponse response = client.with(addSecret).execute(upstream);
114128

115129
return Values.get(response, Integer.class);
116130
}

java/server/test/org/openqa/selenium/grid/distributor/AddingNodesTest.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ public void setUpDistributor() throws MalformedURLException {
107107
bus,
108108
Duration.ofSeconds(2),
109109
Duration.ofSeconds(2));
110-
LocalNewSessionQueuer queuer = new LocalNewSessionQueuer(tracer, bus, localNewSessionQueue);
110+
LocalNewSessionQueuer queuer = new LocalNewSessionQueuer(
111+
tracer,
112+
bus,
113+
localNewSessionQueue,
114+
registrationSecret);
111115
Distributor local = new LocalDistributor(
112116
tracer,
113117
bus,

0 commit comments

Comments
 (0)