|
1 | 1 | import xml.etree.ElementTree as ET
|
2 | 2 |
|
| 3 | +from allauth.core import context |
3 | 4 | from allauth.socialaccount import app_settings
|
4 | 5 | from allauth.socialaccount.adapter import get_adapter
|
5 | 6 | from allauth.socialaccount.providers.oauth2.views import (
|
|
11 | 12 |
|
12 | 13 | class NextCloudOAuth2Adapter(OAuth2Adapter):
|
13 | 14 | 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/") |
19 | 36 |
|
20 | 37 | def complete_login(self, request, app, token, **kwargs):
|
21 | 38 | extra_data = self.get_user_info(token, kwargs["response"]["user_id"])
|
|
0 commit comments