Skip to content

Commit

Permalink
Merge branch 'devel' into CB-5450-console-error
Browse files Browse the repository at this point in the history
  • Loading branch information
EvgeniaBzzz authored Sep 17, 2024
2 parents ab664e3 + 03d0f26 commit 3cf2d2a
Show file tree
Hide file tree
Showing 106 changed files with 1,531 additions and 867 deletions.
1 change: 0 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker-russian",
"syler.sass-indented",
"VisualStudioExptTeam.intellicode-api-usage-examples",
"VisualStudioExptTeam.vscodeintellicode",
"yzhang.markdown-all-in-one",
"GraphQL.vscode-graphql-syntax",
Expand Down
18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<img src="https://github.com/dbeaver/cloudbeaver/wiki/images/cloudbeaver-logo.png" width="250"/>

Cloud Database Manager - Community Edition.
CloudBeaver is a web server which provides rich web interface. Server itself is a Java application, web part is written on TypeScript and React.
CloudBeaver is a web server that provides a rich web interface. The server itself is a Java application, and the web part is written in TypeScript and React.
It is free to use and open-source (licensed under [Apache 2](https://github.com/dbeaver/cloudbeaver/blob/devel/LICENSE) license).
See out [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.
See our [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.

![](https://github.com/dbeaver/cloudbeaver/wiki/images/demo_screenshot_1.png)

Expand All @@ -16,7 +16,7 @@ See out [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.

## Demo server

You can see live demo of CloudBeaver here: https://demo.cloudbeaver.io
You can see a live demo of CloudBeaver here: https://demo.cloudbeaver.io

[Database access instructions](https://github.com/dbeaver/cloudbeaver/wiki/Demo-Server)

Expand All @@ -25,7 +25,7 @@ You can see live demo of CloudBeaver here: https://demo.cloudbeaver.io
### 24.2.0. 2024-09-02
### Changes since 24.1.0:
- General:
- French language support was added (thanks to @matthieukhl)
- French language support was added (thanks to [matthieukhl](https://github.com/matthieukhl))
- Added the ability to close editor tabs with the middle mouse button
- Added right-click support to open the context menu in the Metadata Editor
- The list of forbidden characters for naming and renaming resource manager files has been updated, and now it includes the following characters: / : " \ ' <> | ? *
Expand All @@ -45,9 +45,15 @@ You can see live demo of CloudBeaver here: https://demo.cloudbeaver.io
- Administration:
- Redesigned administration navigation panel - now it is more compact and clear
- Added the ability to change the default commit mode for each connection separately
- Added the ability to configure the server property rootURI parameter (thanks to @arioko)
- Added the ability to configure the server property rootURI parameter (thanks to [arioko](https://github.com/arioko))
- Databases:
- Added the "Keep alive" setting for Db2 LUW and IMB i, Apache Kyuubi, Clickhouse, Firebird, and Trino
- Updated Firebird driver to version 5.0.4
- DDL generation for Oracle Tablespaces was added (thanks to @pandya09)
- DDL generation for Oracle Tablespaces was added (thanks to [pandya09](https://github.com/pandya09))

## Contribution
As a community-driven open-source project, we warmly welcome contributions through GitHub pull requests.

[We are happy to reward](https://dbeaver.com/help-beaver/) our most active contributors every major sprint.
The most significant contribution to our code for the major release 24.2.0 was made by:
1. [matthieukhl](https://github.com/matthieukhl)
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import org.eclipse.jetty.server.session.DefaultSessionCache;
import org.eclipse.jetty.server.session.DefaultSessionIdManager;
import org.eclipse.jetty.server.session.NullSessionDataStore;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
Expand Down Expand Up @@ -184,7 +183,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;
}
}
}


}
11 changes: 9 additions & 2 deletions webapp/packages/core-administration/src/locales/zh.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2024 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
export default [
['administration_menu_enter', '管理'],
['administration_menu_back', '返回应用'],
['administration_configuration_wizard_title', '初始化服务器配置'],
['administration_configuration_wizard_finish_success_title', 'Server configured'],
['administration_configuration_wizard_finish_success_message', 'You can log-in as administrator in order to set up additional parameters.'],
['administration_configuration_wizard_finish_success_title', '服务器已完成配置'],
['administration_configuration_wizard_finish_success_message', '您可以使用管理员登录后进行更多参数配置。'],
];
16 changes: 14 additions & 2 deletions webapp/packages/core-authentication/src/UsersResource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { runInAction } from 'mobx';

import { injectable } from '@cloudbeaver/core-di';
import {
CACHED_RESOURCE_DEFAULT_PAGE_LIMIT,
Expand Down Expand Up @@ -240,6 +242,7 @@ export class UsersResource extends CachedMapResource<string, AdminUser, UserReso
}

const usersList: AdminUser[] = [];
const pages: Parameters<typeof this.offsetPagination.setPage>[] = [];

await ResourceKeyUtils.forEachAsync(originalKey, async key => {
let userId: string | undefined;
Expand Down Expand Up @@ -290,12 +293,21 @@ export class UsersResource extends CachedMapResource<string, AdminUser, UserReso

usersList.push(...users);

this.offsetPagination.setPageEnd(CachedResourceOffsetPageListKey(offset, users.length).setTarget(filterKey), users.length === limit);
pages.push([
CachedResourceOffsetPageListKey(offset, users.length).setParent(filterKey!),
users.map(user => user.userId),
users.length === limit,
]);
}
});

const key = resourceKeyList(usersList.map(user => user.userId));
this.set(key, usersList);
runInAction(() => {
this.set(key, usersList);
for (const pageArgs of pages) {
this.offsetPagination.setPage(...pageArgs);
}
});

return this.data;
}
Expand Down
21 changes: 14 additions & 7 deletions webapp/packages/core-authentication/src/locales/zh.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2024 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
export default [
['core_authentication_auth_settings_group', 'Authentication'],
['settings_authentication_disable_anonymous_access_name', 'Disable anonymous access'],
['settings_authentication_disable_anonymous_access_description', 'Disable anonymous access function'],
['core_authentication_auth_settings_group', '认证'],
['settings_authentication_disable_anonymous_access_name', '禁用匿名访问'],
['settings_authentication_disable_anonymous_access_description', '禁用匿名访问功能'],

['core_authentication_password_policy_min_length', 'Password must be at least {arg:min} characters long'],
['core_authentication_password_policy_upper_lower_case', 'Password must contain both upper and lower case letters'],
['core_authentication_password_policy_min_digits', 'Password must contain at least {arg:min} digits'],
['core_authentication_password_policy_min_special_characters', 'Password must contain at least {arg:min} special characters'],
['core_authentication_password_policy_min_length', '密码长度需要至少 {arg:min} 个字符'],
['core_authentication_password_policy_upper_lower_case', '密码必须包含大写和小写字母'],
['core_authentication_password_policy_min_digits', '密码至少需要包含 {arg:min} 个数字'],
['core_authentication_password_policy_min_special_characters', '密码至少需要包含 {arg:min} 个特殊字符'],
];
2 changes: 2 additions & 0 deletions webapp/packages/core-blocks/src/BlocksLocaleService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ export class BlocksLocaleService extends Bootstrap {
return (await import('./locales/ru')).default;
case 'it':
return (await import('./locales/it')).default;
case 'zh':
return (await import('./locales/zh')).default;
case 'fr':
return (await import('./locales/fr')).default;
default:
Expand Down
Loading

0 comments on commit 3cf2d2a

Please sign in to comment.