Skip to content

Commit 41a20b3

Browse files
authored
feat(confluence): update authentication parameters (#325)
* feat(confluence): update authentication parameters * fix: integration tests * Change the version 0.4.0 * Update __version__.py
1 parent f4b4f14 commit 41a20b3

File tree

5 files changed

+46
-22
lines changed

5 files changed

+46
-22
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
## 0.3.16-dev0
1+
## 0.4.0
2+
3+
### Enhancements
4+
5+
* **Change Confluence Source Connector authentication parameters to support password, api token, pat token and cloud authentication**
26

37
### Fixes
48

test/integration/connectors/test_confluence.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ async def test_confluence_source(temp_dir):
3030
spaces = ["testteamsp", "MFS"]
3131

3232
# Create connection and indexer configurations
33-
access_config = ConfluenceAccessConfig(api_token=api_token)
33+
access_config = ConfluenceAccessConfig(password=api_token)
3434
connection_config = ConfluenceConnectionConfig(
3535
url=confluence_url,
36-
user_email=user_email,
36+
username=user_email,
3737
access_config=access_config,
3838
)
3939
index_config = ConfluenceIndexerConfig(
@@ -77,10 +77,10 @@ async def test_confluence_source_large(temp_dir):
7777
spaces = ["testteamsp1"]
7878

7979
# Create connection and indexer configurations
80-
access_config = ConfluenceAccessConfig(api_token=api_token)
80+
access_config = ConfluenceAccessConfig(password=api_token)
8181
connection_config = ConfluenceConnectionConfig(
8282
url=confluence_url,
83-
user_email=user_email,
83+
username=user_email,
8484
access_config=access_config,
8585
)
8686
index_config = ConfluenceIndexerConfig(

test/unit/v2/connectors/test_confluence.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ def test_connection_config_multiple_auth():
1111
with pytest.raises(ValidationError):
1212
ConfluenceConnectionConfig(
1313
access_config=ConfluenceAccessConfig(
14-
api_token="api_token",
15-
access_token="access_token",
14+
password="api_token",
15+
token="access_token",
1616
),
17-
user_email="user_email",
17+
username="user_email",
1818
url="url",
1919
)
2020

@@ -26,14 +26,14 @@ def test_connection_config_no_auth():
2626

2727
def test_connection_config_basic_auth():
2828
ConfluenceConnectionConfig(
29-
access_config=ConfluenceAccessConfig(api_token="api_token"),
29+
access_config=ConfluenceAccessConfig(password="api_token"),
3030
url="url",
31-
user_email="user_email",
31+
username="user_email",
3232
)
3333

3434

3535
def test_connection_config_pat_auth():
3636
ConfluenceConnectionConfig(
37-
access_config=ConfluenceAccessConfig(access_token="access_token"),
37+
access_config=ConfluenceAccessConfig(token="access_token"),
3838
url="url",
3939
)

unstructured_ingest/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.3.16-dev0" # pragma: no cover
1+
__version__ = "0.4.0" # pragma: no cover

unstructured_ingest/v2/processes/connectors/confluence.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,45 @@
3030

3131

3232
class ConfluenceAccessConfig(AccessConfig):
33-
api_token: Optional[str] = Field(description="Confluence API token", default=None)
34-
access_token: Optional[str] = Field(
35-
description="Confluence Personal Access Token", default=None
33+
password: Optional[str] = Field(
34+
description="Confluence password or Cloud API token",
35+
default=None,
36+
)
37+
token: Optional[str] = Field(
38+
description="Confluence Personal Access Token",
39+
default=None,
3640
)
3741

3842

3943
class ConfluenceConnectionConfig(ConnectionConfig):
4044
url: str = Field(description="URL of the Confluence instance")
41-
user_email: Optional[str] = Field(description="User email for authentication", default=None)
45+
username: Optional[str] = Field(
46+
description="Username or email for authentication",
47+
default=None,
48+
)
49+
cloud: bool = Field(description="Authenticate to Confluence Cloud", default=False)
4250
access_config: Secret[ConfluenceAccessConfig] = Field(
4351
description="Access configuration for Confluence"
4452
)
4553

4654
def model_post_init(self, __context):
4755
access_configs = self.access_config.get_secret_value()
48-
basic_auth = self.user_email and access_configs.api_token
49-
pat_auth = access_configs.access_token
56+
basic_auth = self.username and access_configs.password
57+
pat_auth = access_configs.token
58+
if self.cloud and not basic_auth:
59+
raise ValueError(
60+
"cloud authentication requires username and API token (--password), "
61+
"see: https://atlassian-python-api.readthedocs.io/"
62+
)
5063
if basic_auth and pat_auth:
51-
raise ValueError("both forms of auth provided, only one allowed")
64+
raise ValueError(
65+
"both password and token provided, only one allowed, "
66+
"see: https://atlassian-python-api.readthedocs.io/"
67+
)
5268
if not (basic_auth or pat_auth):
53-
raise ValueError("neither forms of auth provided")
69+
raise ValueError(
70+
"no form of auth provided, see: https://atlassian-python-api.readthedocs.io/"
71+
)
5472

5573
@requires_dependencies(["atlassian"], extras="confluence")
5674
def get_client(self) -> "Confluence":
@@ -59,8 +77,10 @@ def get_client(self) -> "Confluence":
5977
access_configs = self.access_config.get_secret_value()
6078
return Confluence(
6179
url=self.url,
62-
username=self.user_email,
63-
password=access_configs.api_token,
80+
username=self.username,
81+
password=access_configs.password,
82+
token=access_configs.token,
83+
cloud=self.cloud,
6484
)
6585

6686

0 commit comments

Comments
 (0)