Skip to content

Commit

Permalink
Merge pull request #73 from insea-connect/drives
Browse files Browse the repository at this point in the history
Drives
  • Loading branch information
AmimiHamza authored Jun 6, 2024
2 parents adbe0dd + 754e572 commit 1614f21
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
.requestMatchers(HttpMethod.POST, "/api/refreshToken").permitAll()
.requestMatchers(HttpMethod.GET, "/ws/**").permitAll()
.requestMatchers(HttpMethod.GET, "/swagger-ui/**").permitAll()
.requestMatchers(HttpMethod.GET, "/uploads/**").permitAll()
.requestMatchers(HttpMethod.GET, "/api/user/*").hasRole("ADMIN")
.requestMatchers(HttpMethod.POST, "/user.addUser").hasRole("ADMIN")
.anyRequest().authenticated()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@

import lombok.RequiredArgsConstructor;
import ma.insea.connect.drive.dto.DriveItemDto;
import ma.insea.connect.drive.dto.FolderDto;
import ma.insea.connect.drive.dto.DriveUserDto;
import ma.insea.connect.drive.model.DriveItem;
import ma.insea.connect.drive.model.File;
import ma.insea.connect.drive.model.Folder;
import ma.insea.connect.drive.service.DriveItemServiceImpl;
import ma.insea.connect.user.DegreePath;
import ma.insea.connect.user.User;
import ma.insea.connect.utils.Functions;

import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -24,6 +21,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


@RestController
Expand Down Expand Up @@ -127,5 +125,23 @@ public ResponseEntity<HttpStatus> handleFileUpload(@RequestParam("file") Multipa
public List<DegreePath> getDegreePaths() {
return degreePathRepository.findAll();
}
@PreAuthorize("hasRole('ADMIN') or hasRole('CLASS_REP')")
@DeleteMapping("drive/items/{itemId}")
public ResponseEntity<HttpStatus> deleteDriveItem( @PathVariable Long itemId) {
User user = functions.getConnectedUser();
Optional<DriveItem> optionalDriveItem = driveItemRepository.findById(itemId);
if (!optionalDriveItem.isPresent()) {
return ResponseEntity.notFound().build();
}
DriveItem driveItem = optionalDriveItem.get(); if(!functions.checkPermission(user, driveItem.getDegreePath())){
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
}
if(driveItem instanceof Folder){
folderService.deleteFolder(itemId);
}else{
fileRepository.deleteById(itemId);
}
return new ResponseEntity(HttpStatus.NO_CONTENT);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,4 @@ public ResponseEntity<File> updateFile(@PathVariable Long fileId, File file) {
}
return ResponseEntity.ok(fileService.updateFile(fileId, file));
}

@PreAuthorize("hasRole('CLASS_REP')")
@DeleteMapping("/{fileId}")
public ResponseEntity<File> deleteFile(@PathVariable Long fileId) {
User user = functions.getConnectedUser();
if(!functions.checkPermission(user, fileService.getFileById(fileId).getDegreePath())) {
return ResponseEntity.notFound().build();
}
if (!fileService.deleteFile(fileId)) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package ma.insea.connect.drive.controller;

import ma.insea.connect.chat.group.GroupRepository;
import ma.insea.connect.drive.dto.DriveItemDto;
import ma.insea.connect.drive.dto.DriveUserDto;
import ma.insea.connect.drive.dto.FolderDto;
import ma.insea.connect.drive.model.File;
import ma.insea.connect.drive.service.DriveItemService;
import ma.insea.connect.drive.service.FolderService;
import ma.insea.connect.user.DegreePath;
import ma.insea.connect.user.User;
import ma.insea.connect.utils.Functions;
Expand All @@ -15,23 +10,17 @@
import lombok.RequiredArgsConstructor;


import ma.insea.connect.drive.model.DriveItem;
import ma.insea.connect.drive.model.Folder;
import ma.insea.connect.drive.repository.DegreePathRepository;
import ma.insea.connect.drive.repository.FileRepository;
import ma.insea.connect.drive.repository.FolderRepository;
import ma.insea.connect.drive.service.FolderServiceImpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.multipart.MultipartFile;


import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/api/v1")
Expand All @@ -44,7 +33,7 @@ public class FolderController {
private final DegreePathRepository degreePathRepository;
private final FolderRepository folderRepository;

@PreAuthorize("hasRole('CLASS_REP')")
@PreAuthorize("hasRole('ADMIN') or hasRole('CLASS_REP')")
@PostMapping("drive/{degreePathId}/folders/{parentId}/items")
public ResponseEntity<FolderDto> createItem(@PathVariable Long degreePathId, @PathVariable Long parentId, @RequestBody FolderDto folderDto) {
User user = functions.getConnectedUser();
Expand Down Expand Up @@ -128,18 +117,4 @@ public ResponseEntity<Folder> updateFolder(@PathVariable Long folderId, Folder f
}
return ResponseEntity.ok(folderService.updateFolder(folderId, folder));
}

@PreAuthorize("hasRole('CLASS_REP')")
@DeleteMapping("/{folderId}")
public ResponseEntity<Boolean> deleteFolder(@PathVariable Long folderId, Folder folder) {
User user = functions.getConnectedUser();
if(!functions.checkPermission(user, folder.getDegreePath())){
return ResponseEntity.notFound().build();
}
if (!folderService.deleteFolder(folderId)) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.noContent().build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.nio.file.Paths;

import ma.insea.connect.user.DegreePath;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
Expand All @@ -16,10 +18,12 @@
import ma.insea.connect.user.User;
import ma.insea.connect.user.UserRepository;


@Component
@RequiredArgsConstructor
public class Functions {
private static final String UPLOAD_DIR = "packages\\insea-connect-backend\\src\\main\\resources\\static\\uploads";
@Value("${UPLOAD_DIR}")
private String UPLOAD_DIR;

private final UserRepository userRepository;
public User getConnectedUser() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ spring.security.oauth2.client.registration.keycloak.client-secret=**********
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8088/realms/INSEA-CONNECT
allowedserver = http://localhost:3000
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
spring.servlet.multipart.max-request-size=50MB
UPLOAD_DIR = src\\main\\resources\\static\\uploads

0 comments on commit 1614f21

Please sign in to comment.