Skip to content
Snippets Groups Projects
Commit ef4577ac authored by Thomas's avatar Thomas
Browse files

Added admin power

parent 6ac3ce2d
No related branches found
No related tags found
No related merge requests found
Showing
with 124 additions and 66 deletions
......@@ -38,5 +38,4 @@ public class JwtUserDetailsService implements UserDetailsService {
return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
}
}
\ No newline at end of file
......@@ -31,6 +31,8 @@ public class WebSecurity extends WebSecurityConfigurerAdapter{
.antMatchers(HttpMethod.GET, "/search").permitAll()
.antMatchers(HttpMethod.GET, "/models").permitAll()
.antMatchers(HttpMethod.GET, "/models/tags").permitAll()
.antMatchers(HttpMethod.GET, "/user/list").hasRole("ADMIN")
.antMatchers(HttpMethod.GET, "/model/list").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
......
......@@ -23,6 +23,7 @@ public interface IModelManager {
void addTag(TagMessage message);
Model getModel(long id);
Collection<Model> getModels();
Collection<TagCategory> getTags();
SearchResult findModel(String name, int page, int size, String sort);
......
package mozen.business;
import java.util.Collection;
import mozen.messages.SignupMessage;
import mozen.model.User;
public interface IUserManager {
Long addUser(SignupMessage message);
void updateUser(User u);
void removeUser(Long id);
void updateUser(User user, User userToUpdate);
void removeUser(User user, Long id);
Collection<User> getUsers();
User getUser(Long id);
User getUserByUsername(String username);
......
......@@ -17,6 +17,7 @@ import mozen.messages.ModelMessage;
import mozen.messages.TagMessage;
import mozen.model.CustomLayer;
import mozen.model.Model;
import mozen.model.Role;
import mozen.messages.SearchResult;
import mozen.model.Tag;
import mozen.model.TagCategory;
......@@ -188,10 +189,12 @@ public class ModelManager implements IModelManager {
}
private boolean isLayerAuthor(CustomLayer layer, User user) {
if (user.getRole() == Role.ROLE_ADMIN) return true;
return layer.getModel().getAuthor() == user;
}
private boolean isModelAuthor(Model model, User user) {
if (user.getRole() == Role.ROLE_ADMIN) return true;
return model.getAuthor() == user;
}
......@@ -218,4 +221,9 @@ public class ModelManager implements IModelManager {
return result;
}
@Override
public Collection<Model> getModels() {
return modelRepo.findAll();
}
}
\ No newline at end of file
......@@ -10,10 +10,11 @@ import mozen.model.Model;
import mozen.model.Tag;
public interface ModelRepository extends PagingAndSortingRepository<Model, Long> {
Collection<Model> findAll();
Page<Model> findByNameContainingIgnoreCase(String name, Pageable pageable);
Page<Model> findByNameContainingIgnoreCaseAndTagsIn(String name, Collection<Tag> tags, Pageable pageable);
// @Query("SELECT m FROM Model m WHERE m.name LIKE :name AND m.tags CONTAINS (SELECT t FROM Tag WHERE t.name IN :tags)") <- horrible et c'est même pas complet
// @Query("SELECT m FROM Model m WHERE m.name LIKE :name AND m.tags CONTAINS (SELECT t FROM Tag WHERE t.name IN :tags)") <- enfer absolu
// Page<Model> findByNameContainingIgnoreCaseTags(@Param("name") String name, @Param("tags") Collection<String> tags, Pageable pageable);
}
\ No newline at end of file
package mozen.business;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
......@@ -19,25 +21,27 @@ public class UserManager implements IUserManager {
@Override
public Long addUser(SignupMessage message) {
System.err.println("[USER MANAGER] add new user u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
System.err.println("[USER MANAGER] add new user u:" + message.getUsername() + " e:" + message.getEmail() + " p:"
+ message.getPassword());
User u = new User();
u.setEmail(message.getEmail());
u.setUsername(message.getUsername());
u.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
u.setRole(Role.Default);
u.setRole(Role.ROLE_DEFAULT);
repo.save(u);
return u.getId();
}
@Override
public void updateUser(User u) {
repo.save(u);
public void updateUser(User user, User userToUpdate) {
if(isRightUser(user, userToUpdate)) repo.save(userToUpdate);
}
@Override
public void removeUser(Long id) {
repo.deleteById(id);
public void removeUser(User user, Long id) {
User userToRemove = repo.findById(id).get();
if(isRightUser(user, userToRemove)) repo.deleteById(id);
}
@Override
......@@ -62,4 +66,14 @@ public class UserManager implements IUserManager {
return repo.findByUsername(username).get(0);
}
@Override
public Collection<User> getUsers() {
return repo.findAll();
}
private boolean isRightUser(User userToCheck, User user) {
if (userToCheck.getRole() == Role.ROLE_ADMIN) return true;
return userToCheck.getId().equals(user.getId());
}
}
\ No newline at end of file
......@@ -8,4 +8,5 @@ import mozen.model.User;
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
List<User> findByUsername(String username);
List<User> findAll();
}
\ No newline at end of file
package mozen.model;
public enum Role {
Default, Admin
ROLE_DEFAULT, ROLE_ADMIN
}
\ No newline at end of file
......@@ -116,7 +116,6 @@ public class User implements Serializable{
this.models = models;
}
@JsonIgnore
public Role getRole() {
return this.role;
}
......@@ -124,6 +123,4 @@ public class User implements Serializable{
public void setRole(Role role) {
this.role = role;
}
}
\ No newline at end of file
......@@ -47,13 +47,19 @@ public class DatabaseFiller {
u1.setEmail("user1@email.com");
u1.setPassword(bCryptPasswordEncoder.encode("1234"));
u1.setUsername("user 1");
u1.setRole(Role.Default);
u1.setRole(Role.ROLE_DEFAULT);
User u2 = new User();
u2.setEmail("user2@email.com");
u2.setPassword(bCryptPasswordEncoder.encode("1234"));
u2.setUsername("user 2");
u2.setRole(Role.Admin);
u2.setRole(Role.ROLE_DEFAULT);
User admin = new User();
admin.setEmail("admin@admin.admin");
admin.setPassword(bCryptPasswordEncoder.encode("1234"));
admin.setUsername("admin");
admin.setRole(Role.ROLE_ADMIN);
Model m1 = new Model();
m1.setAuthor(u1);
......@@ -63,27 +69,6 @@ public class DatabaseFiller {
m1.setVotes(0);
m1.setAdded(new Date());
m1.setLastModified(new Date());
/*Set<Tag> m1tags = new HashSet<Tag>();
TagCategory ca1 = new TagCategory();
ca1.setName("Layer");
Tag t1 = new Tag();
t1.setCategory(ca1);
t1.setName("Conv2D");
TagCategory ca2 = new TagCategory();
ca2.setName("Architecture");
Tag t2 = new Tag();
t2.setCategory(ca2);
t2.setName("VGG19");
m1tags.add(t1);
m1tags.add(t2);
m1.setTags(m1tags);
*/
m1.setTags(tagLoader("tags.txt"));
Set<CustomLayer> m1layers = new HashSet<CustomLayer>();
......@@ -99,6 +84,7 @@ public class DatabaseFiller {
userRepo.save(u1);
userRepo.save(u2);
userRepo.save(admin);
modelRepo.save(m1);
}
......
package mozen.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import mozen.business.IModelManager;
import mozen.business.IUserManager;
@RestController
@RequestMapping("/admin")
@CrossOrigin
public class AdminController {
@Autowired
IModelManager modelManager;
@Autowired
IUserManager userManager;
}
\ No newline at end of file
......@@ -45,7 +45,7 @@ public class ModelController {
@GetMapping("")
public ResponseEntity<?> getModelDetails(@RequestParam(value = "id", required = false) Long id) {
User user = getUser();
User user = getCurrentUser();
if(user != null) {
return ResponseEntity.ok().body(user.getModels());
} else {
......@@ -57,7 +57,7 @@ public class ModelController {
@PostMapping("")
public ResponseEntity<ResponseMessage> addModel(@RequestBody @Valid ModelMessage message) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
......@@ -78,7 +78,7 @@ public class ModelController {
@PutMapping("")
public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, @RequestBody @Valid Model model) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
......@@ -98,7 +98,7 @@ public class ModelController {
@DeleteMapping("")
public ResponseEntity<ResponseMessage> deleteModel(@RequestParam(value = "id", required = true) Long id) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
......@@ -115,6 +115,11 @@ public class ModelController {
return ResponseEntity.ok(response);
}
@GetMapping("/list")
public Collection<Model> getAllModels() {
return modelManager.getModels();
}
@GetMapping("/tags")
public Collection<TagCategory> getTags() {
return modelManager.getTags();
......@@ -129,7 +134,7 @@ public class ModelController {
@PostMapping("/upload")
public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "id", required = true) Long id) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
......@@ -171,7 +176,7 @@ public class ModelController {
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "name", required = true) String name) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
......@@ -189,7 +194,7 @@ public class ModelController {
return ResponseEntity.ok(response);
}
private User getUser() {
private User getCurrentUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
......
package mozen.web;
import java.util.Collection;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.BindingResult;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import mozen.business.IUserManager;
......@@ -32,6 +38,50 @@ public class UserController {
return manager.getUserByUsername(username);
}
@GetMapping("/list")
public Collection<User> getUserList() {
return manager.getUsers();
}
@PostMapping("")
public ResponseEntity<ResponseMessage> changeUserDetails(@RequestParam User userToUpdate) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
return ResponseEntity.ok(response);
}
try {
manager.updateUser(user ,userToUpdate);
} catch (Exception e) {
response.setError(true);
response.setMessage(e.getMessage());
}
return ResponseEntity.ok().build();
}
@DeleteMapping("")
public ResponseEntity<ResponseMessage> deleteUser(@RequestParam Long id) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getCurrentUser();
if(user == null) {
response.setError(true);
response.setMessage("User unknown");
return ResponseEntity.ok(response);
}
try {
manager.removeUser(user, id);
} catch (Exception e) {
response.setError(true);
response.setMessage(e.getMessage());
}
return ResponseEntity.ok().build();
}
@PostMapping("/signup")
public ResponseEntity<ResponseMessage> addUser(@RequestBody @Valid SignupMessage message, BindingResult result) {
System.err.println("SIGNUP u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
......@@ -48,4 +98,15 @@ public class UserController {
return ResponseEntity.ok(response);
}
private User getCurrentUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
String username = (String) auth.getPrincipal();
return manager.getUserByUsername(username);
} else {
return null;
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment