Skip to content

Commit

Permalink
Test Camunda 8 + Identity
Browse files Browse the repository at this point in the history
  • Loading branch information
pierre-yves-monnet committed Aug 14, 2024
1 parent 3368c4e commit ed24f8b
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 64 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,23 +344,23 @@ mvn clean install
````
Now, create a docker image
````
docker build -t pierre-yves-monnet/processautomator:1.5.1 .
docker build -t pierre-yves-monnet/processautomator:1.5.2 .
````
Push the image to the Camunda hub (you must be login first to the docker registry)
````
docker tag pierre-yves-monnet/processautomator:1.5.1 ghcr.io/camunda-community-hub/process-execution-automator:1.5.1
docker push ghcr.io/camunda-community-hub/process-execution-automator:1.5.1
docker tag pierre-yves-monnet/processautomator:1.5.2 ghcr.io/camunda-community-hub/process-execution-automator:1.5.2
docker push ghcr.io/camunda-community-hub/process-execution-automator:1.5.2
````
Tag as the latest:
````
docker tag pierre-yves-monnet/processautomator:1.5.1 ghcr.io/camunda-community-hub/process-execution-automator:latest
docker tag pierre-yves-monnet/processautomator:1.5.2 ghcr.io/camunda-community-hub/process-execution-automator:latest
docker push ghcr.io/camunda-community-hub/process-execution-automator:latest
````
Expand Down
2 changes: 1 addition & 1 deletion src/main/frontend/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<img src={logo} className="App-logo" alt="logo"/>
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
Expand Down
4 changes: 2 additions & 2 deletions src/main/frontend/src/App.test.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { render, screen } from '@testing-library/react';
import {render, screen} from '@testing-library/react';
import App from './App';

test('renders learn react link', () => {
render(<App />);
render(<App/>);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
*/
public class BpmnEngineConfigurationInstance {

public static BpmnEngineList getZeebeSaas(String zeebeGatewayAddress, String zeebeSecurityPlainText) {
public static BpmnEngineList getZeebeSaas(String zeebeGatewayAddress, Boolean zeebePlainText) {
BpmnEngineList bpmEngineConfiguration = new BpmnEngineList();

BpmnEngineList.BpmnServerDefinition serverDefinition = new BpmnEngineList.BpmnServerDefinition();
serverDefinition.serverType = BpmnEngineList.CamundaEngine.CAMUNDA_8;
serverDefinition.zeebeGatewayAddress = zeebeGatewayAddress;
serverDefinition.zeebeSecurityPlainText = zeebeSecurityPlainText;
serverDefinition.zeebePlainText = zeebePlainText;

bpmEngineConfiguration.addExplicitServer(serverDefinition);
return bpmEngineConfiguration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ private BpmnEngineCamunda8(BenchmarkStartPiExceptionHandlingStrategy exceptionHa
* Constructor from existing object
*
* @param serverDefinition server definition
* @param logDebug if true, operation will be log as debug level
* @param logDebug if true, operation will be logged as debug level
*/
public static BpmnEngineCamunda8 getFromServerDefinition(BpmnEngineList.BpmnServerDefinition serverDefinition,
BenchmarkStartPiExceptionHandlingStrategy benchmarkStartPiExceptionHandlingStrategy,
Expand All @@ -116,15 +116,15 @@ public static BpmnEngineCamunda8 getFromServerDefinition(BpmnEngineList.BpmnServ
/**
* Constructor to specify a Self Manage Zeebe Address por a Zeebe Saas
*
* @param zeebeSelfGatewayAddress Self Manage : zeebe address
* @param zeebeSelfSecurityPlainText Self Manage: Plain text
* @param operateUrl URL to access Operate
* @param operateUserName Operate user name
* @param operateUserPassword Operate password
* @param tasklistUrl Url to access TaskList
* @param zeebeSelfGatewayAddress Self Manage : zeebe address
* @param zeebePlainText Self Manage: Plain text
* @param operateUrl URL to access Operate
* @param operateUserName Operate user name
* @param operateUserPassword Operate password
* @param tasklistUrl Url to access TaskList
*/
public static BpmnEngineCamunda8 getFromCamunda8(String zeebeSelfGatewayAddress,
String zeebeSelfSecurityPlainText,
Boolean zeebePlainText,
String operateUrl,
String operateUserName,
String operateUserPassword,
Expand All @@ -135,7 +135,7 @@ public static BpmnEngineCamunda8 getFromCamunda8(String zeebeSelfGatewayAddress,
bpmnEngineCamunda8.serverDefinition.serverType = BpmnEngineList.CamundaEngine.CAMUNDA_8;
bpmnEngineCamunda8.serverDefinition = new BpmnEngineList.BpmnServerDefinition();
bpmnEngineCamunda8.serverDefinition.zeebeGatewayAddress = zeebeSelfGatewayAddress;
bpmnEngineCamunda8.serverDefinition.zeebeSecurityPlainText = zeebeSelfSecurityPlainText;
bpmnEngineCamunda8.serverDefinition.zeebePlainText = zeebePlainText;


/*
Expand Down Expand Up @@ -218,7 +218,7 @@ public void connection() throws AutomatorException {
}
}

public void disconnection() {
public void disconnection() {
// nothing to do here
}

Expand Down Expand Up @@ -816,13 +816,15 @@ private void connectZeebe(StringBuilder analysis) throws AutomatorException {
* See JavaDoc on class level for details
*/
isOk = stillOk(serverDefinition.authenticationUrl, "authenticationUrl", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.zeebeAudience, "zeebeAudience", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.zeebeClientId, "ClientId", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.zeebeClientSecret, "ClientSecret", analysis, true, true, isOk);

try {

OAuthCredentialsProvider credentialsProvider = new OAuthCredentialsProviderBuilder() // formatting
.authorizationServerUrl(serverDefinition.authenticationUrl!=null? serverDefinition.authenticationUrl: SAAS_AUTHENTICATE_URL)
.authorizationServerUrl(
serverDefinition.authenticationUrl != null ? serverDefinition.authenticationUrl : SAAS_AUTHENTICATE_URL)
.audience(serverDefinition.zeebeAudience)
.clientId(serverDefinition.zeebeClientId)
.clientSecret(serverDefinition.zeebeClientSecret)
Expand All @@ -847,19 +849,25 @@ else if (BpmnEngineList.CamundaEngine.CAMUNDA_8.equals(this.typeCamundaEngine))
isOk = stillOk(serverDefinition.zeebeAudience, "zeebeAudience", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.zeebeClientId, "zeebeClientId", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.zeebeClientSecret, "zeebeClientSecret", analysis, true, false, isOk);
isOk = stillOk(serverDefinition.zeebePlainText, "zeebePlainText", analysis, true, true, isOk);

try {
OAuthCredentialsProvider credentialsProvider = new OAuthCredentialsProviderBuilder().authorizationServerUrl(
serverDefinition.authenticationUrl)
OAuthCredentialsProvider credentialsProvider = new OAuthCredentialsProviderBuilder() // builder
.authorizationServerUrl(serverDefinition.authenticationUrl)
.audience(serverDefinition.zeebeAudience)
.clientId(serverDefinition.zeebeClientId)
.clientSecret(serverDefinition.zeebeClientSecret)
.build();
clientBuilder = ZeebeClient.newClientBuilder()
.gatewayAddress(serverDefinition.zeebeGatewayAddress)
.defaultTenantId(serverDefinition.zeebeTenantId == null ? "<default>" : serverDefinition.zeebeTenantId)
.credentialsProvider(credentialsProvider);
if (Boolean.TRUE.equals(serverDefinition.zeebePlainText))
clientBuilder.usePlaintext();

} catch (Exception e) {
zeebeClient = null;
logger.error("Can't connect to Server[{}] Analysis:{} : {}", serverDefinition.name, analysis, e);
throw new AutomatorException(
"BadCredential[" + serverDefinition.name + "] Analysis:" + analysis + " : " + e.getMessage());
}
Expand Down Expand Up @@ -948,8 +956,10 @@ private void connectOperate(StringBuilder analysis) throws AutomatorException {
JwtConfig jwtConfig = new JwtConfig();
jwtConfig.addProduct(Product.TASKLIST,
new JwtCredential(serverDefinition.zeebeClientId, serverDefinition.zeebeClientSecret,
serverDefinition.operateAudience!=null? serverDefinition.operateAudience : "operate.camunda.io",
serverDefinition.authenticationUrl!=null? serverDefinition.authenticationUrl: SAAS_AUTHENTICATE_URL));
serverDefinition.operateAudience != null ? serverDefinition.operateAudience : "operate.camunda.io",
serverDefinition.authenticationUrl != null ?
serverDefinition.authenticationUrl :
SAAS_AUTHENTICATE_URL));

Authentication saasAuthentication = SaaSAuthentication.builder()
.withJwtConfig(jwtConfig)
Expand Down Expand Up @@ -994,17 +1004,17 @@ private void connectOperate(StringBuilder analysis) throws AutomatorException {
identityConfig.addProduct(Product.OPERATE, new IdentityContainer(identity, identityConfiguration));

JwtConfig jwtConfig = new JwtConfig();
jwtConfig.addProduct(Product.TASKLIST, new JwtCredential(serverDefinition.operateClientId, // clientId
jwtConfig.addProduct(Product.OPERATE, new JwtCredential(serverDefinition.operateClientId, // clientId
serverDefinition.operateClientSecret, // clientSecret
"zeebe-api", // audience
serverDefinition.authenticationUrl));

io.camunda.common.auth.SelfManagedAuthenticationBuilder simpleAuthenticationBuilder = io.camunda.common.auth.SelfManagedAuthentication.builder();
simpleAuthenticationBuilder.withJwtConfig(jwtConfig);
simpleAuthenticationBuilder.withIdentityConfig(identityConfig);
io.camunda.common.auth.SelfManagedAuthenticationBuilder identityAuthenticationBuilder = io.camunda.common.auth.SelfManagedAuthentication.builder();
identityAuthenticationBuilder.withJwtConfig(jwtConfig);
identityAuthenticationBuilder.withIdentityConfig(identityConfig);

Authentication simpleAuthentication = simpleAuthenticationBuilder.build();
camundaOperateClientBuilder.authentication(simpleAuthentication)
Authentication identityAuthentication = identityAuthenticationBuilder.build();
camundaOperateClientBuilder.authentication(identityAuthentication)
.operateUrl(serverDefinition.operateUrl)
.setup()
.build();
Expand Down Expand Up @@ -1100,9 +1110,12 @@ private void connectTaskList(StringBuilder analysis) throws AutomatorException {
if (serverDefinition.isAuthenticationUrl()) {
isOk = stillOk(serverDefinition.taskListClientId, "taskListClientId", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.taskListClientSecret, "taskListClientSecret", analysis, true, false, isOk);
isOk = stillOk(serverDefinition.authenticationUrl, "authenticationUrl", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.taskListKeycloakUrl, "taskListKeycloakUrl", analysis, true, true, isOk);

taskListBuilder.taskListUrl(serverDefinition.taskListUrl)
.selfManagedAuthentication(serverDefinition.taskListClientId, serverDefinition.taskListClientSecret,
serverDefinition.authenticationUrl);
serverDefinition.taskListKeycloakUrl);
} else {
isOk = stillOk(serverDefinition.taskListUserName, "User", analysis, true, true, isOk);
isOk = stillOk(serverDefinition.taskListUserPassword, "Password", analysis, true, false, isOk);
Expand Down Expand Up @@ -1145,7 +1158,7 @@ private void connectTaskList(StringBuilder analysis) throws AutomatorException {
saTaskList = new io.camunda.tasklist.auth.SaasAuthentication(serverDefinition.zeebeSaasClientId,
serverDefinition.zeebeSaasClientSecret);
} catch (Exception e) {
logger.error("Can't connect to SaaS environemnt[{}] Analysis:{} : {}", serverDefinition.name, analysis, e);
logger.error("Can't connect to SaaS environment[{}] Analysis:{} : {}", serverDefinition.name, analysis, e);
throw new AutomatorException(
"Can't connect to SaaS environment[" + serverDefinition.name + "] Analysis:" + analysis + " fail : "
+ e.getMessage());
Expand Down Expand Up @@ -1200,19 +1213,28 @@ private boolean stillOk(Object value,
boolean displayValueInAnalysis,
boolean wasOkBefore) {
analysis.append(message);
analysis.append(" [");
analysis.append(displayValueInAnalysis ? value : "***");
analysis.append("]");
analysis.append("[");
analysis.append(getDisplayValue(value, displayValueInAnalysis));
analysis.append("], ");

if (check) {
if (value == null || (value instanceof String valueString && valueString.isEmpty())) {
analysis.append("No ");
analysis.append(message);
logger.error("Check failed {} value:[{}]", message, displayValueInAnalysis ? value : "***");
logger.error("Check failed {} value:[{}]", message, getDisplayValue(value, displayValueInAnalysis));
return false;
}
}
return wasOkBefore;
}

private String getDisplayValue(Object value, boolean displayValueInAnalysis) {
if (value == null)
return "null";
if (displayValueInAnalysis)
return value.toString();
if (value.toString().length() <= 3)
return "***";
return value.toString().substring(0, 3) + "***";
}
}
Loading

0 comments on commit ed24f8b

Please sign in to comment.