Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/devel' into CB-4896-migrate-to-j…
Browse files Browse the repository at this point in the history
…etty-12
  • Loading branch information
alexander-skoblikov committed Sep 12, 2024
2 parents 8c05e6d + ceefea4 commit a9451a9
Show file tree
Hide file tree
Showing 3 changed files with 147 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ private void initSessionManager(
@NotNull ServletContextHandler servletContextHandler
) {
// Init sessions persistence
SessionHandler sessionHandler = new SessionHandler();
CBSessionHandler sessionHandler = new CBSessionHandler(application);
var maxIdleTime = application.getMaxSessionIdleTime();
int intMaxIdleSeconds;
if (maxIdleTime > Integer.MAX_VALUE) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void contextInitialized(ServletContextEvent sce) {
//scf.setDomain(domain);
//scf.setMaxAge(CB_SESSION_LIFE_TIME);
cookieConfig.setPath(CBApplication.getInstance().getRootURI());
cookieConfig.setSecure(application.getServerURL().startsWith("https"));
// cookieConfig.setSecure(application.getServerURL().startsWith("https"));
cookieConfig.setHttpOnly(true);
cookieConfig.setName(CBConstants.CB_SESSION_COOKIE_NAME);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.server.jetty;

import io.cloudbeaver.server.CBApplication;
import jakarta.servlet.SessionCookieConfig;
import org.eclipse.jetty.http.Syntax;
import org.eclipse.jetty.server.session.SessionHandler;

public class CBSessionHandler extends SessionHandler {
private final CBCookieConfig cbCookieConfig;
private final CBApplication<?> application;

public CBSessionHandler(CBApplication<?> application) {
this.cbCookieConfig = new CBCookieConfig();
this.application = application;
}


@Override
public SessionCookieConfig getSessionCookieConfig() {
return this.cbCookieConfig;
}


//mostly copy of org.eclipse.jetty.server.session.CookieConfig but allows to use dynamic setSecure flag
public final class CBCookieConfig implements SessionCookieConfig {
public CBCookieConfig() {
}

public String getComment() {
return CBSessionHandler.this._sessionComment;
}

public String getDomain() {
return CBSessionHandler.this._sessionDomain;
}

public int getMaxAge() {
return CBSessionHandler.this._maxCookieAge;
}

public String getName() {
return CBSessionHandler.this._sessionCookie;
}

public String getPath() {
return CBSessionHandler.this._sessionPath;
}

public boolean isHttpOnly() {
return CBSessionHandler.this._httpOnly;
}

public boolean isSecure() {
var serverUrl = CBSessionHandler.this.application.getServerURL();
return serverUrl != null && serverUrl.startsWith("https://");
}

public void setComment(String comment) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._sessionComment = comment;
}
}

public void setDomain(String domain) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._sessionDomain = domain;
}
}

public void setHttpOnly(boolean httpOnly) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._httpOnly = httpOnly;
}
}

public void setMaxAge(int maxAge) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._maxCookieAge = maxAge;
}
}

public void setName(String name) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else if ("".equals(name)) {
throw new IllegalArgumentException("Blank cookie name");
} else {
if (name != null) {
Syntax.requireValidRFC2616Token(name, "Bad Session cookie name");
}

CBSessionHandler.this._sessionCookie = name;
}
}

public void setPath(String path) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._sessionPath = path;
}
}

public void setSecure(boolean secure) {
if (CBSessionHandler.this._context != null && CBSessionHandler.this._context.getContextHandler()
.isAvailable()) {
throw new IllegalStateException("CookieConfig cannot be set after ServletContext is started");
} else {
CBSessionHandler.this._secureCookies = secure;
}
}
}


}

0 comments on commit a9451a9

Please sign in to comment.