diff --git a/services/identity/src/database.rs b/services/identity/src/database.rs --- a/services/identity/src/database.rs +++ b/services/identity/src/database.rs @@ -269,6 +269,24 @@ .await } + pub async fn get_username_for_user_id( + &self, + user_id: &str, + ) -> Result { + let mut user_info = self + .get_item_from_users_table(user_id) + .await? + .item + .ok_or(Error::MissingItem)?; + + let username = String::try_from_attr( + USERS_TABLE_USERNAME_ATTRIBUTE, + user_info.remove(USERS_TABLE_USERNAME_ATTRIBUTE), + ); + + username.map_err(|e| Error::Attribute(e)) + } + pub async fn get_keyserver_keys_for_user( &self, user_id: &str, diff --git a/services/identity/src/grpc_services/authenticated.rs b/services/identity/src/grpc_services/authenticated.rs --- a/services/identity/src/grpc_services/authenticated.rs +++ b/services/identity/src/grpc_services/authenticated.rs @@ -200,7 +200,7 @@ ) -> Result, Status> { let message = request.into_inner(); - let inner_response = self + let keyserver_info = self .db_client .get_keyserver_keys_for_user(&message.user_id) .await @@ -223,8 +223,15 @@ one_time_notif_prekey: db_keys.notif_one_time_key, }); + let username = self + .db_client + .get_username_for_user_id(&message.user_id) + .await + .map_err(handle_db_error)?; + let response = Response::new(KeyserverKeysResponse { - keyserver_info: inner_response, + keyserver_info, + username, }); return Ok(response); diff --git a/shared/protos/identity_auth.proto b/shared/protos/identity_auth.proto --- a/shared/protos/identity_auth.proto +++ b/shared/protos/identity_auth.proto @@ -87,6 +87,7 @@ message KeyserverKeysResponse { optional OutboundKeyInfo keyserver_info = 1; + string username = 2; } // GetOutboundKeysForUser diff --git a/web/protobufs/identity-auth-structs.cjs b/web/protobufs/identity-auth-structs.cjs --- a/web/protobufs/identity-auth-structs.cjs +++ b/web/protobufs/identity-auth-structs.cjs @@ -1165,7 +1165,8 @@ */ proto.identity.auth.KeyserverKeysResponse.toObject = function(includeInstance, msg) { var f, obj = { - keyserverInfo: (f = msg.getKeyserverInfo()) && proto.identity.auth.OutboundKeyInfo.toObject(includeInstance, f) + keyserverInfo: (f = msg.getKeyserverInfo()) && proto.identity.auth.OutboundKeyInfo.toObject(includeInstance, f), + username: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -1207,6 +1208,10 @@ reader.readMessage(value,proto.identity.auth.OutboundKeyInfo.deserializeBinaryFromReader); msg.setKeyserverInfo(value); break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setUsername(value); + break; default: reader.skipField(); break; @@ -1244,6 +1249,13 @@ proto.identity.auth.OutboundKeyInfo.serializeBinaryToWriter ); } + f = message.getUsername(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } }; @@ -1284,6 +1296,24 @@ }; +/** + * optional string username = 2; + * @return {string} + */ +proto.identity.auth.KeyserverKeysResponse.prototype.getUsername = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.identity.auth.KeyserverKeysResponse} returns this + */ +proto.identity.auth.KeyserverKeysResponse.prototype.setUsername = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + diff --git a/web/protobufs/identity-auth-structs.cjs.flow b/web/protobufs/identity-auth-structs.cjs.flow --- a/web/protobufs/identity-auth-structs.cjs.flow +++ b/web/protobufs/identity-auth-structs.cjs.flow @@ -105,6 +105,9 @@ hasKeyserverInfo(): boolean; clearKeyserverInfo(): KeyserverKeysResponse; + getUsername(): string; + setUsername(value: string): KeyserverKeysResponse; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): KeyserverKeysResponseObject; static toObject(includeInstance: boolean, msg: KeyserverKeysResponse): KeyserverKeysResponseObject; @@ -115,6 +118,7 @@ export type KeyserverKeysResponseObject = { keyserverInfo?: OutboundKeyInfoObject, + username: string, }; declare export class OutboundKeysForUserResponse extends Message {