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