package com.github.hburgmeier.jerseyoauth2.protocol.impl.authorization;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import com.github.hburgmeier.jerseyoauth2.api.protocol.IHttpRequest;
import com.github.hburgmeier.jerseyoauth2.api.protocol.OAuth2ParseException;
import com.github.hburgmeier.jerseyoauth2.api.types.ResponseType;
import com.github.hburgmeier.jerseyoauth2.protocol.impl.ScopeParser;
import com.github.hburgmeier.jerseyoauth2.protocol.impl.extractor.CombinedExtractor;
import com.github.hburgmeier.jerseyoauth2.protocol.impl.oauth2.Constants;
public class AuthorizationRequestParser {
private final ScopeParser scopeParser = new ScopeParser();
private final CombinedExtractor responseTypeExtractor = new CombinedExtractor(Constants.RESPONSE_TYPE);
private final CombinedExtractor stateExtractor = new CombinedExtractor(Constants.STATE);
private final CombinedExtractor clientIdExtractor = new CombinedExtractor(Constants.CLIENT_ID);
private final CombinedExtractor scopeExtractor = new CombinedExtractor(Constants.SCOPE);
private final CombinedExtractor redirectUriExtractor = new CombinedExtractor(Constants.REDIRECT_URI);
public AuthorizationRequest parse(IHttpRequest request, boolean enableAuthorizationHeader) throws OAuth2ParseException {
String state = stateExtractor.extractValue(request);
String responseTypeString = responseTypeExtractor.extractValue(request);
if (StringUtils.isEmpty(responseTypeString))
throw new OAuth2ParseException("Missing response_type", state);
ResponseType responseType = ResponseType.valueOf(responseTypeString.toUpperCase());
String clientId = clientIdExtractor.extractValue(request);
String redirectUri = redirectUriExtractor.extractValue(request);
String scope = scopeExtractor.extractValue(request);
Set<String> scopes = scopeParser.parseScope(scope);
return new AuthorizationRequest(responseType, clientId, redirectUri, scopes, state);
}
}