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

Fixed model add & auth

parent 55ba14f8
No related branches found
No related tags found
No related merge requests found
Showing
with 296 additions and 55 deletions
......@@ -17,7 +17,8 @@ import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import mozen.model.LoginMessage;
import mozen.messages.LoginMessage;
import mozen.messages.ResponseMessage;
import mozen.utils.JwtUtils;
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter{
......@@ -46,9 +47,8 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth)
throws IOException, ServletException {
User user = (User) auth.getPrincipal();
String token = JwtUtils.generateToken(user.getUsername());
res.addHeader("Authorization", "Bearer " + token);
res.getWriter().write(new ObjectMapper().writeValueAsString(new ResponseMessage(false, token)));
// res.addHeader("Authorization", "Bearer " + token);
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import java.util.Collection;
import mozen.model.CustomLayer;
import mozen.model.Model;
import mozen.model.Tag;
import mozen.model.TagCategory;
public interface IModelDao {
......@@ -15,7 +16,10 @@ public interface IModelDao {
void updateLayer(CustomLayer l);
void removeLayer(long id);
void addTag(Tag tag);
Collection<TagCategory> getTags();
Tag getTagByName(String name);
TagCategory getTagCategory(long id);
Model findModel(long id);
Collection<Model> findModelsByName(String name);
......
......@@ -4,14 +4,16 @@ import java.util.Collection;
import org.springframework.web.multipart.MultipartFile;
import mozen.messages.ModelMessage;
import mozen.messages.TagMessage;
import mozen.model.CustomLayer;
import mozen.model.Model;
import mozen.model.TagCategory;
import mozen.model.User;
public interface IModelManager {
Long addModel(Model m, User user) throws Exception;
void updateModel(Model m, long id, User user) throws Exception;
Long addModel(ModelMessage message, User user) throws Exception;
void updateModel(Model model, long id, User user) throws Exception;
void removeModel(long id, User user) throws Exception;
Long addLayer(long modelId, CustomLayer layer, User user) throws Exception;
......@@ -21,6 +23,8 @@ public interface IModelManager {
void addFile(MultipartFile file, long id, User user) throws Exception;
void addLayerFile(MultipartFile file, long id, User user) throws Exception;
void addTag(TagMessage message);
Model getModel(long id);
Collection<TagCategory> getTags();
Collection<Model> findModel(String name);
......
package mozen.business;
import mozen.model.SignupMessage;
import mozen.messages.SignupMessage;
import mozen.model.User;
public interface IUserManager {
......
......@@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository;
import mozen.model.CustomLayer;
import mozen.model.Model;
import mozen.model.Tag;
import mozen.model.TagCategory;
@Repository
......@@ -44,9 +45,9 @@ public class ModelDao implements IModelDao {
@Override
public Collection<Model> findModelsByName(String name) {
String query = "SELECT m FROM Model m WHERE m.name LIKE :name ORDER BY votes ASC";
String query = "SELECT m FROM Model m WHERE lower(m.name) LIKE :name ORDER BY votes ASC";
TypedQuery<Model> q = em.createQuery(query, Model.class);
q.setParameter("name", "%" + name + "%");
q.setParameter("name", "%" + name.toLowerCase() + "%");
try {
return q.getResultList();
} catch (Exception e) {
......@@ -85,4 +86,26 @@ public class ModelDao implements IModelDao {
return em.find(CustomLayer.class, id);
}
@Override
public Tag getTagByName(String name) {
String query = "SELECT t FROM Tag t WHERE lower(t.name) LIKE :name";
TypedQuery<Tag> q = em.createQuery(query, Tag.class);
q.setParameter("name", "%" + name.toLowerCase() + "%");
try {
return q.getSingleResult();
} catch (Exception e) {
return null;
}
}
@Override
public void addTag(Tag tag) {
em.persist(tag);
}
@Override
public TagCategory getTagCategory(long id) {
return em.find(TagCategory.class, id);
}
}
\ No newline at end of file
package mozen.business;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import mozen.messages.ModelMessage;
import mozen.messages.TagMessage;
import mozen.model.CustomLayer;
import mozen.model.Model;
import mozen.model.Tag;
import mozen.model.TagCategory;
import mozen.model.User;
......@@ -18,16 +24,69 @@ public class ModelManager implements IModelManager {
IModelDao dao;
@Override
public Long addModel(Model model, User user) throws Exception {
public Long addModel(ModelMessage message, User user) throws Exception {
Model model = new Model();
System.err.println("[MODEL MANAGER] add model n:"+message.getName()+" sd:"+message.getShortDescription()+" ld:"+message.getLongDescription()+" t:"+message.getTags()+" l:"+message.getCustomLayers());
model.setName(message.getName());
model.setShortDescription(message.getShortDescription());
model.setLongDescription(message.getLongDescription());
System.err.println("[MODEL MANAGER] oui 2");
if (message.getTags() != null) {
System.err.println("[MODEL MANAGER] oui 2.1");
Set<Tag> tags = new HashSet<Tag>();
for (String tagName : message.getTags()) {
Tag tag = dao.getTagByName(tagName);
tags.add(tag);
}
System.err.println("[MODEL MANAGER] oui 2.2");
model.setTags(tags);
}
System.err.println("[MODEL MANAGER] oui 3");
if (message.getCustomLayers() != null) {
System.err.println("[MODEL MANAGER] oui 3.1");
Set<CustomLayer> layers = new HashSet<CustomLayer>();
for (String layerName : message.getCustomLayers()) {
System.err.println("[MODEL MANAGER] new layer 1"+layerName);
CustomLayer layer = new CustomLayer();
layer.setName(layerName);
System.err.println("[MODEL MANAGER] new layer 2"+layerName);
layers.add(layer);
}
System.err.println("[MODEL MANAGER] oui 3.2");
model.setCustomLayers(layers);
}
System.err.println("[MODEL MANAGER] oui 4");
model.setVotes(0);
model.setAdded(new Date());
model.setLastModified(new Date());
model.setAuthor(user);
System.err.println("[MODEL MANAGER] oui 5");
try {
dao.addModel(model);
} catch (Exception e) {
System.err.println("[MODEL MANAGER] Add model error "+e.getMessage());
}
System.err.println("[MODEL MANAGER] oui 6");
return model.getId();
}
@Override
public void addFile(MultipartFile file, long id, User user) throws Exception {
Model model = dao.findModel(id);
if (model == null) throw new Exception("Unknown model");
if (model == null)
throw new Exception("Unknown model");
model.setFile(file.getBytes());
model.setFileType(file.getContentType());
dao.updateModel(model);
......@@ -36,8 +95,10 @@ public class ModelManager implements IModelManager {
@Override
public void updateModel(Model model, long id, User user) throws Exception {
Model modelToUpdate = dao.findModel(id);
if (modelToUpdate == null) throw new Exception("Unknown model");
if(!isModelAuthor(modelToUpdate, user)) throw new Exception("Not the author");
if (modelToUpdate == null)
throw new Exception("Unknown model");
if (!isModelAuthor(modelToUpdate, user))
throw new Exception("Not the author");
model.setId(id);
dao.updateModel(model);
......@@ -46,8 +107,10 @@ public class ModelManager implements IModelManager {
@Override
public void removeModel(long id, User user) throws Exception {
Model model = dao.findModel(id);
if (model == null) throw new Exception("Unknown model");
if(!isModelAuthor(model, user)) throw new Exception("Not the author");
if (model == null)
throw new Exception("Unknown model");
if (!isModelAuthor(model, user))
throw new Exception("Not the author");
dao.removeModel(id);
}
......@@ -72,8 +135,10 @@ public class ModelManager implements IModelManager {
@Override
public Long addLayer(long modelId, CustomLayer layer, User user) throws Exception {
Model model = dao.findModel(modelId);
if (model == null) throw new Exception("Unknown model");
if(!isModelAuthor(model, user)) throw new Exception("Not the author");
if (model == null)
throw new Exception("Unknown model");
if (!isModelAuthor(model, user))
throw new Exception("Not the author");
layer.setModel(model);
dao.addLayer(layer);
......@@ -84,8 +149,10 @@ public class ModelManager implements IModelManager {
@Override
public void updateLayer(long id, CustomLayer layer, User user) throws Exception {
CustomLayer layerToUpdate = dao.findLayer(id);
if (layerToUpdate == null) throw new Exception("Unknown layer");
if(!isLayerAuthor(layerToUpdate, user)) throw new Exception("Not the author");
if (layerToUpdate == null)
throw new Exception("Unknown layer");
if (!isLayerAuthor(layerToUpdate, user))
throw new Exception("Not the author");
layer.setId(id);
dao.updateLayer(layer);
......@@ -94,8 +161,10 @@ public class ModelManager implements IModelManager {
@Override
public void removeLayer(long id, User user) throws Exception {
CustomLayer layer = dao.findLayer(id);
if (layer == null) throw new Exception("Unknown layer");
if(!isLayerAuthor(layer, user)) throw new Exception("Not the author");
if (layer == null)
throw new Exception("Unknown layer");
if (!isLayerAuthor(layer, user))
throw new Exception("Not the author");
dao.removeLayer(id);
}
......@@ -103,8 +172,10 @@ public class ModelManager implements IModelManager {
@Override
public void addLayerFile(MultipartFile file, long id, User user) throws Exception {
CustomLayer layer = dao.findLayer(id);
if (layer == null) throw new Exception("Unknown layer");
if(!isLayerAuthor(layer, user)) throw new Exception("Not the author");
if (layer == null)
throw new Exception("Unknown layer");
if (!isLayerAuthor(layer, user))
throw new Exception("Not the author");
layer.setFile(file.getBytes());
dao.updateLayer(layer);
......@@ -118,4 +189,15 @@ public class ModelManager implements IModelManager {
return model.getAuthor() == user;
}
@Override
public void addTag(TagMessage message) {
System.err.println("[MODEL MANAGER] add tag n:"+message.getName()+" c:"+message.getCategoryId());
TagCategory category = dao.getTagCategory(message.getCategoryId());
Tag tag = new Tag();
tag.setName(message.getName());
tag.setCategory(category);
dao.addTag(tag);
}
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import mozen.model.Role;
import mozen.model.SignupMessage;
import mozen.messages.SignupMessage;
import mozen.model.User;
@Service
......
package mozen.model;
package mozen.messages;
import java.io.Serializable;
......
package mozen.messages;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class ModelMessage implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@Size(min = 3, max = 30)
private String name;
@Size(min = 0, max = 200)
private String shortDescription;
@Size(min = 0, max = 5000)
private String longDescription;
private String [] tags;
private String [] customLayers;
public ModelMessage() {
}
public ModelMessage(String name, String shortDescription, String longDescription, String[] tags, String[] customLayers) {
this.name = name;
this.shortDescription = shortDescription;
this.longDescription = longDescription;
this.tags = tags;
this.customLayers = customLayers;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getShortDescription() {
return this.shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getLongDescription() {
return this.longDescription;
}
public void setLongDescription(String longDescription) {
this.longDescription = longDescription;
}
public String[] getTags() {
return this.tags;
}
public void setTags(String[] tags) {
this.tags = tags;
}
public String[] getCustomLayers() {
return this.customLayers;
}
public void setCustomLayers(String[] customLayers) {
this.customLayers = customLayers;
}
}
\ No newline at end of file
package mozen.model;
package mozen.messages;
import java.io.Serializable;
......
package mozen.model;
package mozen.messages;
import java.io.Serializable;
......
package mozen.messages;
import java.io.Serializable;
public class TagMessage implements Serializable {
private static final long serialVersionUID = 1L;
private long categoryId;
private String name;
public TagMessage() {
}
public TagMessage(long categoryId, String name) {
this.categoryId = categoryId;
this.name = name;
}
public long getCategoryId() {
return this.categoryId;
}
public void setCategoryId(long categoryId) {
this.categoryId = categoryId;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
\ No newline at end of file
package mozen.model;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
......@@ -17,13 +18,13 @@ import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.format.annotation.DateTimeFormat;
@Entity
@Table
public class Model implements Serializable{
......@@ -50,14 +51,14 @@ public class Model implements Serializable{
private String longDescription;
@Basic
@DateTimeFormat(pattern = "yyyy-mm-dd")
@Temporal(TemporalType.DATE)
@Column
private String added;
private Date added;
@Basic
@DateTimeFormat(pattern = "yyyy-mm-dd")
@Temporal(TemporalType.DATE)
@Column
private String lastModified;
private Date lastModified;
@Basic
@Column
......@@ -88,7 +89,7 @@ public class Model implements Serializable{
public Model() {
}
public Model(Long id, String name, String shortDescription, String longDescription, String added, String lastModified, int votes, byte[] file, String fileType, User author, Set<Tag> tags, Set<CustomLayer> customLayers) {
public Model(Long id, String name, String shortDescription, String longDescription, Date added, Date lastModified, int votes, byte[] file, String fileType, User author, Set<Tag> tags, Set<CustomLayer> customLayers) {
this.id = id;
this.name = name;
this.shortDescription = shortDescription;
......@@ -135,19 +136,19 @@ public class Model implements Serializable{
this.longDescription = longDescription;
}
public String getAdded() {
public Date getAdded() {
return this.added;
}
public void setAdded(String added) {
public void setAdded(Date added) {
this.added = added;
}
public String getLastModified() {
public Date getLastModified() {
return this.lastModified;
}
public void setLastModified(String lastModified) {
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
......
......@@ -31,7 +31,7 @@ public class Tag implements Serializable{
private TagCategory category;
@Basic
@Column(nullable = false)
@Column(nullable = false, unique = true)
private String name;
@Basic
......
......@@ -24,7 +24,7 @@ public class TagCategory implements Serializable{
private Long id;
@Basic
@Column(nullable = false)
@Column(nullable = false, unique = true)
private String name;
@Basic
......
package mozen.utils;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -26,6 +28,9 @@ public class DatabaseFiller {
@Autowired
IUserDao daoUser;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@EventListener(ContextRefreshedEvent.class)
public void onApplicationEvent(ContextRefreshedEvent event) {
event.getApplicationContext().getBean(DatabaseFiller.class).fillDB();
......@@ -36,13 +41,13 @@ public class DatabaseFiller {
System.err.println("FILLING DB");
User u1 = new User();
u1.setEmail("user1@email.com");
u1.setPassword("1234");
u1.setPassword(bCryptPasswordEncoder.encode("1234"));
u1.setUsername("user 1");
u1.setRole(Role.Default);
User u2 = new User();
u2.setEmail("user2@email.com");
u2.setPassword("1234");
u2.setPassword(bCryptPasswordEncoder.encode("1234"));
u2.setUsername("user 2");
u2.setRole(Role.Admin);
......@@ -52,8 +57,8 @@ public class DatabaseFiller {
m1.setShortDescription("short description 1");
m1.setLongDescription("# README \n model 1");
m1.setVotes(0);
m1.setAdded("1990-05-30");
m1.setLastModified("2010-10-24");
m1.setAdded(new Date());
m1.setLastModified(new Date());
Set<Tag> m1tags = new HashSet<Tag>();
Tag t1 = new Tag();
......
......@@ -2,6 +2,8 @@ package mozen.web;
import java.util.Collection;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpHeaders;
......@@ -20,16 +22,17 @@ import org.springframework.web.multipart.MultipartFile;
import mozen.business.IModelManager;
import mozen.business.IUserManager;
import mozen.model.Model;
import mozen.model.ResponseMessage;
import mozen.messages.ModelMessage;
import mozen.messages.ResponseMessage;
import mozen.messages.TagMessage;
import mozen.model.TagCategory;
import mozen.model.User;
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.RequestParam;
@RestController
@RequestMapping("/models")
@CrossOrigin
......@@ -52,7 +55,7 @@ public class ModelController {
}
@PostMapping("")
public ResponseEntity<ResponseMessage> addModel(Model model) {
public ResponseEntity<ResponseMessage> addModel(@RequestBody @Valid ModelMessage message) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
if(user == null) {
......@@ -62,7 +65,8 @@ public class ModelController {
}
try {
modelManager.addModel(model, user);
long modelId = modelManager.addModel(message, user);
response.setMessage(Long.toString(modelId));
} catch (Exception e) {
response.setError(true);
response.setMessage(e.getMessage());
......@@ -72,7 +76,7 @@ public class ModelController {
}
@PutMapping("")
public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, Model model) {
public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, @RequestBody @Valid Model model) {
ResponseMessage response = new ResponseMessage(false, "");
User user = getUser();
if(user == null) {
......@@ -116,6 +120,12 @@ public class ModelController {
return modelManager.getTags();
}
@PostMapping("/tags")
public ResponseEntity<ResponseMessage> addTag(@RequestBody @Valid TagMessage message) {
modelManager.addTag(message);
return ResponseEntity.ok().build();
}
@PostMapping("/upload")
public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam(value = "id", required = true) Long id, @RequestParam("file") MultipartFile file) {
ResponseMessage response = new ResponseMessage(false, "");
......
......@@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import mozen.business.IUserManager;
import mozen.model.ResponseMessage;
import mozen.model.SignupMessage;
import mozen.messages.ResponseMessage;
import mozen.messages.SignupMessage;
import mozen.model.User;
import mozen.utils.JwtUtils;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment