Skip to content

Commit bb653eb

Browse files
committed
support bearer token
1 parent a325853 commit bb653eb

File tree

9 files changed

+74
-7
lines changed

9 files changed

+74
-7
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@
108108
<artifactId>jsr311-api</artifactId>
109109
<version>1.0</version>
110110
</dependency>
111+
<dependency>
112+
<groupId>org.eclipse.platform</groupId>
113+
<artifactId>org.eclipse.core.jobs</artifactId>
114+
<version>3.10.100</version>
115+
</dependency>
111116
</dependencies>
112117

113118
<build>

src/main/java/com/katalon/plugin/jira/composer/constant/ComposerJiraIntegrationMessageConstant.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ private ComposerJiraIntegrationMessageConstant() {
3737

3838
public static String PREF_CHCK_ENCRYPT_PASSWORD;
3939

40+
public static String PREF_LBL_BEARER_TOKEN;
41+
4042
public static String PREF_LBL_CONNECT;
4143

4244
public static String PREF_LBL_FETCH_CUSTOM_FIELDS;

src/main/java/com/katalon/plugin/jira/composer/preference/JiraSettingsComposite.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public class JiraSettingsComposite implements JiraUIComponent {
6565

6666
private Composite mainComposite;
6767

68-
private Text txtServerUrl, txtUsername, txtPassword;
68+
private Text txtServerUrl, txtUsername, txtPassword, txtBearerToken;
6969

7070
private Button chckUseTestCaseNameAsSumarry, chckAttachScreenshot, chckAttachLog;
7171

@@ -222,6 +222,7 @@ private DisplayedComboboxObject<JiraIssueType> getIssueTypeForProject(JiraProjec
222222

223223
private void maskPasswordField() {
224224
txtPassword.setEchoChar("\u2022".charAt(0));
225+
txtBearerToken.setEchoChar("\u2022".charAt(0));
225226
}
226227

227228
public void setShell(Shell shell) {
@@ -253,6 +254,7 @@ public void initializeData() {
253254
txtServerUrl.setText(settingStore.getServerUrl(encryptionEnabled));
254255
txtUsername.setText(settingStore.getUsername(encryptionEnabled));
255256
txtPassword.setText(settingStore.getPassword(encryptionEnabled));
257+
txtBearerToken.setText(settingStore.getBearerToken(encryptionEnabled));
256258
chckEncrypt.setSelection(encryptionEnabled);
257259
maskPasswordField();
258260

@@ -369,6 +371,12 @@ private void createAuthenticationGroup() {
369371
txtPassword = new Text(passwordComposite, SWT.BORDER);
370372
txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
371373

374+
Label lblBearerToken = new Label(grpAuthentication, SWT.NONE);
375+
lblBearerToken.setText(ComposerJiraIntegrationMessageConstant.PREF_LBL_BEARER_TOKEN);
376+
377+
txtBearerToken = new Text(grpAuthentication, SWT.BORDER);
378+
txtBearerToken.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
379+
372380
chckEncrypt = new Button(grpAuthentication, SWT.CHECK);
373381
chckEncrypt.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, true, 2, 1));
374382
chckEncrypt.setText(ComposerJiraIntegrationMessageConstant.PREF_CHCK_ENCRYPT_PASSWORD);
@@ -465,6 +473,7 @@ public boolean okPressed() {
465473
settingStore.saveServerUrl(getTrimedValue(txtServerUrl), encryptionEnable);
466474
settingStore.saveUsername(getTrimedValue(txtUsername), encryptionEnable);
467475
settingStore.savePassword(txtPassword.getText(), encryptionEnable);
476+
settingStore.saveBearerToken(txtBearerToken.getText(), encryptionEnable);
468477
settingStore.saveJiraUser(user);
469478
settingStore.enableEncryption(encryptionEnable);
470479

@@ -508,6 +517,7 @@ private JiraCredential getEdittingCredential() {
508517
credential.setServerUrl(getTrimedValue(txtServerUrl));
509518
credential.setUsername(getTrimedValue(txtUsername));
510519
credential.setPassword(txtPassword.getText());
520+
credential.setBearerToken(txtBearerToken.getText());
511521
return credential;
512522
}
513523

src/main/java/com/katalon/plugin/jira/composer/toolbar/handler/ImportJiraJQLHandler.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.commons.io.FileUtils;
1313
import org.apache.commons.lang3.StringUtils;
1414
import org.apache.commons.text.StringEscapeUtils;
15+
import org.apache.http.HttpHeaders;
1516
import org.eclipse.core.runtime.IProgressMonitor;
1617
import org.eclipse.core.runtime.IStatus;
1718
import org.eclipse.core.runtime.Status;
@@ -21,6 +22,8 @@
2122
import org.joda.time.DateTimeZone;
2223
import org.joda.time.tz.UTCProvider;
2324

25+
import com.atlassian.httpclient.api.Request.Builder;
26+
import com.atlassian.jira.rest.client.api.AuthenticationHandler;
2427
import com.atlassian.jira.rest.client.api.JiraRestClient;
2528
import com.atlassian.jira.rest.client.api.JiraRestClientFactory;
2629
import com.atlassian.jira.rest.client.api.domain.Field;
@@ -104,8 +107,22 @@ protected IStatus run(IProgressMonitor monitor) {
104107
List<TestCaseEntity> testCases = new ArrayList<>();
105108

106109
JiraRestClientFactory clientFactory = new AsynchronousJiraRestClientFactory();
107-
restClient = clientFactory.createWithBasicHttpAuthentication(URI.create(credential.getServerUrl()),
108-
credential.getUsername(), credential.getPassword());
110+
if (credential.getBearerToken().isEmpty()) {
111+
restClient = clientFactory.createWithBasicHttpAuthentication(
112+
URI.create(credential.getServerUrl()), credential.getUsername(),
113+
credential.getPassword());
114+
} else {
115+
clientFactory.createWithAuthenticationHandler(URI.create(credential.getServerUrl()),
116+
new AuthenticationHandler() {
117+
118+
@Override
119+
public void configure(Builder builder) {
120+
builder.setHeader(HttpHeaders.AUTHORIZATION,
121+
"Bearer " + credential.getBearerToken());
122+
123+
}
124+
});
125+
}
109126
DateTimeZone.setProvider(new UTCProvider());
110127

111128
ableToGetCustomFieldContentFromJiraCloud = true;

src/main/java/com/katalon/plugin/jira/core/JiraCredential.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public class JiraCredential {
77

88
private String password;
99

10+
private String bearerToken;
11+
1012
public String getServerUrl() {
1113
return serverUrl;
1214
}
@@ -30,4 +32,12 @@ public String getPassword() {
3032
public void setPassword(String password) {
3133
this.password = password;
3234
}
35+
36+
public String getBearerToken() {
37+
return bearerToken;
38+
}
39+
40+
public void setBearerToken(String bearerToken) {
41+
this.bearerToken = bearerToken;
42+
}
3343
}

src/main/java/com/katalon/plugin/jira/core/constant/StringConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class StringConstants {
2929

3030
public static final String PREF_AUTH_PASSWORD = "auth.password";
3131

32+
public static final String PREF_AUTH_BEARER_TOKEN = "auth.bearerToken";
33+
3234
public static final String PREF_AUTH_USERNAME = "auth.username";
3335

3436
public static final String PREF_AUTH_USER = "auth.user";

src/main/java/com/katalon/plugin/jira/core/request/JiraIntegrationRequest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,13 @@ protected CloseableHttpClient getClientBuilder() throws GeneralSecurityException
174174
}
175175

176176
protected void addAuthenticationHeader(JiraCredential credential, HttpRequestBase request) {
177-
String authEncoded = new Base64()
178-
.encodeAsString((credential.getUsername() + ":" + credential.getPassword()).getBytes());
179-
request.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + authEncoded);
177+
if (credential.getBearerToken().isEmpty()) {
178+
String authEncoded = new Base64()
179+
.encodeAsString((credential.getUsername() + ":" + credential.getPassword()).getBytes());
180+
request.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + authEncoded);
181+
} else {
182+
request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + credential.getBearerToken());
183+
}
180184
request.setHeader("X-Atlassian-Token", "no-check");
181185
}
182186

src/main/java/com/katalon/plugin/jira/core/setting/JiraIntegrationSettingStore.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import static com.katalon.plugin.jira.core.constant.StringConstants.PREF_SUBMIT_USE_TEST_CASE_NAME_AS_SUMMARY;
1717
import static com.katalon.plugin.jira.core.constant.StringConstants.MIGRATE_PROJECT_SCOPE;
1818
import static com.katalon.plugin.jira.core.constant.StringConstants.PREF_SUBMIT_FETCH_JIRA_CLOUD_CONTENT;
19-
19+
import static com.katalon.plugin.jira.core.constant.StringConstants.PREF_AUTH_BEARER_TOKEN;
2020
import java.io.IOException;
2121
import java.lang.reflect.Type;
2222
import java.security.GeneralSecurityException;
@@ -72,11 +72,27 @@ public String getPassword(boolean encryptionEnabled)
7272
return decryptedString;
7373
}
7474

75+
public String getBearerToken(boolean encryptionEnabled)
76+
throws IOException, GeneralSecurityException, InvalidDataTypeFormatException, CryptoException {
77+
boolean shouldDecrypted = isEncryptionMigrated() && encryptionEnabled;
78+
String decryptedString = delegate.getString(PREF_AUTH_BEARER_TOKEN, StringUtils.EMPTY, shouldDecrypted);
79+
if (shouldDecrypted) {
80+
if (decryptedString.startsWith("\"") && decryptedString.endsWith("\"")) {
81+
return decryptedString.substring(1, decryptedString.length() - 1);
82+
}
83+
}
84+
return decryptedString;
85+
}
86+
7587
public void savePassword(String rawPassword, boolean encryptEnabled)
7688
throws IOException, GeneralSecurityException, CryptoException {
7789
delegate.setString(PREF_AUTH_PASSWORD, rawPassword, encryptEnabled);
7890
}
7991

92+
public void saveBearerToken(String rawBearerToken, boolean encryptEnabled) throws CryptoException {
93+
delegate.setString(PREF_AUTH_BEARER_TOKEN, rawBearerToken, encryptEnabled);
94+
}
95+
8096
public boolean isEncryptionEnabled() throws IOException {
8197
return delegate.getBoolean(PREF_AUTH_ENCRYPTION_ENABLED, false);
8298
}

src/main/resources/com/katalon/plugin/jira/composer/constant/ComposerJiraIntegrationMessage.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ PREF_TITLE_SUBMIT_OPTIONS=Submit Options
44
PREF_LBL_SERVER_URL=Server URL:
55
PREF_LBL_USERNAME=Username:
66
PREF_LBL_PASSWORD=Password
7+
PREF_LBL_BEARER_TOKEN=Bearer Token
78
PREF_LBL_API_TOKEN=API Token
89
PREF_CHCK_SHOW_PASSWORD=Show password
910
PREF_CHCK_ENCRYPT_PASSWORD=Encrypt authentication data (recommended)

0 commit comments

Comments
 (0)