Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(oxauth): add first party native authn support #1925 #1926

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,6 @@

package org.gluu.oxauth.client;

import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.ACCESS_TOKEN;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.CODE;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.EXPIRES_IN;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.ID_TOKEN;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.SCOPE;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.SESSION_ID;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.SID;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.STATE;
import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.TOKEN_TYPE;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.ws.rs.core.Response;

import org.apache.commons.lang.StringUtils;
import org.gluu.oxauth.model.authorize.AuthorizeErrorResponseType;
import org.gluu.oxauth.model.common.ResponseMode;
Expand All @@ -32,6 +14,15 @@
import org.json.JSONException;
import org.json.JSONObject;

import javax.ws.rs.core.Response;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import static org.gluu.oxauth.model.authorize.AuthorizeResponseParam.*;

/**
* Represents an authorization response received from the authorization server.
*
Expand All @@ -52,6 +43,7 @@ public class AuthorizationResponse extends BaseResponse {
private Map<String, String> customParams;
private ResponseMode responseMode;

private String errorTypeString;
private AuthorizeErrorResponseType errorType;
private String errorDescription;
private String errorUri;
Expand All @@ -67,7 +59,8 @@ public AuthorizationResponse(Response clientResponse) {
try {
JSONObject jsonObj = new JSONObject(entity);
if (jsonObj.has("error")) {
errorType = AuthorizeErrorResponseType.fromString(jsonObj.getString("error"));
errorTypeString = jsonObj.getString("error");
errorType = AuthorizeErrorResponseType.fromString(errorTypeString);
}
if (jsonObj.has("error_description")) {
errorDescription = jsonObj.getString("error_description");
Expand All @@ -81,6 +74,9 @@ public AuthorizationResponse(Response clientResponse) {
if (jsonObj.has("redirect")) {
location = jsonObj.getString("redirect");
}
if (jsonObj.has("authorization_code")) {
code = jsonObj.getString("authorization_code");
}
} catch (JSONException e) {
e.printStackTrace();
}
Expand Down Expand Up @@ -173,6 +169,14 @@ private void processLocation() {
}
}

public String getErrorTypeString() {
return errorTypeString;
}

public void setErrorTypeString(String errorTypeString) {
this.errorTypeString = errorTypeString;
}

/**
* Returns the authorization code generated by the authorization server.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.gluu.oxauth.model.authorize;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
* @author Yuriy Z
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class AuthorizationChallengeResponse {

@JsonProperty(value = "authorization_code")
private String authorizationCode;

/**
* Gets authorization code
*
* @return authorization code
*/
public String getAuthorizationCode() {
return authorizationCode;
}

/**
* Sets authorization code
*
* @param authorizationCode authorization code
*/
public void setAuthorizationCode(String authorizationCode) {
this.authorizationCode = authorizationCode;
}

/**
* Returns string representation of authorization challenge response
*
* @return string representation of authorization challenge response
*/
@Override
public String toString() {
return "AuthorizationChallengeResponse{" +
"authorizationCode='" + authorizationCode + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.gluu.oxauth.model.authzdetails;

import org.json.JSONObject;

/**
* @author Yuriy Z
*/
public class AuthzDetail {

private final JSONObject jsonObject;
private String uiRepresentation;

public AuthzDetail(String json) {
this(new JSONObject(json));
}

public AuthzDetail(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}

public JSONObject getJsonObject() {
return jsonObject;
}

public String getType() {
return jsonObject.optString("type");
}

public String getUiRepresentation() {
return uiRepresentation;
}

public void setUiRepresentation(String uiRepresentation) {
this.uiRepresentation = uiRepresentation;
}

@Override
public String toString() {
return "AuthzDetail{" +
"jsonObject=" + jsonObject +
"uiRepresentation=" + uiRepresentation +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package org.gluu.oxauth.model.authzdetails;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
* @author Yuriy Z
*/
public class AuthzDetails {

private final List<AuthzDetail> details;

public AuthzDetails(List<AuthzDetail> details) {
this.details = details;
}

public AuthzDetails() {
this(new ArrayList<>());
}

public static AuthzDetails of(String jsonArray) {
return of(new JSONArray(jsonArray));
}

public static AuthzDetails ofSilently(String jsonArray) {
try {
return of(new JSONArray(jsonArray));
} catch (Exception e) {
return null;
}
}

public static AuthzDetails of(JSONArray jsonArray) {
AuthzDetails result = new AuthzDetails();
for (int i = 0; i < jsonArray.length(); i++) {
result.details.add(new AuthzDetail(jsonArray.getJSONObject(i)));
}
return result;
}

public static boolean similar(String authorizationDetails1, String authorizationDetails2) {
if (StringUtils.equals(authorizationDetails1, authorizationDetails2)) {
return true;
}
if (authorizationDetails1 == null || authorizationDetails2 == null) {
return false;
}
JSONArray array1 = new JSONArray(authorizationDetails1);
JSONArray array2 = new JSONArray(authorizationDetails2);
return array1.similar(array2);
}

public static String simpleMerge(String authorizationDetails1, String authorizationDetails2) {
final AuthzDetails details1 = AuthzDetails.of(authorizationDetails1);
final AuthzDetails details2 = AuthzDetails.of(authorizationDetails2);
details1.getDetails().addAll(details2.getDetails());
return details1.asJsonArray().toString();
}

public JSONArray asJsonArray() {
JSONArray array = new JSONArray();
array.putAll(details.stream().map(AuthzDetail::getJsonObject).collect(Collectors.toList()));
return array;
}

public String asJsonString() {
return asJsonArray().toString();
}

public boolean similar(String authorizationDetails) {
if (StringUtils.isBlank(authorizationDetails)) {
return false;
}
return asJsonArray().similar(new JSONArray(authorizationDetails));
}

public List<AuthzDetail> getDetails() {
return details;
}

public Set<String> getTypes() {
Set<String> result = new HashSet<>();
for (AuthzDetail d : details) {
result.add(d.getType());
}
return result;
}

public static boolean isEmpty(AuthzDetails authzDetails) {
return authzDetails == null || authzDetails.getDetails() == null || authzDetails.getDetails().isEmpty();
}

@Override
public String toString() {
return "AuthzDetails{" +
"details=" + details +
'}';
}
}
Loading
Loading