001package com.nimbusds.oauth2.sdk.client; 002 003 004import java.net.URL; 005 006import net.jcip.annotations.Immutable; 007 008import com.nimbusds.oauth2.sdk.ParseException; 009import com.nimbusds.oauth2.sdk.ProtectedResourceRequest; 010import com.nimbusds.oauth2.sdk.SerializeException; 011import com.nimbusds.oauth2.sdk.http.HTTPRequest; 012import com.nimbusds.oauth2.sdk.token.BearerAccessToken; 013 014 015/** 016 * Client delete request. This class is immutable. 017 * 018 * <p>Example HTTP request: 019 * 020 * <pre> 021 * DELETE /register/s6BhdRkqt3 HTTP/1.1 022 * Accept: application/json 023 * Host: server.example.com 024 * Authorization: Bearer reg-23410913-abewfq.123483 025 * </pre> 026 * 027 * <p>Related specifications: 028 * 029 * <ul> 030 * <li>OAuth 2.0 Dynamic Client Registration Protocol 031 * (draft-ietf-oauth-dyn-reg-12), section 4.4. 032 * </ul> 033 * 034 * @author Vladimir Dzhuvinov 035 */ 036@Immutable 037public class ClientDeleteRequest extends ProtectedResourceRequest { 038 039 040 /** 041 * Creates a new client delete request. 042 * 043 * @param uri The URI of the client configuration endpoint. May 044 * be {@code null} if the {@link #toHTTPRequest()} 045 * method will not be used. 046 * @param accessToken An OAuth 2.0 Bearer access token for the request, 047 * {@code null} if none. 048 */ 049 public ClientDeleteRequest(final URL uri, final BearerAccessToken accessToken) { 050 051 super(uri, accessToken); 052 053 if (accessToken == null) 054 throw new IllegalArgumentException("The access token must not be null"); 055 } 056 057 058 @Override 059 public HTTPRequest toHTTPRequest() 060 throws SerializeException { 061 062 if (getURI() == null) 063 throw new SerializeException("The endpoint URI is not specified"); 064 065 HTTPRequest httpRequest = new HTTPRequest(HTTPRequest.Method.DELETE, getURI()); 066 httpRequest.setAuthorization(getAccessToken().toAuthorizationHeader()); 067 return httpRequest; 068 } 069 070 071 /** 072 * Parses a client delete request from the specified HTTP DELETE 073 * request. 074 * 075 * @param httpRequest The HTTP request. Must not be {@code null}. 076 * 077 * @return The client add (register) request. 078 * 079 * @throws ParseException If the HTTP request couldn't be parsed to a 080 * client delete request. 081 */ 082 public static ClientDeleteRequest parse(final HTTPRequest httpRequest) 083 throws ParseException { 084 085 httpRequest.ensureMethod(HTTPRequest.Method.DELETE); 086 087 // Parse the bearer access token 088 String authzHeaderValue = httpRequest.getAuthorization(); 089 090 BearerAccessToken accessToken = BearerAccessToken.parse(authzHeaderValue); 091 092 return new ClientDeleteRequest(httpRequest.getURL(), accessToken); 093 } 094}