package it.inaf.ia2.gms.service; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.persistence.PermissionsDAO; import static it.inaf.ia2.gms.persistence.model.ActionType.*; import it.inaf.ia2.gms.persistence.model.GroupEntity; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class PermissionsService { private final PermissionsDAO permissionsDAO; private final LoggingDAO loggingDAO; @Autowired public PermissionsService(PermissionsDAO permissionsDAO, LoggingDAO loggingDAO) { this.permissionsDAO = permissionsDAO; this.loggingDAO = loggingDAO; } public List getGroupPermissions(GroupEntity group) { return permissionsDAO.getGroupsPermissions(group.getId()); } public List findUserPermissions(String userId) { return permissionsDAO.findUserPermissions(userId); } public List findUserPermissions(GroupEntity group, String userId) { return permissionsDAO.findUserPermissions(userId, group.getPath()); } public void removePermission(GroupEntity group, String userId) { permissionsDAO.deletePermission(group.getId(), userId); loggingDAO.logAction(PERMISSION_REMOVED, "Removed permission for " + userId + " in group " + group.getId()); } public PermissionEntity addPermission(GroupEntity group, String userId, Permission permission, String setBy) { Optional existingPermissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId); PermissionEntity permissionEntity; if (existingPermissionEntity.isPresent()) { permissionEntity = existingPermissionEntity.get(); Permission resultingPermission = Permission.addPermission(permissionEntity.getPermission(), permission); if (resultingPermission == permissionEntity.getPermission()) { return permissionEntity; } else { permissionEntity.setPermission(resultingPermission); } } else { permissionEntity = new PermissionEntity(); permissionEntity.setGroupId(group.getId()); permissionEntity.setUserId(userId); permissionEntity.setPermission(permission); permissionEntity.setGroupPath(group.getPath()); permissionEntity.setSetBy(setBy); } permissionEntity = permissionsDAO.createOrUpdatePermission(permissionEntity); loggingDAO.logAction(PERMISSION_ADDED, "Added " + permission + " permission for " + userId + " in group " + group.getId()); return permissionEntity; } public PermissionEntity createOrUpdatePermission(GroupEntity group, String userId, Permission permission, String setBy) { PermissionEntity permissionEntity = new PermissionEntity(); permissionEntity.setGroupId(group.getId()); permissionEntity.setUserId(userId); permissionEntity.setPermission(permission); permissionEntity.setGroupPath(group.getPath()); permissionEntity.setSetBy(setBy); permissionEntity = permissionsDAO.createOrUpdatePermission(permissionEntity); loggingDAO.logAction(PERMISSION_ADDED, "Added " + permission + " permission for " + userId + " in group " + group.getId()); return permissionEntity; } public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission, String setBy) { PermissionEntity permissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId) .orElseThrow(() -> new IllegalArgumentException("Specified permission not found")); permissionEntity.setSetBy(setBy); permissionEntity.setPermission(permission); permissionEntity = permissionsDAO.updatePermission(permissionEntity); loggingDAO.logAction(PERMISSION_UPDATED, "Updated permission for " + userId + " in group " + group.getId() + " to " + permission); return permissionEntity; } }