mirror of https://github.com/zulip/zulip.git
backend-auth: Add user ID to fetch api key responses.
Adds the user ID to the return values for the `/fetch_api_key` and `/dev_fetch_api_key` endpoints. This saves clients like mobile a round trip to the server to get the user's unique ID as it is now returned as part of the log in flow. Fixes #24980.
This commit is contained in:
parent
52f7eb4463
commit
e95b784f6e
|
@ -20,6 +20,13 @@ format used by the Zulip server that they are interacting with.
|
||||||
|
|
||||||
## Changes in Zulip 7.0
|
## Changes in Zulip 7.0
|
||||||
|
|
||||||
|
**Feature level 171**:
|
||||||
|
|
||||||
|
* [`POST /fetch_api_key`](/api/fetch-api-key),
|
||||||
|
[`POST /dev_fetch_api_key`](/api/dev-fetch-api-key): The return values
|
||||||
|
for these endpoints now include the unique ID of the user who owns the
|
||||||
|
API key.
|
||||||
|
|
||||||
**Feature level 170**
|
**Feature level 170**
|
||||||
|
|
||||||
* [`POST /user_topics`](/api/update-user-topic):
|
* [`POST /user_topics`](/api/update-user-topic):
|
||||||
|
|
|
@ -33,7 +33,7 @@ DESKTOP_WARNING_VERSION = "5.4.3"
|
||||||
# Changes should be accompanied by documentation explaining what the
|
# Changes should be accompanied by documentation explaining what the
|
||||||
# new level means in api_docs/changelog.md, as well as "**Changes**"
|
# new level means in api_docs/changelog.md, as well as "**Changes**"
|
||||||
# entries in the endpoint's documentation in `zulip.yaml`.
|
# entries in the endpoint's documentation in `zulip.yaml`.
|
||||||
API_FEATURE_LEVEL = 170
|
API_FEATURE_LEVEL = 171
|
||||||
|
|
||||||
# Bump the minor PROVISION_VERSION to indicate that folks should provision
|
# Bump the minor PROVISION_VERSION to indicate that folks should provision
|
||||||
# only when going from an old version of the code to a newer version. Bump
|
# only when going from an old version of the code to a newer version. Bump
|
||||||
|
|
|
@ -17342,13 +17342,20 @@ components:
|
||||||
email:
|
email:
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
The email address of the user who owns the API key
|
The email address of the user who owns the API key.
|
||||||
|
user_id:
|
||||||
|
type: integer
|
||||||
|
description: |
|
||||||
|
The unique ID of the user who owns the API key.
|
||||||
|
|
||||||
|
**Changes**: New in Zulip 7.0 (feature level 171).
|
||||||
example:
|
example:
|
||||||
{
|
{
|
||||||
"api_key": "gjA04ZYcqXKalvYMA8OeXSfzUOLrtbZv",
|
"api_key": "gjA04ZYcqXKalvYMA8OeXSfzUOLrtbZv",
|
||||||
"email": "iago@zulip.com",
|
"email": "iago@zulip.com",
|
||||||
"msg": "",
|
"msg": "",
|
||||||
"result": "success",
|
"result": "success",
|
||||||
|
"user_id": 5,
|
||||||
}
|
}
|
||||||
CodedError:
|
CodedError:
|
||||||
allOf:
|
allOf:
|
||||||
|
|
|
@ -4460,7 +4460,8 @@ class FetchAPIKeyTest(ZulipTestCase):
|
||||||
"/api/v1/fetch_api_key",
|
"/api/v1/fetch_api_key",
|
||||||
dict(username=self.email, password=initial_password(self.email)),
|
dict(username=self.email, password=initial_password(self.email)),
|
||||||
)
|
)
|
||||||
self.assert_json_success(result)
|
json_response = self.assert_json_success(result)
|
||||||
|
self.assertEqual(json_response["user_id"], self.user_profile.id)
|
||||||
|
|
||||||
def test_invalid_email(self) -> None:
|
def test_invalid_email(self) -> None:
|
||||||
result = self.client_post(
|
result = self.client_post(
|
||||||
|
@ -4500,7 +4501,8 @@ class FetchAPIKeyTest(ZulipTestCase):
|
||||||
"/api/v1/fetch_api_key",
|
"/api/v1/fetch_api_key",
|
||||||
dict(username=self.example_email("hamlet"), password=self.ldap_password("hamlet")),
|
dict(username=self.example_email("hamlet"), password=self.ldap_password("hamlet")),
|
||||||
)
|
)
|
||||||
self.assert_json_success(result)
|
json_response = self.assert_json_success(result)
|
||||||
|
self.assertEqual(json_response["user_id"], self.user_profile.id)
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
AUTHENTICATION_BACKENDS=("zproject.backends.ZulipLDAPAuthBackend",),
|
AUTHENTICATION_BACKENDS=("zproject.backends.ZulipLDAPAuthBackend",),
|
||||||
|
@ -4530,7 +4532,8 @@ class FetchAPIKeyTest(ZulipTestCase):
|
||||||
"/api/v1/fetch_api_key",
|
"/api/v1/fetch_api_key",
|
||||||
dict(username="hamlet", password=self.ldap_password("hamlet")),
|
dict(username="hamlet", password=self.ldap_password("hamlet")),
|
||||||
)
|
)
|
||||||
self.assert_json_success(result)
|
json_response = self.assert_json_success(result)
|
||||||
|
self.assertEqual(json_response["user_id"], self.user_profile.id)
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
AUTHENTICATION_BACKENDS=("zproject.backends.ZulipLDAPAuthBackend",),
|
AUTHENTICATION_BACKENDS=("zproject.backends.ZulipLDAPAuthBackend",),
|
||||||
|
@ -4663,6 +4666,7 @@ class DevFetchAPIKeyTest(ZulipTestCase):
|
||||||
result = self.client_post("/api/v1/dev_fetch_api_key", dict(username=self.email))
|
result = self.client_post("/api/v1/dev_fetch_api_key", dict(username=self.email))
|
||||||
data = self.assert_json_success(result)
|
data = self.assert_json_success(result)
|
||||||
self.assertEqual(data["email"], self.email)
|
self.assertEqual(data["email"], self.email)
|
||||||
|
self.assertEqual(data["user_id"], self.user_profile.id)
|
||||||
user_api_keys = get_all_api_keys(self.user_profile)
|
user_api_keys = get_all_api_keys(self.user_profile)
|
||||||
self.assertIn(data["api_key"], user_api_keys)
|
self.assertIn(data["api_key"], user_api_keys)
|
||||||
|
|
||||||
|
|
|
@ -1000,7 +1000,10 @@ def api_fetch_api_key(
|
||||||
|
|
||||||
api_key = process_api_key_fetch_authenticate_result(request, user_profile)
|
api_key = process_api_key_fetch_authenticate_result(request, user_profile)
|
||||||
|
|
||||||
return json_success(request, data={"api_key": api_key, "email": user_profile.delivery_email})
|
return json_success(
|
||||||
|
request,
|
||||||
|
data={"api_key": api_key, "email": user_profile.delivery_email, "user_id": user_profile.id},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_auth_backends_data(request: HttpRequest) -> Dict[str, Any]:
|
def get_auth_backends_data(request: HttpRequest) -> Dict[str, Any]:
|
||||||
|
|
|
@ -135,7 +135,10 @@ def api_dev_fetch_api_key(request: HttpRequest, username: str = REQ()) -> HttpRe
|
||||||
|
|
||||||
do_login(request, user_profile)
|
do_login(request, user_profile)
|
||||||
api_key = get_api_key(user_profile)
|
api_key = get_api_key(user_profile)
|
||||||
return json_success(request, data={"api_key": api_key, "email": user_profile.delivery_email})
|
return json_success(
|
||||||
|
request,
|
||||||
|
data={"api_key": api_key, "email": user_profile.delivery_email, "user_id": user_profile.id},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
|
|
Loading…
Reference in New Issue