Skip to content

Commit 0fa9090

Browse files
committed
feat(nextcloud): Make server configurable via app.settings
1 parent 1dc9840 commit 0fa9090

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

allauth/socialaccount/providers/nextcloud/views.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import xml.etree.ElementTree as ET
22

3+
from allauth.core import context
34
from allauth.socialaccount import app_settings
45
from allauth.socialaccount.adapter import get_adapter
56
from allauth.socialaccount.providers.oauth2.views import (
@@ -11,11 +12,27 @@
1112

1213
class NextCloudOAuth2Adapter(OAuth2Adapter):
1314
provider_id = "nextcloud"
14-
settings = app_settings.PROVIDERS.get(provider_id, {})
15-
server = settings.get("SERVER", "https://nextcloud.example.org")
16-
access_token_url = "{0}/apps/oauth2/api/v1/token".format(server)
17-
authorize_url = "{0}/apps/oauth2/authorize".format(server)
18-
profile_url = "{0}/ocs/v1.php/cloud/users/".format(server)
15+
16+
def _build_server_url(self, path):
17+
settings = app_settings.PROVIDERS.get(self.provider_id, {})
18+
server = settings.get("SERVER", "https://nextcloud.example.org")
19+
# Prefer app based setting.
20+
app = get_adapter().get_app(context.request, provider=self.provider_id)
21+
server = app.settings.get("server", server)
22+
ret = f"{server}{path}"
23+
return ret
24+
25+
@property
26+
def access_token_url(self):
27+
return self._build_server_url("/apps/oauth2/api/v1/token")
28+
29+
@property
30+
def authorize_url(self):
31+
return self._build_server_url("/apps/oauth2/authorize")
32+
33+
@property
34+
def profile_url(self):
35+
return self._build_server_url("/ocs/v1.php/cloud/users/")
1936

2037
def complete_login(self, request, app, token, **kwargs):
2138
extra_data = self.get_user_info(token, kwargs["response"]["user_id"])

docs/socialaccount/providers/nextcloud.rst

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,17 @@ The following NextCloud settings are available:
66
.. code-block:: python
77
88
SOCIALACCOUNT_PROVIDERS = {
9-
'nextcloud': {
10-
'SERVER': 'https://nextcloud.example.org',
11-
}
9+
"nextcloud": {
10+
"APPS": [
11+
{
12+
"client_id": "<insert-id>",
13+
"secret": "<insert-secret>",
14+
"settings": {
15+
"server": "https://nextcloud.example.org",
16+
}
17+
}
18+
]
19+
}
1220
}
1321
1422

0 commit comments

Comments
 (0)