diff --git a/mozen/pom.xml b/mozen/pom.xml index 993375b9df8e869dbf616b1f9741dc3b9fcde032..dfe5cd84531de1119e98c0d253c2477ce9d7687d 100644 --- a/mozen/pom.xml +++ b/mozen/pom.xml @@ -36,16 +36,16 @@ <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> </dependency> - <dependency> - <groupId>io.jsonwebtoken</groupId> - <artifactId>jjwt</artifactId> - <version>0.9.1</version> - </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.6.0</version> </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt</artifactId> + <version>0.9.1</version> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java index d2dc292334f5f136fe0a85e29efdc6cf18005fc7..7e4650eac1cb314e788d6bf7c876ad39eb1a2bd1 100644 --- a/mozen/src/main/java/mozen/business/IUserManager.java +++ b/mozen/src/main/java/mozen/business/IUserManager.java @@ -3,11 +3,12 @@ package mozen.business; import java.util.Collection; import mozen.messages.SignupMessage; +import mozen.messages.UserUpdateMessage; import mozen.model.User; public interface IUserManager { User addUser(SignupMessage message); - void updateUser(User user, User userToUpdate) throws Exception; + void updateUser(User user, UserUpdateMessage message) throws Exception; void removeUser(User user, Long id); Collection<User> getUsers(); diff --git a/mozen/src/main/java/mozen/business/UserManager.java b/mozen/src/main/java/mozen/business/UserManager.java index 38eb22e4f36528a4e42972e6bad10c3049c181a2..450934deb1ca736ae4e5d29a03fd5be94b62fc50 100644 --- a/mozen/src/main/java/mozen/business/UserManager.java +++ b/mozen/src/main/java/mozen/business/UserManager.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import mozen.model.Role; import mozen.messages.SignupMessage; +import mozen.messages.UserUpdateMessage; import mozen.model.User; import mozen.repos.UserRepository; import mozen.utils.UserHelper; @@ -37,8 +38,18 @@ public class UserManager implements IUserManager { } @Override - public void updateUser(User user, User userToUpdate) throws Exception { - if(isRightUser(user, userToUpdate)) repo.save(userToUpdate); + public void updateUser(User user, UserUpdateMessage message) throws Exception { + User userToUpdate = getUser(message.getId()); + + if(!isRightUser(user, userToUpdate)) + throw new Exception("Not the user"); + + userToUpdate.setEmail(message.getEmail()); + userToUpdate.setUsername(message.getUsername()); + if (message.getPassword() != null) + userToUpdate.setPassword(bCryptPasswordEncoder.encode(message.getPassword())); + + repo.save(userToUpdate); } @Override diff --git a/mozen/src/main/java/mozen/messages/UserUpdateMessage.java b/mozen/src/main/java/mozen/messages/UserUpdateMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..2885e748f4d91f5bcc7f82ca305a7cccaa483e96 --- /dev/null +++ b/mozen/src/main/java/mozen/messages/UserUpdateMessage.java @@ -0,0 +1,69 @@ +package mozen.messages; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +public class UserUpdateMessage implements Serializable{ + private static final long serialVersionUID = 1L; + + @NotNull + private Long id; + + @NotNull + @Size(min = 1, max = 30) + private String username; + + @Size(min = 1, max = 60) + private String password; + + @NotNull + @Size(min = 1, max = 30) + @Pattern(regexp="([a-z0-9])+([.]([a-z0-9])+)?@([a-z])+(([.]([a-z])+)?|([-]([a-z])+)?)+.([a-z]){2,}") + private String email; + + public UserUpdateMessage() { + } + + public UserUpdateMessage(Long id, String username, String password, String email) { + this.id = id; + this.username = username; + this.password = password; + this.email = email; + } + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return this.username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return this.email; + } + + public void setEmail(String email) { + this.email = email; + } + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java index 4636076933d973332410aff64ab5a6cb61b843c0..fd19c3e9c1aa1c3ede377ebcbf7c7e0d1d5dd9f7 100644 --- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java +++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java @@ -23,22 +23,48 @@ import mozen.model.Tag; import mozen.model.TagCategory; import mozen.model.User; import mozen.repos.ModelRepository; +import mozen.repos.TagRepository; import mozen.repos.UserRepository; @Service public class DatabaseFiller { @Autowired - ModelRepository modelRepo; + private ModelRepository modelRepo; @Autowired - UserRepository userRepo; + private UserRepository userRepo; + + @Autowired + private TagRepository tagRepo; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @EventListener(ContextRefreshedEvent.class) public void onApplicationEvent(ContextRefreshedEvent event) { - event.getApplicationContext().getBean(DatabaseFiller.class).fillDB(); + // event.getApplicationContext().getBean(DatabaseFiller.class).fillDB(); + event.getApplicationContext().getBean(DatabaseFiller.class).fillDBBasic(); + } + + @Transactional + public void addAdmin() { + User admin = new User(); + admin.setEmail("admin@admin.admin"); + admin.setPassword(bCryptPasswordEncoder.encode("1234")); + admin.setUsername("admin"); + admin.setRole(Role.ADMIN); + + try { + userRepo.save(admin); + System.err.println("[DB FILLER] Admin added"); + } catch (Exception e) { + System.err.println("[DB FILLER] Admin already present"); + } + } + + public void fillDBBasic() { + addAdmin(); + basicTags(); } @Transactional @@ -56,12 +82,6 @@ public class DatabaseFiller { u2.setUsername("user 2"); u2.setRole(Role.DEFAULT); - User admin = new User(); - admin.setEmail("admin@admin.admin"); - admin.setPassword(bCryptPasswordEncoder.encode("1234")); - admin.setUsername("admin"); - admin.setRole(Role.ADMIN); - Model m1 = new Model(); m1.setAuthor(u1); m1.setName("Model Testo"); @@ -103,10 +123,11 @@ public class DatabaseFiller { userRepo.save(u1); userRepo.save(u2); - userRepo.save(admin); System.err.println("[DB FILLER] Users added"); + addAdmin(); + modelRepo.save(m1); System.err.println("[DB FILLER] Model added"); } @@ -143,4 +164,39 @@ public class DatabaseFiller { return tags; } + public void basicTags() { + try { + TagCategory category_task = new TagCategory(); + category_task.setName("Task"); + + Tag tag = new Tag(); + tag.setCategory(category_task); + tag.setName("Classification"); + tagRepo.save(tag); + + + TagCategory category_arch = new TagCategory(); + category_arch.setName("Architecture"); + + Tag tag2 = new Tag(); + tag2.setCategory(category_arch); + tag2.setName("VGG19"); + tagRepo.save(tag2); + + + TagCategory category_dataset = new TagCategory(); + category_dataset.setName("Dataset"); + + Tag tag3 = new Tag(); + tag3.setCategory(category_dataset); + tag3.setName("Cifar10"); + tagRepo.save(tag3); + + System.err.println("[DB FILLER] Basic tags added"); + } catch (Exception e) { + System.err.println(e); + System.err.println("[DB FILLER] Basic tags already present"); + } + } + } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/utils/Md5Utils.java b/mozen/src/main/java/mozen/utils/Md5Utils.java index 963b7205605dbf01cb5506d86483f90bb8261168..5bc1b44357668672b56551386d763c46abfe55ad 100644 --- a/mozen/src/main/java/mozen/utils/Md5Utils.java +++ b/mozen/src/main/java/mozen/utils/Md5Utils.java @@ -1,20 +1,19 @@ package mozen.utils; +import java.io.BufferedInputStream; import java.io.IOException; -import java.math.BigInteger; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.io.InputStream; +import org.springframework.util.DigestUtils; import org.springframework.web.multipart.MultipartFile; public class Md5Utils { public static String getMD5(MultipartFile file) { try { - byte[] uploadBytes = file.getBytes(); - MessageDigest md5 = MessageDigest.getInstance("MD5"); - byte[] digest = md5.digest(uploadBytes); - return new BigInteger(1, digest).toString(16); - } catch (NoSuchAlgorithmException | IOException e) { + InputStream inputStream = new BufferedInputStream(file.getInputStream()); + String digest = DigestUtils.md5DigestAsHex(inputStream); + return digest; + } catch (IOException e) { e.printStackTrace(); return null; } diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java index c5504ad728f00c06893a0fb9d13f81e18db414cf..c3a18f984452957946afb8e96842eead45f09e82 100644 --- a/mozen/src/main/java/mozen/web/UserController.java +++ b/mozen/src/main/java/mozen/web/UserController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; import mozen.business.IUserManager; import mozen.messages.ResponseMessage; import mozen.messages.SignupMessage; +import mozen.messages.UserUpdateMessage; import mozen.model.User; import mozen.utils.JwtUtils; import mozen.utils.UserHelper; @@ -46,24 +48,24 @@ public class UserController { return userManager.getUsers(); } - @PostMapping("") - public ResponseEntity<ResponseMessage> changeUserDetails(@RequestParam User userToUpdate) { + @PutMapping("") + public ResponseEntity<ResponseMessage> changeUserDetails(@RequestBody @Valid UserUpdateMessage message) { ResponseMessage response = new ResponseMessage(false, ""); User user = UserHelper.getCurrentUser(userManager); if(user == null) { response.setError(true); response.setMessage("User unknown"); - return ResponseEntity.ok(response); + return ResponseEntity.badRequest().body(response); } try { - userManager.updateUser(user ,userToUpdate); + userManager.updateUser(user ,message); + return ResponseEntity.ok(response); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage()); + return ResponseEntity.badRequest().body(response); } - - return ResponseEntity.ok().build(); } @DeleteMapping("") @@ -73,16 +75,17 @@ public class UserController { if(user == null) { response.setError(true); response.setMessage("User unknown"); - return ResponseEntity.ok(response); + return ResponseEntity.badRequest().body(response); } try { userManager.removeUser(user, id); + return ResponseEntity.ok().build(); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage()); + return ResponseEntity.badRequest().body(response); } - return ResponseEntity.ok().build(); } @PostMapping("/signup") @@ -95,12 +98,12 @@ public class UserController { Set<GrantedAuthority> grantedAuthorities = new HashSet<>(); grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+user.getRole())); response.setMessage(JwtUtils.generateToken(user.getUsername(), grantedAuthorities)); + return ResponseEntity.ok(response); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage()); - } - - return ResponseEntity.ok(response); + return ResponseEntity.badRequest().body(response); + } } @GetMapping("/setAdmin") @@ -115,12 +118,11 @@ public class UserController { try { userManager.setAdmin(id, user); + return ResponseEntity.ok(response); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage()); return ResponseEntity.badRequest().body(response); } - - return ResponseEntity.ok(response); } } \ No newline at end of file diff --git a/mozen/src/main/resources/application.properties b/mozen/src/main/resources/application.properties index 4d10c8991625874e9442803c1b173e43dd415bca..a848592deb106ac5b6d3cf376c275ba51beb4f6c 100644 --- a/mozen/src/main/resources/application.properties +++ b/mozen/src/main/resources/application.properties @@ -22,11 +22,11 @@ server.port=8181 #spring.jpa.hibernate.ddl-auto=update # DOCKER + MARIADB -spring.datasource.url=jdbc:mariadb://mozen_mariadb:3306/MOZEN_DB -spring.datasource.username=mozen_user -spring.datasource.password=1234 -spring.datasource.driver-class-name=org.mariadb.jdbc.Driver -spring.jpa.hibernate.ddl-auto=update +#spring.datasource.url=jdbc:mariadb://mozen_mariadb:3306/MOZEN_DB +#spring.datasource.username=mozen_user +#spring.datasource.password=1234 +#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver +#spring.jpa.hibernate.ddl-auto=update spring.servlet.multipart.max-file-size=10GB spring.servlet.multipart.max-request-size=10GB