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