Skip to content
Snippets Groups Projects
Verified Commit cef83d45 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: ACM Service

parent 7399c192
No related branches found
No related tags found
2 merge requests!58REL: prepare release 0.7.2,!45F grpc f acm
Pipeline #15131 failed
caosdb-proto @ 26b47c4c
Subproject commit 73d85fb20bb16902c0a89dda697eed17994712bc
Subproject commit 26b47c4c875ab6f664e83ae332434550ea12d663
......@@ -44,6 +44,7 @@ import org.caosdb.server.database.backend.implementation.MySQL.MySQLInsertRole;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLInsertSparseEntity;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLInsertTransactionHistory;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLIsSubType;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLListRoles;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLRegisterSubDomain;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLRetrieveAll;
import org.caosdb.server.database.backend.implementation.MySQL.MySQLRetrieveAllUncheckedFiles;
......@@ -99,6 +100,7 @@ import org.caosdb.server.database.backend.interfaces.InsertRoleImpl;
import org.caosdb.server.database.backend.interfaces.InsertSparseEntityImpl;
import org.caosdb.server.database.backend.interfaces.InsertTransactionHistoryImpl;
import org.caosdb.server.database.backend.interfaces.IsSubTypeImpl;
import org.caosdb.server.database.backend.interfaces.ListRolesImpl;
import org.caosdb.server.database.backend.interfaces.RegisterSubDomainImpl;
import org.caosdb.server.database.backend.interfaces.RetrieveAllImpl;
import org.caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl;
......@@ -192,6 +194,7 @@ public abstract class BackendTransaction implements Undoable {
setImpl(FileCheckSize.class, UnixFileSystemCheckSize.class);
setImpl(InsertRoleImpl.class, MySQLInsertRole.class);
setImpl(RetrieveRoleImpl.class, MySQLRetrieveRole.class);
setImpl(ListRolesImpl.class, MySQLListRoles.class);
setImpl(DeleteRoleImpl.class, MySQLDeleteRole.class);
setImpl(SetPermissionRulesImpl.class, MySQLSetPermissionRules.class);
setImpl(RetrievePermissionRulesImpl.class, MySQLRetrievePermissionRules.class);
......
package org.caosdb.server.database.backend.implementation.MySQL;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import org.caosdb.server.accessControl.Role;
import org.caosdb.server.database.access.Access;
import org.caosdb.server.database.backend.interfaces.ListRolesImpl;
import org.caosdb.server.database.exceptions.TransactionException;
public class MySQLListRoles extends MySQLTransaction implements ListRolesImpl {
public MySQLListRoles(Access access) {
super(access);
}
public static final String STMT_LIST_ROLES = "SELECT name, description FROM roles";
@Override
public List<Role> execute() {
List<Role> roles = new LinkedList<>();
try {
final PreparedStatement stmt = prepareStatement(STMT_LIST_ROLES);
final ResultSet rs = stmt.executeQuery();
try {
while (rs.next()) {
final Role role = new Role();
role.name = rs.getString("name");
role.description = rs.getString("description");
roles.add(role);
}
} finally {
rs.close();
}
} catch (final SQLException e) {
throw new TransactionException(e);
} catch (final ConnectionException e) {
throw new TransactionException(e);
}
return roles;
}
}
package org.caosdb.server.database.backend.interfaces;
import java.util.List;
import org.caosdb.server.accessControl.Role;
public interface ListRolesImpl extends BackendTransactionImpl {
public List<Role> execute();
}
package org.caosdb.server.grpc;
import io.grpc.stub.StreamObserver;
import java.util.List;
import org.caosdb.api.acm.v1alpha1.AccessControlManagementServiceGrpc.AccessControlManagementServiceImplBase;
import org.caosdb.api.acm.v1alpha1.ListRolesRequest;
import org.caosdb.api.acm.v1alpha1.ListRolesResponse;
import org.caosdb.server.accessControl.Role;
import org.caosdb.server.transaction.ListRolesTransaction;
public class AccessControlManagementServiceImpl extends AccessControlManagementServiceImplBase {
@Override
public void listRoles(
ListRolesRequest request, StreamObserver<ListRolesResponse> responseObserver) {
try {
final ListRolesResponse response = listRolesTransaction(request);
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (final Exception e) {
e.printStackTrace();
responseObserver.onError(e);
}
}
private ListRolesResponse listRolesTransaction(ListRolesRequest request) throws Exception {
ListRolesTransaction transaction = new ListRolesTransaction();
transaction.execute();
List<Role> roles = transaction.getRoles();
return convert(roles);
}
private ListRolesResponse convert(List<Role> roles) {
ListRolesResponse.Builder response = ListRolesResponse.newBuilder();
roles.forEach(
role -> {
response.addRoles(convert(role));
});
return response.build();
}
private org.caosdb.api.acm.v1alpha1.Role.Builder convert(Role role) {
org.caosdb.api.acm.v1alpha1.Role.Builder result = org.caosdb.api.acm.v1alpha1.Role.newBuilder();
result.setDescription(role.description);
result.setName(role.name);
return result;
}
}
package org.caosdb.server.transaction;
import java.util.List;
import org.caosdb.server.accessControl.Role;
import org.caosdb.server.database.BackendTransaction;
import org.caosdb.server.database.backend.interfaces.ListRolesImpl;
public class ListRoles extends BackendTransaction {
private List<Role> roles;
@Override
protected void execute() {
ListRolesImpl t = getImplementation(ListRolesImpl.class);
roles = t.execute();
}
public List<Role> getRoles() {
return roles;
}
}
package org.caosdb.server.transaction;
import java.util.List;
import org.caosdb.server.accessControl.Role;
import org.caosdb.server.database.backend.transaction.ListRoles;
public class ListRolesTransaction extends AccessControlTransaction {
private List<Role> roles = null;
@Override
protected void transaction() throws Exception {
roles = execute(new ListRoles(), getAccess()).getRoles();
}
public List<Role> getRoles() {
return roles;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment