identity-service-api: Add unbind_3pid endpoint.
This commit is contained in:
		
							parent
							
								
									f954865d4d
								
							
						
					
					
						commit
						4a91f30025
					
				| @ -11,6 +11,7 @@ Improvements: | |||||||
| * Add more endpoints: | * Add more endpoints: | ||||||
|    |    | ||||||
|   ```rust |   ```rust | ||||||
|  |   association::unbind_3pid::v2, | ||||||
|   invitation::store_invitation::v2 |   invitation::store_invitation::v2 | ||||||
|   ``` |   ``` | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,3 +4,4 @@ pub mod bind_3pid; | |||||||
| pub mod check_3pid_validity; | pub mod check_3pid_validity; | ||||||
| pub mod email; | pub mod email; | ||||||
| pub mod msisdn; | pub mod msisdn; | ||||||
|  | pub mod unbind_3pid; | ||||||
|  | |||||||
| @ -0,0 +1,3 @@ | |||||||
|  | //! Endpoint to remove an association between a session and a Matrix user ID.
 | ||||||
|  | 
 | ||||||
|  | pub mod v2; | ||||||
| @ -0,0 +1,94 @@ | |||||||
|  | //! [POST /_matrix/identity/v2/3pid/unbind](https://matrix.org/docs/spec/identity_service/r0.3.0#post-matrix-identity-v2-3pid-unbind)
 | ||||||
|  | 
 | ||||||
|  | use ruma_api::ruma_api; | ||||||
|  | use ruma_common::thirdparty::Medium; | ||||||
|  | use ruma_identifiers::{user_id::UserId, ClientSecretBox, SessionIdBox}; | ||||||
|  | use serde::{Deserialize, Serialize}; | ||||||
|  | 
 | ||||||
|  | ruma_api! { | ||||||
|  |     metadata: { | ||||||
|  |         description: "Remove an association between a session and a Matrix user ID.", | ||||||
|  |         method: POST, | ||||||
|  |         name: "unbind_3pid", | ||||||
|  |         path: "/_matrix/identity/v2/3pid/unbind", | ||||||
|  |         rate_limited: false, | ||||||
|  |         authentication: AccessToken, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     request: { | ||||||
|  |         /// The proof that the client owns the 3PID.
 | ||||||
|  |         ///
 | ||||||
|  |         /// If this is not provided, the request must be signed by the homeserver which controls
 | ||||||
|  |         /// the `mxid`.
 | ||||||
|  |         #[serde(flatten)] | ||||||
|  |         #[serde(skip_serializing_if = "Option::is_none")] | ||||||
|  |         pub threepid_ownership_proof: Option<&'a ThreePidOwnershipProof>, | ||||||
|  | 
 | ||||||
|  |         /// The Matrix user ID to remove from the 3PIDs.
 | ||||||
|  |         pub mxid: &'a UserId, | ||||||
|  | 
 | ||||||
|  |         /// The 3PID to remove. Must match the 3PID used to generate the session if using `sid` and
 | ||||||
|  |         /// `client_secret` to authenticate this request.
 | ||||||
|  |         pub threepid:  &'a ThirdPartyId, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #[derive(Default)] | ||||||
|  |     response: {} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl<'a> Request<'a> { | ||||||
|  |     /// Creates a `Request` with the given Session ID, client secret, Matrix user ID and 3PID.
 | ||||||
|  |     pub fn new( | ||||||
|  |         threepid_ownership_proof: Option<&'a ThreePidOwnershipProof>, | ||||||
|  |         mxid: &'a UserId, | ||||||
|  |         threepid: &'a ThirdPartyId, | ||||||
|  |     ) -> Self { | ||||||
|  |         Self { threepid_ownership_proof, mxid, threepid } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl Response { | ||||||
|  |     /// Creates an empty `Response`.
 | ||||||
|  |     pub fn new() -> Self { | ||||||
|  |         Self {} | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// A 3PID to unbind.
 | ||||||
|  | #[derive(Clone, Debug, Serialize, Deserialize)] | ||||||
|  | #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | ||||||
|  | pub struct ThirdPartyId { | ||||||
|  |     /// A medium matching the medium of identifier to unbind.
 | ||||||
|  |     pub medium: Medium, | ||||||
|  | 
 | ||||||
|  |     /// The 3PID address to remove.
 | ||||||
|  |     pub address: String, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl ThirdPartyId { | ||||||
|  |     /// Creates a new `ThirdPartyId` with the given medium and address.
 | ||||||
|  |     pub fn new(medium: Medium, address: String) -> Self { | ||||||
|  |         Self { medium, address } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// A proof that the client owns the 3PID.
 | ||||||
|  | ///
 | ||||||
|  | /// Must be constructed using the same session ID and client secret generated and passed by the
 | ||||||
|  | /// `requestToken` call for the given 3PID.
 | ||||||
|  | #[derive(Clone, Debug, Serialize, Deserialize)] | ||||||
|  | #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] | ||||||
|  | pub struct ThreePidOwnershipProof { | ||||||
|  |     /// The Session ID generated by the `requestToken` call.
 | ||||||
|  |     pub sid: SessionIdBox, | ||||||
|  | 
 | ||||||
|  |     /// The client secret passed to the `requestToken` call.
 | ||||||
|  |     pub client_secret: ClientSecretBox, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl ThreePidOwnershipProof { | ||||||
|  |     /// Creates a new `ThreePidOwnershipProof` with the given session ID and client secret.
 | ||||||
|  |     pub fn new(sid: SessionIdBox, client_secret: ClientSecretBox) -> Self { | ||||||
|  |         Self { sid, client_secret } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user