added UMA import, closes #811 even harder
parent
bcd8a96b5d
commit
7345a03aaa
|
@ -19,6 +19,7 @@ package org.mitre.uma.repository;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.mitre.uma.model.Permission;
|
||||||
import org.mitre.uma.model.PermissionTicket;
|
import org.mitre.uma.model.PermissionTicket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,8 +46,24 @@ public interface PermissionRepository {
|
||||||
public PermissionTicket getByTicket(String ticket);
|
public PermissionTicket getByTicket(String ticket);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Get all the tickets in the system (used by the import/export API)
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Collection<PermissionTicket> getAll();
|
public Collection<PermissionTicket> getAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a permission object with no associated ticket (used by the import/export API)
|
||||||
|
*
|
||||||
|
* @param p
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Permission saveRawPermission(Permission p);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param permissionId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Permission getById(Long permissionId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
package org.mitre.uma.service;
|
package org.mitre.uma.service;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.mitre.uma.model.PermissionTicket;
|
import org.mitre.uma.model.PermissionTicket;
|
||||||
|
@ -56,9 +55,4 @@ public interface PermissionService {
|
||||||
*/
|
*/
|
||||||
public PermissionTicket updateTicket(PermissionTicket ticket);
|
public PermissionTicket updateTicket(PermissionTicket ticket);
|
||||||
|
|
||||||
/**
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Collection<PermissionTicket> getAll();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,4 @@ public interface ResourceSetService {
|
||||||
|
|
||||||
public Collection<ResourceSet> getAllForOwnerAndClient(String owner, String authClientId);
|
public Collection<ResourceSet> getAllForOwnerAndClient(String owner, String authClientId);
|
||||||
|
|
||||||
public Collection<ResourceSet> getAll();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,7 +299,7 @@ CREATE TABLE IF NOT EXISTS permission_ticket (
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS permission (
|
CREATE TABLE IF NOT EXISTS permission (
|
||||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,
|
||||||
resource_set_id BIGINT NOT NULL
|
resource_set_id BIGINT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS permission_scope (
|
CREATE TABLE IF NOT EXISTS permission_scope (
|
||||||
|
|
|
@ -64,9 +64,4 @@ public class DummyResourceSetService implements ResourceSetService {
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ResourceSet> getAll() {
|
|
||||||
return Collections.emptySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,12 +34,14 @@ import org.mitre.oauth2.model.ClientDetailsEntity.AuthMethod;
|
||||||
import org.mitre.oauth2.model.ClientDetailsEntity.SubjectType;
|
import org.mitre.oauth2.model.ClientDetailsEntity.SubjectType;
|
||||||
import org.mitre.oauth2.model.OAuth2AccessTokenEntity;
|
import org.mitre.oauth2.model.OAuth2AccessTokenEntity;
|
||||||
import org.mitre.oauth2.model.OAuth2RefreshTokenEntity;
|
import org.mitre.oauth2.model.OAuth2RefreshTokenEntity;
|
||||||
|
import org.mitre.oauth2.model.RegisteredClient;
|
||||||
import org.mitre.oauth2.model.SavedUserAuthentication;
|
import org.mitre.oauth2.model.SavedUserAuthentication;
|
||||||
import org.mitre.oauth2.model.SystemScope;
|
import org.mitre.oauth2.model.SystemScope;
|
||||||
import org.mitre.oauth2.repository.AuthenticationHolderRepository;
|
import org.mitre.oauth2.repository.AuthenticationHolderRepository;
|
||||||
import org.mitre.oauth2.repository.OAuth2ClientRepository;
|
import org.mitre.oauth2.repository.OAuth2ClientRepository;
|
||||||
import org.mitre.oauth2.repository.OAuth2TokenRepository;
|
import org.mitre.oauth2.repository.OAuth2TokenRepository;
|
||||||
import org.mitre.oauth2.repository.SystemScopeRepository;
|
import org.mitre.oauth2.repository.SystemScopeRepository;
|
||||||
|
import org.mitre.openid.connect.ClientDetailsEntityJsonProcessor;
|
||||||
import org.mitre.openid.connect.model.ApprovedSite;
|
import org.mitre.openid.connect.model.ApprovedSite;
|
||||||
import org.mitre.openid.connect.model.BlacklistedSite;
|
import org.mitre.openid.connect.model.BlacklistedSite;
|
||||||
import org.mitre.openid.connect.model.WhitelistedSite;
|
import org.mitre.openid.connect.model.WhitelistedSite;
|
||||||
|
@ -53,8 +55,8 @@ import org.mitre.uma.model.PermissionTicket;
|
||||||
import org.mitre.uma.model.Policy;
|
import org.mitre.uma.model.Policy;
|
||||||
import org.mitre.uma.model.ResourceSet;
|
import org.mitre.uma.model.ResourceSet;
|
||||||
import org.mitre.uma.model.SavedRegisteredClient;
|
import org.mitre.uma.model.SavedRegisteredClient;
|
||||||
import org.mitre.uma.service.PermissionService;
|
import org.mitre.uma.repository.PermissionRepository;
|
||||||
import org.mitre.uma.service.ResourceSetService;
|
import org.mitre.uma.repository.ResourceSetRepository;
|
||||||
import org.mitre.uma.service.impl.JpaRegisteredClientService;
|
import org.mitre.uma.service.impl.JpaRegisteredClientService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -63,6 +65,8 @@ import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonToken;
|
import com.google.gson.stream.JsonToken;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
@ -89,6 +93,7 @@ import static org.mitre.util.JsonUtils.writeNullSafeArray;
|
||||||
@SuppressWarnings(value = {"unchecked"})
|
@SuppressWarnings(value = {"unchecked"})
|
||||||
public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements MITREidDataService {
|
public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements MITREidDataService {
|
||||||
|
|
||||||
|
private static final String REGISTERED_CLIENT = "registeredClient";
|
||||||
private static final String DEFAULT_SCOPE = "defaultScope";
|
private static final String DEFAULT_SCOPE = "defaultScope";
|
||||||
private static final String STRUCTURED_PARAMETER = "structuredParameter";
|
private static final String STRUCTURED_PARAMETER = "structuredParameter";
|
||||||
private static final String STRUCTURED = "structured";
|
private static final String STRUCTURED = "structured";
|
||||||
|
@ -196,9 +201,9 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
@Autowired
|
@Autowired
|
||||||
private JpaRegisteredClientService registeredClientService;
|
private JpaRegisteredClientService registeredClientService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ResourceSetService resourceSetService;
|
private ResourceSetRepository resourceSetRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private PermissionService permissionService;
|
private PermissionRepository permissionRepository;
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.mitre.openid.connect.service.MITREidDataService#export(com.google.gson.stream.JsonWriter)
|
* @see org.mitre.openid.connect.service.MITREidDataService#export(com.google.gson.stream.JsonWriter)
|
||||||
|
@ -275,7 +280,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
private void writePermissionTickets(JsonWriter writer) throws IOException {
|
private void writePermissionTickets(JsonWriter writer) throws IOException {
|
||||||
for (PermissionTicket ticket : permissionService.getAll()) {
|
for (PermissionTicket ticket : permissionRepository.getAll()) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
|
|
||||||
writer.name(CLAIMS_SUPPLIED);
|
writer.name(CLAIMS_SUPPLIED);
|
||||||
|
@ -309,7 +314,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
Permission p = ticket.getPermission();
|
Permission p = ticket.getPermission();
|
||||||
writer.name(RESOURCE_SET).value(p.getResourceSet().getId());
|
writer.name(RESOURCE_SET).value(p.getResourceSet().getId());
|
||||||
writer.name(SCOPE);
|
writer.name(SCOPES);
|
||||||
writer.beginArray();
|
writer.beginArray();
|
||||||
for (String s : p.getScopes()) {
|
for (String s : p.getScopes()) {
|
||||||
writer.value(s);
|
writer.value(s);
|
||||||
|
@ -330,7 +335,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
private void writeResourceSets(JsonWriter writer) throws IOException {
|
private void writeResourceSets(JsonWriter writer) throws IOException {
|
||||||
for (ResourceSet rs : resourceSetService.getAll()) {
|
for (ResourceSet rs : resourceSetRepository.getAll()) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
writer.name(ID).value(rs.getId());
|
writer.name(ID).value(rs.getId());
|
||||||
writer.name(CLIENT_ID).value(rs.getClientId());
|
writer.name(CLIENT_ID).value(rs.getClientId());
|
||||||
|
@ -343,7 +348,6 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
writer.beginArray();
|
writer.beginArray();
|
||||||
for (Policy policy : rs.getPolicies()) {
|
for (Policy policy : rs.getPolicies()) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
writer.name(ID).value(policy.getId());
|
|
||||||
writer.name(NAME).value(policy.getName());
|
writer.name(NAME).value(policy.getName());
|
||||||
writer.name(SCOPES);
|
writer.name(SCOPES);
|
||||||
writer.beginArray();
|
writer.beginArray();
|
||||||
|
@ -396,8 +400,8 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
private void writeSavedRegisteredClients(JsonWriter writer) throws IOException {
|
private void writeSavedRegisteredClients(JsonWriter writer) throws IOException {
|
||||||
for (SavedRegisteredClient src : registeredClientService.getAll()) {
|
for (SavedRegisteredClient src : registeredClientService.getAll()) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
writer.name("issuer").value(src.getIssuer());
|
writer.name(ISSUER).value(src.getIssuer());
|
||||||
writer.name("registeredClient").value(src.getRegisteredClient().getSource().toString());
|
writer.name(REGISTERED_CLIENT).value(src.getRegisteredClient().getSource().toString());
|
||||||
writer.endObject();
|
writer.endObject();
|
||||||
logger.debug("Wrote saved registered client {}", src.getId());
|
logger.debug("Wrote saved registered client {}", src.getId());
|
||||||
}
|
}
|
||||||
|
@ -450,7 +454,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
for (Permission p : token.getPermissions()) {
|
for (Permission p : token.getPermissions()) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
writer.name(RESOURCE_SET).value(p.getResourceSet().getId());
|
writer.name(RESOURCE_SET).value(p.getResourceSet().getId());
|
||||||
writer.name(SCOPE);
|
writer.name(SCOPES);
|
||||||
writer.beginArray();
|
writer.beginArray();
|
||||||
for (String s : p.getScopes()) {
|
for (String s : p.getScopes()) {
|
||||||
writer.value(s);
|
writer.value(s);
|
||||||
|
@ -764,6 +768,12 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
readRefreshTokens(reader);
|
readRefreshTokens(reader);
|
||||||
} else if (name.equals(SYSTEMSCOPES)) {
|
} else if (name.equals(SYSTEMSCOPES)) {
|
||||||
readSystemScopes(reader);
|
readSystemScopes(reader);
|
||||||
|
} else if (name.equals(SAVED_REGISTERED_CLIENTS)) {
|
||||||
|
readSavedRegisteredClients(reader);
|
||||||
|
} else if (name.equals(RESOURCE_SETS)) {
|
||||||
|
readResourceSets(reader);
|
||||||
|
} else if (name.equals(PERMISSION_TICKETS)) {
|
||||||
|
readPermissionTickets(reader);
|
||||||
} else {
|
} else {
|
||||||
// unknown token, skip it
|
// unknown token, skip it
|
||||||
reader.skipValue();
|
reader.skipValue();
|
||||||
|
@ -781,14 +791,295 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
}
|
}
|
||||||
fixObjectReferences();
|
fixObjectReferences();
|
||||||
}
|
}
|
||||||
private Map<Long, String> refreshTokenToClientRefs = new HashMap<Long, String>();
|
|
||||||
private Map<Long, Long> refreshTokenToAuthHolderRefs = new HashMap<Long, Long>();
|
|
||||||
private Map<Long, Long> refreshTokenOldToNewIdMap = new HashMap<Long, Long>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
|
private void readPermissionTickets(JsonReader reader) throws IOException {
|
||||||
|
JsonParser parser = new JsonParser();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
PermissionTicket ticket = new PermissionTicket();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String name = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (name.equals(CLAIMS_SUPPLIED)) {
|
||||||
|
Set<Claim> claimsSupplied = new HashSet<>();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
Claim c = new Claim();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String cname = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (cname.equals(ISSUER)) {
|
||||||
|
c.setIssuer(readSet(reader));
|
||||||
|
} else if (cname.equals(CLAIM_TOKEN_FORMAT)) {
|
||||||
|
c.setClaimTokenFormat(readSet(reader));
|
||||||
|
} else if (cname.equals(CLAIM_TYPE)) {
|
||||||
|
c.setClaimType(reader.nextString());
|
||||||
|
} else if (cname.equals(FRIENDLY_NAME)) {
|
||||||
|
c.setFriendlyName(reader.nextString());
|
||||||
|
} else if (cname.equals(NAME)) {
|
||||||
|
c.setName(reader.nextString());
|
||||||
|
} else if (cname.equals(VALUE)) {
|
||||||
|
JsonElement e = parser.parse(reader.nextString());
|
||||||
|
c.setValue(e);
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
claimsSupplied.add(c);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
ticket.setClaimsSupplied(claimsSupplied);
|
||||||
|
} else if (name.equals(EXPIRATION)) {
|
||||||
|
ticket.setExpiration(utcToDate(reader.nextString()));
|
||||||
|
} else if (name.equals(PERMISSION)) {
|
||||||
|
Permission p = new Permission();
|
||||||
|
Long rsid = null;
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String pname = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (pname.equals(RESOURCE_SET)) {
|
||||||
|
rsid = reader.nextLong();
|
||||||
|
} else if (pname.equals(SCOPES)) {
|
||||||
|
p.setScopes(readSet(reader));
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
Permission saved = permissionRepository.saveRawPermission(p);
|
||||||
|
permissionToResourceRefs.put(saved.getId(), rsid);
|
||||||
|
} else if (name.equals(TICKET)) {
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
permissionRepository.save(ticket);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Map<Long, Long> resourceSetOldToNewIdMap = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param reader
|
||||||
|
*/
|
||||||
|
private void readResourceSets(JsonReader reader) throws IOException {
|
||||||
|
JsonParser parser = new JsonParser();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
Long oldId = null;
|
||||||
|
ResourceSet rs = new ResourceSet();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String name = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (name.equals(ID)) {
|
||||||
|
oldId = reader.nextLong();
|
||||||
|
} else if (name.equals(CLIENT_ID)) {
|
||||||
|
rs.setClientId(reader.nextString());
|
||||||
|
} else if (name.equals(ICON_URI)) {
|
||||||
|
rs.setIconUri(reader.nextString());
|
||||||
|
} else if (name.equals(NAME)) {
|
||||||
|
rs.setName(reader.nextString());
|
||||||
|
} else if (name.equals(TYPE)) {
|
||||||
|
rs.setType(reader.nextString());
|
||||||
|
} else if (name.equals(URI)) {
|
||||||
|
rs.setUri(reader.nextString());
|
||||||
|
} else if (name.equals(OWNER)) {
|
||||||
|
rs.setOwner(reader.nextString());
|
||||||
|
} else if (name.equals(POLICIES)) {
|
||||||
|
Set<Policy> policies = new HashSet<>();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
Policy p = new Policy();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String pname = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (pname.equals(NAME)) {
|
||||||
|
p.setName(reader.nextString());
|
||||||
|
} else if (pname.equals(SCOPES)) {
|
||||||
|
p.setScopes(readSet(reader));
|
||||||
|
} else if (pname.equals(CLAIMS_REQUIRED)) {
|
||||||
|
Set<Claim> claimsRequired = new HashSet<>();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
Claim c = new Claim();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String cname = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (cname.equals(ISSUER)) {
|
||||||
|
c.setIssuer(readSet(reader));
|
||||||
|
} else if (cname.equals(CLAIM_TOKEN_FORMAT)) {
|
||||||
|
c.setClaimTokenFormat(readSet(reader));
|
||||||
|
} else if (cname.equals(CLAIM_TYPE)) {
|
||||||
|
c.setClaimType(reader.nextString());
|
||||||
|
} else if (cname.equals(FRIENDLY_NAME)) {
|
||||||
|
c.setFriendlyName(reader.nextString());
|
||||||
|
} else if (cname.equals(NAME)) {
|
||||||
|
c.setName(reader.nextString());
|
||||||
|
} else if (cname.equals(VALUE)) {
|
||||||
|
JsonElement e = parser.parse(reader.nextString());
|
||||||
|
c.setValue(e);
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
claimsRequired.add(c);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
p.setClaimsRequired(claimsRequired);
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
policies.add(p);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
rs.setPolicies(policies);
|
||||||
|
} else if (name.equals(SCOPES)) {
|
||||||
|
rs.setScopes(readSet(reader));
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
Long newId = resourceSetRepository.save(rs).getId();
|
||||||
|
resourceSetOldToNewIdMap.put(oldId, newId);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
logger.info("Done reading resource sets");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param reader
|
||||||
|
*/
|
||||||
|
private void readSavedRegisteredClients(JsonReader reader) throws IOException{
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
String issuer = null;
|
||||||
|
String clientString = null;
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String name = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (name.equals(ISSUER)) {
|
||||||
|
issuer = reader.nextString();
|
||||||
|
} else if (name.equals(REGISTERED_CLIENT)) {
|
||||||
|
clientString = reader.nextString();
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.endObject();
|
||||||
|
RegisteredClient client = ClientDetailsEntityJsonProcessor.parseRegistered(clientString);
|
||||||
|
registeredClientService.save(issuer, client);
|
||||||
|
logger.debug("Saved registered client");
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
logger.info("Done reading saved registered clients");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, String> refreshTokenToClientRefs = new HashMap<Long, String>();
|
||||||
|
private Map<Long, Long> refreshTokenToAuthHolderRefs = new HashMap<Long, Long>();
|
||||||
|
private Map<Long, Long> refreshTokenOldToNewIdMap = new HashMap<Long, Long>();
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
|
@ -851,6 +1142,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
private Map<Long, Long> accessTokenToRefreshTokenRefs = new HashMap<Long, Long>();
|
private Map<Long, Long> accessTokenToRefreshTokenRefs = new HashMap<Long, Long>();
|
||||||
private Map<Long, Long> accessTokenToIdTokenRefs = new HashMap<Long, Long>();
|
private Map<Long, Long> accessTokenToIdTokenRefs = new HashMap<Long, Long>();
|
||||||
private Map<Long, Long> accessTokenOldToNewIdMap = new HashMap<Long, Long>();
|
private Map<Long, Long> accessTokenOldToNewIdMap = new HashMap<Long, Long>();
|
||||||
|
private Map<Long, Long> permissionToResourceRefs = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
|
@ -870,6 +1162,7 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
Long authHolderId = null;
|
Long authHolderId = null;
|
||||||
Long refreshTokenId = null;
|
Long refreshTokenId = null;
|
||||||
Long idTokenId = null;
|
Long idTokenId = null;
|
||||||
|
Set<Permission> permissions = new HashSet<>();
|
||||||
while (reader.hasNext()) {
|
while (reader.hasNext()) {
|
||||||
switch (reader.peek()) {
|
switch (reader.peek()) {
|
||||||
case END_OBJECT:
|
case END_OBJECT:
|
||||||
|
@ -902,6 +1195,43 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
} else if (name.equals(SCOPE)) {
|
} else if (name.equals(SCOPE)) {
|
||||||
Set<String> scope = readSet(reader);
|
Set<String> scope = readSet(reader);
|
||||||
token.setScope(scope);
|
token.setScope(scope);
|
||||||
|
} else if (name.equals(PERMISSIONS)) {
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
Permission p = new Permission();
|
||||||
|
Long rsid = null;
|
||||||
|
Set<String> scope = new HashSet<>();
|
||||||
|
reader.beginObject();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
switch (reader.peek()) {
|
||||||
|
case END_OBJECT:
|
||||||
|
continue;
|
||||||
|
case NAME:
|
||||||
|
String pname = reader.nextName();
|
||||||
|
if (reader.peek() == JsonToken.NULL) {
|
||||||
|
reader.skipValue();
|
||||||
|
} else if (pname.equals(RESOURCE_SET)) {
|
||||||
|
rsid = reader.nextLong();
|
||||||
|
} else if (pname.equals(SCOPES)) {
|
||||||
|
scope = readSet(reader);
|
||||||
|
} else {
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.debug("Found unexpected entry");
|
||||||
|
reader.skipValue();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.setScopes(scope);
|
||||||
|
Permission saved = permissionRepository.saveRawPermission(p);
|
||||||
|
permissionToResourceRefs.put(saved.getId(), rsid);
|
||||||
|
permissions.add(saved);
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
token.setPermissions(permissions);
|
||||||
} else if (name.equals(TYPE)) {
|
} else if (name.equals(TYPE)) {
|
||||||
token.setTokenType(reader.nextString());
|
token.setTokenType(reader.nextString());
|
||||||
} else {
|
} else {
|
||||||
|
@ -931,6 +1261,8 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
reader.endArray();
|
reader.endArray();
|
||||||
logger.info("Done reading access tokens");
|
logger.info("Done reading access tokens");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Map<Long, Long> authHolderOldToNewIdMap = new HashMap<Long, Long>();
|
private Map<Long, Long> authHolderOldToNewIdMap = new HashMap<Long, Long>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1046,8 +1378,8 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
return savedUserAuth;
|
return savedUserAuth;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<Long, Long> grantOldToNewIdMap = new HashMap<>();
|
private Map<Long, Long> grantOldToNewIdMap = new HashMap<>();
|
||||||
Map<Long, Set<Long>> grantToAccessTokensRefs = new HashMap<>();
|
private Map<Long, Set<Long>> grantToAccessTokensRefs = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
|
@ -1110,7 +1442,8 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
reader.endArray();
|
reader.endArray();
|
||||||
logger.info("Done reading grants");
|
logger.info("Done reading grants");
|
||||||
}
|
}
|
||||||
Map<Long, Long> whitelistedSiteOldToNewIdMap = new HashMap<Long, Long>();
|
|
||||||
|
private Map<Long, Long> whitelistedSiteOldToNewIdMap = new HashMap<Long, Long>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
|
@ -1467,6 +1800,17 @@ public class MITREidDataService_1_2 extends MITREidDataServiceSupport implements
|
||||||
}
|
}
|
||||||
accessTokenOldToNewIdMap.clear();
|
accessTokenOldToNewIdMap.clear();
|
||||||
grantOldToNewIdMap.clear();
|
grantOldToNewIdMap.clear();
|
||||||
|
for (Long permissionId : permissionToResourceRefs.keySet()) {
|
||||||
|
Long oldResourceId = permissionToResourceRefs.get(permissionId);
|
||||||
|
Long newResourceId = resourceSetOldToNewIdMap.get(oldResourceId);
|
||||||
|
Permission p = permissionRepository.getById(permissionId);
|
||||||
|
ResourceSet rs = resourceSetRepository.getById(newResourceId);
|
||||||
|
p.setResourceSet(rs);
|
||||||
|
permissionRepository.saveRawPermission(p);
|
||||||
|
}
|
||||||
|
permissionToResourceRefs.clear();
|
||||||
|
resourceSetOldToNewIdMap.clear();
|
||||||
|
|
||||||
logger.info("Done fixing object references.");
|
logger.info("Done fixing object references.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import javax.persistence.EntityManager;
|
||||||
import javax.persistence.PersistenceContext;
|
import javax.persistence.PersistenceContext;
|
||||||
import javax.persistence.TypedQuery;
|
import javax.persistence.TypedQuery;
|
||||||
|
|
||||||
|
import org.mitre.uma.model.Permission;
|
||||||
import org.mitre.uma.model.PermissionTicket;
|
import org.mitre.uma.model.PermissionTicket;
|
||||||
import org.mitre.uma.repository.PermissionRepository;
|
import org.mitre.uma.repository.PermissionRepository;
|
||||||
import org.mitre.util.jpa.JpaUtil;
|
import org.mitre.util.jpa.JpaUtil;
|
||||||
|
@ -64,4 +65,20 @@ public class JpaPermissionRepository implements PermissionRepository {
|
||||||
return query.getResultList();
|
return query.getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.mitre.uma.repository.PermissionRepository#saveRawPermission(org.mitre.uma.model.Permission)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Permission saveRawPermission(Permission p) {
|
||||||
|
return JpaUtil.saveOrUpdate(p.getId(), em, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.mitre.uma.repository.PermissionRepository#getById(java.lang.Long)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Permission getById(Long permissionId) {
|
||||||
|
return em.find(Permission.class, permissionId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
package org.mitre.uma.service.impl;
|
package org.mitre.uma.service.impl;
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -93,14 +92,6 @@ public class DefaultPermissionService implements PermissionService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.mitre.uma.service.PermissionService#getAll()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Collection<PermissionTicket> getAll() {
|
|
||||||
return repository.getAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,12 +116,4 @@ public class DefaultResourceSetService implements ResourceSetService {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.mitre.uma.service.ResourceSetService#getAll()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Collection<ResourceSet> getAll() {
|
|
||||||
return repository.getAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue