Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
3f2c4f9
dbeaver/pro#9532 Support user AI credentials
yagudin10 Sep 2, 2026
6e8adb4
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 2, 2026
44a7aaa
dbeaver/pro#9532 adds frontend for user-scoped profiles
sergeyteleshev Sep 2, 2026
876de8d
dbeaver/pro#9532 splits ai profiles feature to modules respectively
sergeyteleshev Sep 2, 2026
714fe2d
dbeaver/pro#9532 adds dialog ux improvements
sergeyteleshev Sep 2, 2026
2bd0b43
dbeaver/pro#9532 cleanup
sergeyteleshev Sep 2, 2026
2488d28
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 3, 2026
3abec21
dbeaver/pro#9532 build fix
sergeyteleshev Sep 3, 2026
b94172c
dbeaver/pro#9532 adds shared table for profiles (user info & ai setti…
sergeyteleshev Sep 3, 2026
2fb5f89
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 3, 2026
3a89e8c
dbeaver/pro#9532 adds radio group label styles for scope
sergeyteleshev Sep 3, 2026
8e4bb95
dbeaver/pro#9532 fixes width blink for creds dialog
sergeyteleshev Sep 3, 2026
98a01a4
dbeaver/pro#9532 add slide panel + form flow for user scope profile c…
sergeyteleshev Sep 3, 2026
3c8cee4
dbeaver/pro#9532 fixes width issue with names
sergeyteleshev Sep 3, 2026
8aafb69
dbeaver/pro#9532 adds scope column
sergeyteleshev Sep 3, 2026
3d486dd
dbeaver/pro#9532 outdates conversations for deleted profiles
sergeyteleshev Sep 3, 2026
66f34a2
dbeaver/pro#9532 ui adjustments
sergeyteleshev Sep 4, 2026
25ca4e3
dbeaver/pro#9532 fixes credentials sync
sergeyteleshev Sep 4, 2026
b0c393f
dbeaver/pro#9532 adjustments name column width
sergeyteleshev Sep 4, 2026
d760183
dbeaver/pro#9532 closes profile form after successful creation
sergeyteleshev Sep 4, 2026
50c7384
dbeaver/pro#9532 cleanup
sergeyteleshev Sep 4, 2026
8f2f8fb
dbeaver/pro#9532 cleanup 2
sergeyteleshev Sep 4, 2026
4dbc94c
dbeaver/pro#9532 cleanup 3
sergeyteleshev Sep 4, 2026
6e66128
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 4, 2026
834e13f
dbeaver/pro#9532 closes modal dialog after successful token saving
sergeyteleshev Sep 4, 2026
5cf29ef
dbeaver/pro#9532 cleanup 4
sergeyteleshev Sep 4, 2026
816af10
dbeaver/pro#9532 use default profile if previous was deleted
yagudin10 Sep 7, 2026
9373fdb
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 8, 2026
3700a52
dbeaver/pro#9532 fixes sync for profiles
sergeyteleshev Sep 8, 2026
dd0a416
Merge branch 'devel' into dbeaver/pro#9532-user-ai-credentials
sergeyteleshev Sep 10, 2026
9ff560f
dbeaver/pro#9532 pr review fixes
sergeyteleshev Sep 10, 2026
c14e1a9
dbeaver/pro#9532 Store embedded user secrets
yagudin10 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2024 DBeaver Corp and others
* Copyright (C) 2010-2026 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.
Expand Down Expand Up @@ -40,6 +40,11 @@ public VoidSecretController() {

}

@Override
public long getSupportedFeatures() {
return 0;
}

@Nullable
@Override
public String getPrivateSecretValue(@NotNull String secretId) {
Expand Down Expand Up @@ -68,4 +73,4 @@ public void authorize(
) throws DBException {

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ private void setUserPermissions(Set<String> permissions) {
}

@NotNull
public DBSSecretController getSecretController() throws DBException {
if (this.securityController == null) {
public synchronized DBSSecretController getSecretController() throws DBException {
if (this.secretController == null) {
this.secretController = application.getSecretController(this, workspace.getAuthContext());
}
return secretController;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2025 DBeaver Corp and others
* Copyright (C) 2010-2026 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.
Expand Down Expand Up @@ -47,6 +47,7 @@
private long maxSessionIdleTime = CBAuthConstants.MAX_SESSION_IDLE_TIME;
private boolean develMode = false;
private boolean enableSecurityManager = false;
protected String secretController = "cb-embedded";
private final Map<String, Object> productSettings = new HashMap<>();

@SerializedName("sm")
Expand Down Expand Up @@ -147,7 +148,15 @@
this.enableSecurityManager = enableSecurityManager;
}

public String getSecretControllerId() {

Check warning on line 151 in server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 Reference type 'String' is missing a nullability annotation. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java:151:12: warning: Reference type 'String' is missing a nullability annotation. (sh.adelessfox.checkstyle.checks.NullabilityAnnotationsCheck)
return secretController;
}

public void setSecretControllerId(String secretControllerId) {

Check warning on line 155 in server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 Reference type 'String' is missing a nullability annotation. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java:155:39: warning: Reference type 'String' is missing a nullability annotation. (sh.adelessfox.checkstyle.checks.NullabilityAnnotationsCheck)
this.secretController = secretControllerId;
}

public void setDatabaseConfiguration(WebDatabaseConfig databaseConfiguration) {

Check warning on line 159 in server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 Reference type 'WebDatabaseConfig' is missing a nullability annotation. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/model/config/CBServerConfig.java:159:42: warning: Reference type 'WebDatabaseConfig' is missing a nullability annotation. (sh.adelessfox.checkstyle.checks.NullabilityAnnotationsCheck)
this.databaseConfiguration = databaseConfiguration;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@
import org.jkiss.dbeaver.model.app.DBPWorkspace;
import org.jkiss.dbeaver.model.auth.SMAuthConfiguration;
import org.jkiss.dbeaver.model.auth.SMCredentialsProvider;
import org.jkiss.dbeaver.model.auth.SMSessionContext;
import org.jkiss.dbeaver.model.rm.RMController;
import org.jkiss.dbeaver.model.secret.DBSSecretController;
import org.jkiss.dbeaver.model.secret.SecretControllerRegistry;
import org.jkiss.dbeaver.model.security.SMAdminController;
import org.jkiss.dbeaver.model.security.SMController;
import org.jkiss.dbeaver.registry.LocalFileController;
Expand Down Expand Up @@ -75,6 +78,17 @@
);
}

@NotNull
@Override
public DBSSecretController getSecretController(
@NotNull SMCredentialsProvider credentialsProvider,
SMSessionContext smSessionContext

Check warning on line 85 in server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplicationCE.java

View workflow job for this annotation

GitHub Actions / Server / Lint

[checkstyle] reported by reviewdog 🐶 Reference type 'SMSessionContext' is missing a nullability annotation. Raw Output: /github/workspace/./server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplicationCE.java:85:9: warning: Reference type 'SMSessionContext' is missing a nullability annotation. (sh.adelessfox.checkstyle.checks.NullabilityAnnotationsCheck)
) throws DBException {
return SecretControllerRegistry.getInstance().getAuthorizedSecretController(
getServerConfiguration().getSecretControllerId(), credentialsProvider, smSessionContext
);
}

@NotNull
@Override
public RMController createResourceController(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ type AIConfigurationProfileInfo @since(version: "26.1.3") {
name: String!
"ID of the AI engine that this profile belongs to."
engineId: ID!
"Whether this profile uses global administrator-managed credentials."
global: Boolean! @since(version: "26.2.0")
"Whether the current user has saved credentials for this profile."
credentialsSaved: Boolean! @since(version: "26.2.0")
}

type AIAdminConfigurationProfileInfo @since(version: "26.1.3") {
Expand All @@ -129,6 +133,8 @@ type AIAdminConfigurationProfileInfo @since(version: "26.1.3") {
name: String!
"ID of the AI engine that this profile belongs to."
engineId: ID!
"Whether this profile uses global administrator-managed credentials."
global: Boolean! @since(version: "26.2.0")
"Configuration of the AI engine profile."
configuration: [ObjectPropertyInfo!]!
}
Expand Down Expand Up @@ -226,13 +232,18 @@ input AIConfigurationProfileInput @since(version: "26.1.3") {
configuration: AIEngineConfig
}

input AIProfileCredentialsInput @since(version: "26.2.0") {
"Credential property values keyed by AI engine property ID."
properties: Object!
}

extend type Query @since(version: "23.2.2") {
"Returns the list of available AI engines."
aiListEngines: [AIEngineInfo!]
"Returns the global AI settings."
aiSettings: AISettingsInfo!
"Returns the properties of the specified AI engine for displaying it in the UI. In case settings are passed, fills it with defaults and returns back."
aiListEngineProperties(engineId: ID!, profileId: ID, settings : AIEngineConfig): [ObjectPropertyInfo!]!
aiListEngineProperties(engineId: ID!, profileId: ID, settings: AIEngineConfig): [ObjectPropertyInfo!]!
"Returns models available for the specified AI engine configuration."
aiListEngineModels(engineId: ID!, profileId: ID, settings: AIEngineConfig): [AIModelInfo!]! @since(version: "26.2.0")

Expand Down Expand Up @@ -267,6 +278,8 @@ extend type Mutation @since(version: "23.2.2") {
aiUpdateProfile(config: AIConfigurationProfileInput!): AIAdminConfigurationProfileInfo! @since(version: "26.1.3")
"Deletes the specified AI engine configuration profile."
aiDeleteProfile(profileId: ID!): Boolean! @since(version: "26.1.3")
"Saves or updates the current user's credentials for a non-global profile. Empty values clear credentials."
aiSaveProfileCredentials(profileId: ID!, credentials: AIProfileCredentialsInput!): Boolean! @since(version: "26.2.0")

"""
Creates a new AI chat conversation.
Expand Down
Loading
Loading