Page MenuHomePhabricator

D12952.id42993.diff
No OneTemporary

D12952.id42993.diff

diff --git a/lib/handlers/user-infos-handler.react.js b/lib/handlers/user-infos-handler.react.js
--- a/lib/handlers/user-infos-handler.react.js
+++ b/lib/handlers/user-infos-handler.react.js
@@ -70,7 +70,9 @@
// 1. Fetch usernames from identity
const promise = (async () => {
newUserIDs.forEach(id => requestedIDsRef.current.add(id));
- const { identities } = await findUserIdentities(newUserIDs);
+ const { identities, reservedUserIdentifiers } =
+ await findUserIdentities(newUserIDs);
+
newUserIDs.forEach(id => requestedIDsRef.current.delete(id));
const newUserInfos = [];
@@ -80,6 +82,12 @@
username: identities[id].username,
});
}
+ for (const id in reservedUserIdentifiers) {
+ newUserInfos.push({
+ id,
+ username: reservedUserIdentifiers[id],
+ });
+ }
return { userInfos: newUserInfos };
})();
void dispatchActionPromise(findUserIdentitiesActionTypes, promise);
diff --git a/lib/reducers/user-reducer.js b/lib/reducers/user-reducer.js
--- a/lib/reducers/user-reducer.js
+++ b/lib/reducers/user-reducer.js
@@ -224,6 +224,27 @@
.flat();
}
+function discardKeyserverUsernames(
+ newUserInfos: UserInfos,
+ stateUserInfos: UserInfos,
+): UserInfos {
+ if (!usingCommServicesAccessToken) {
+ return newUserInfos;
+ }
+ let result: UserInfos = {};
+ for (const id in newUserInfos) {
+ const username = stateUserInfos[id] ? stateUserInfos[id].username : null;
+ result = {
+ ...result,
+ [id]: {
+ ...newUserInfos[id],
+ username,
+ },
+ };
+ }
+ return result;
+}
+
type ReduceUserInfosResult = [
UserStore,
$ReadOnlyArray<ClientUserInconsistencyReportCreationRequest>,
@@ -240,7 +261,11 @@
if (payload.keyserverID !== authoritativeKeyserverID()) {
return [state, [], []];
}
- const newUserInfos = _keyBy(userInfo => userInfo.id)(payload.userInfos);
+ const keyserverUserInfos = _keyBy(userInfo => userInfo.id)(payload.userInfos);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
const userStoreOps: $ReadOnlyArray<UserStoreOperation> = [
...convertUserInfosToReplaceUserOps(newUserInfos),
@@ -317,9 +342,13 @@
if (keyserverID !== authoritativeKeyserverID()) {
return [state, [], []];
}
- const newUserInfos: UserInfos = _keyBy(userInfo => userInfo.id)(
+ const keyserverUserInfos: UserInfos = _keyBy(userInfo => userInfo.id)(
action.payload.userInfos,
);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
const userStoreOps: $ReadOnlyArray<UserStoreOperation> =
convertUserInfosToReplaceUserOps(newUserInfos);
@@ -400,9 +429,13 @@
if (action.payload.keyserverID !== authoritativeKeyserverID()) {
return [state, [], []];
}
- const newUserInfos = _keyBy(userInfo => userInfo.id)(
+ const keyserverUserInfos = _keyBy(userInfo => userInfo.id)(
action.payload.userInfos,
);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
const userStoreOps: $ReadOnlyArray<UserStoreOperation> = [
{ type: 'remove_all_users' },
...convertUserInfosToReplaceUserOps(newUserInfos),
@@ -449,9 +482,13 @@
action.type === keyserverAuthActionTypes.success &&
relyingOnAuthoritativeKeyserver
) {
- const newUserInfos = _keyBy(userInfo => userInfo.id)(
+ const keyserverUserInfos = _keyBy(userInfo => userInfo.id)(
action.payload.userInfos,
);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
const userStoreOps: $ReadOnlyArray<UserStoreOperation> =
convertUserInfosToReplaceUserOps(newUserInfos);
@@ -502,12 +539,15 @@
return [state, [], []];
}
- const userStoreOps: UserStoreOperation[] = [];
- if (userInfos) {
- for (const userInfo of userInfos) {
- userStoreOps.push({ type: 'replace_user', payload: { ...userInfo } });
- }
- }
+ const keyserverUserInfos = _keyBy(userInfo => userInfo.id)(userInfos);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
+
+ const userStoreOps: UserStoreOperation[] = [
+ ...convertUserInfosToReplaceUserOps(newUserInfos),
+ ];
if (deleteUserInfoIDs) {
userStoreOps.push({
@@ -534,9 +574,13 @@
userStoreOps,
];
} else if (action.type === updateUserAvatarActionTypes.success) {
- const newUserInfos = _keyBy(userInfo => userInfo.id)(
+ const keyserverUserInfos = _keyBy(userInfo => userInfo.id)(
action.payload.updates.userInfos,
);
+ const newUserInfos = discardKeyserverUsernames(
+ keyserverUserInfos,
+ state.userInfos,
+ );
const userStoreOps: $ReadOnlyArray<UserStoreOperation> =
convertUserInfosToReplaceUserOps(newUserInfos);
const processedUserInfos: UserInfos = processUserStoreOps(

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 19, 9:17 PM (10 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2142380
Default Alt Text
D12952.id42993.diff (5 KB)

Event Timeline