Skip to content

Commit

Permalink
fixed accesskeymanager
Browse files Browse the repository at this point in the history
  • Loading branch information
golsch committed Feb 14, 2025
1 parent 7e7512b commit cebd09b
Showing 1 changed file with 35 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,13 @@
import static org.mycore.access.MCRAccessManager.PERMISSION_READ;
import static org.mycore.access.MCRAccessManager.PERMISSION_WRITE;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;

import org.mycore.common.MCRException;
import org.mycore.common.MCRSessionMgr;
import org.mycore.datamodel.metadata.MCRObjectID;
import org.mycore.mcr.acl.accesskey.MCRAccessKeyManager;
import org.mycore.mcr.acl.accesskey.model.MCRAccessKey;
import org.mycore.mcr.acl.accesskey.dto.MCRAccessKeyDto;
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyService;
import org.mycore.mcr.acl.accesskey.service.MCRAccessKeyServiceFactory;
import org.mycore.mir.authorization.accesskeys.backend.MIRAccessKeyPair;

public final class MIRAccessKeyManager {
Expand All @@ -44,14 +41,13 @@ public final class MIRAccessKeyManager {
* @return the {@link MIRAccessKeyPair}
*/
public static synchronized MIRAccessKeyPair getKeyPair(final MCRObjectID mcrObjectId) {
final MCRAccessKey accessKeyRead = MCRAccessKeyManager.listAccessKeysWithType(mcrObjectId, PERMISSION_READ)
.stream()
.findFirst()
.orElse(null);
final MCRAccessKey accessKeyWrite = MCRAccessKeyManager.listAccessKeysWithType(mcrObjectId, PERMISSION_WRITE)
.stream()
.findFirst()
.orElse(null);
final MCRAccessKeyService service = MCRAccessKeyServiceFactory.getAccessKeyService();
final MCRAccessKeyDto accessKeyRead
= service.findAccessKeysByReferenceAndPermission(mcrObjectId.toString(), PERMISSION_READ).stream()
.findFirst().orElse(null);
final MCRAccessKeyDto accessKeyWrite
= service.findAccessKeysByReferenceAndPermission(mcrObjectId.toString(), PERMISSION_WRITE).stream()
.findFirst().orElse(null);
if (accessKeyRead != null) {
if (accessKeyWrite != null) {
return new MIRAccessKeyPair(mcrObjectId, accessKeyRead.getSecret(), accessKeyWrite.getSecret());
Expand Down Expand Up @@ -88,18 +84,19 @@ public static void createKeyPair(final MIRAccessKeyPair accKP) throws MCRExcepti
throw new MCRException("There is already an existing key pair.");
}
final String readValue = accKP.getReadKey();
if (readValue == null || !MCRAccessKeyManager.isValidSecret(readValue)) {
throw new MCRException("Read key is needed or invalid.");
}
final String writeValue = accKP.getWriteKey();
if (writeValue != null && !MCRAccessKeyManager.isValidSecret(writeValue)) {
throw new MCRException("Write key is invalid.");
}
final MCRAccessKey accessKeyRead = new MCRAccessKey(readValue, PERMISSION_READ);
MCRAccessKeyManager.createAccessKey(objectId, accessKeyRead);
final MCRAccessKeyDto accessKeyRead = new MCRAccessKeyDto();
accessKeyRead.setReference(objectId.toString());
accessKeyRead.setPermission(PERMISSION_READ);
accessKeyRead.setSecret(readValue);
final MCRAccessKeyService service = MCRAccessKeyServiceFactory.getAccessKeyService();
service.addAccessKey(accessKeyRead);
if (writeValue != null) {
final MCRAccessKey accessKeyWrite = new MCRAccessKey(writeValue, PERMISSION_WRITE);
MCRAccessKeyManager.createAccessKey(objectId, accessKeyWrite);
final MCRAccessKeyDto accessKeyWrite = new MCRAccessKeyDto();
accessKeyRead.setReference(objectId.toString());
accessKeyRead.setPermission(PERMISSION_WRITE);
accessKeyRead.setSecret(writeValue);
service.addAccessKey(accessKeyWrite);
}
}

Expand All @@ -119,47 +116,27 @@ public static void updateKeyPair(final MIRAccessKeyPair accKP) throws MCRExcepti
if (readValue == null && writeValue != null) {
throw new MCRException("Cannot update without existing read key.");
}
final MCRAccessKey accessKeyRead = MCRAccessKeyManager.listAccessKeysWithType(objectId, PERMISSION_READ)
.stream()
.findFirst()
.orElse(null);
MCRAccessKey accessKeyWrite = MCRAccessKeyManager.listAccessKeysWithType(objectId, PERMISSION_WRITE)
.stream()
.findFirst()
.orElse(null);
final MCRAccessKeyService service = MCRAccessKeyServiceFactory.getAccessKeyService();

final MCRAccessKeyDto accessKeyRead
= service.findAccessKeysByReferenceAndPermission(objectId.toString(), PERMISSION_READ).stream()
.findFirst().orElse(null);
final MCRAccessKeyDto accessKeyWrite
= service.findAccessKeysByReferenceAndPermission(objectId.toString(), PERMISSION_WRITE).stream()
.findFirst().orElse(null);

if (accessKeyRead == null && accessKeyWrite == null) { // create
createKeyPair(accKP);
} else {
final List<MCRAccessKey> accessKeys = new ArrayList<>();
MCRAccessKeyManager.clearAccessKeys(objectId);
service.removeAccessKeysByReference(objectId.toString());
if (readValue.length() > 0) {
if (!MCRAccessKeyManager.isValidSecret(readValue)) {
throw new MCRException("Secret is invalid.");
}
accessKeyRead.setSecret(MCRAccessKeyManager.hashSecret(readValue, objectId));
accessKeys.add(accessKeyRead);
accessKeyRead.setSecret(readValue);
service.addAccessKey(accessKeyRead);
}
if (writeValue != null && writeValue.length() > 0) {
if (!MCRAccessKeyManager.isValidSecret(writeValue)) {
throw new MCRException("Secret is invalid.");
}
if (accessKeyWrite == null) {
accessKeyWrite = new MCRAccessKey(writeValue, PERMISSION_WRITE);
}
accessKeyWrite.setSecret(MCRAccessKeyManager.hashSecret(writeValue, objectId));
accessKeys.add(accessKeyWrite);
accessKeyWrite.setSecret(writeValue);
service.addAccessKey(accessKeyWrite);
}
addDefaultKeyInformations(accessKeys);
MCRAccessKeyManager.addAccessKeys(objectId, accessKeys);
}
}

private static void addDefaultKeyInformations(final List<MCRAccessKey> accessKeys) {
for (final MCRAccessKey accessKey : accessKeys) {
accessKey.setIsActive(true);
accessKey.setLastModified(new Date());
accessKey.setLastModifiedBy(MCRSessionMgr.getCurrentSession().getUserInformation().getUserID());
}
}

Expand All @@ -170,6 +147,6 @@ private static void addDefaultKeyInformations(final List<MCRAccessKey> accessKey
* @throws MCRException pair is not valid
*/
public static void deleteKeyPair(final MCRObjectID objectId) {
MCRAccessKeyManager.clearAccessKeys(objectId);
MCRAccessKeyServiceFactory.getAccessKeyService().removeAccessKeysByReference(objectId.toString());
}
}

0 comments on commit cebd09b

Please sign in to comment.