Compare commits
No commits in common. "master" and "0000-Tooltests" have entirely different histories.
master
...
0000-Toolt
@ -17,11 +17,6 @@ dependencies {
|
|||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
runtimeOnly 'mysql:mysql-connector-java'
|
runtimeOnly 'mysql:mysql-connector-java'
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||||
|
|
||||||
// JSON web token
|
|
||||||
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
|
|
||||||
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2',
|
|
||||||
'io.jsonwebtoken:jjwt-jackson:0.11.2'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.data;
|
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.sql.Time;
|
import java.sql.Time;
|
117
server/src/main/java/com/vpr/server/Event.java
Normal file
117
server/src/main/java/com/vpr/server/Event.java
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package com.vpr.server;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.sql.Time;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// @Entity creates a table out of this class with Hibernate
|
||||||
|
@Entity(name = "Event")
|
||||||
|
public class Event {
|
||||||
|
// Generate the primary key
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
@Column(name="name", nullable=false)
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Column(name="priority", nullable=false)
|
||||||
|
private Integer priority;
|
||||||
|
|
||||||
|
@Column(name="is_full_day", nullable=false)
|
||||||
|
private boolean isFullDay;
|
||||||
|
|
||||||
|
@Column(name="is_private", nullable=false)
|
||||||
|
private boolean isPrivate;
|
||||||
|
|
||||||
|
@Column(name="start")
|
||||||
|
private Time start;
|
||||||
|
|
||||||
|
@Column(name="end")
|
||||||
|
private Time end;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "event")
|
||||||
|
private List<UserEvent> userEvent;
|
||||||
|
|
||||||
|
/*********************
|
||||||
|
* Getter and Setter *
|
||||||
|
*********************/
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPriority() {
|
||||||
|
return priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPriority(Integer priority) {
|
||||||
|
this.priority = priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFullDay() {
|
||||||
|
return isFullDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFullDay(boolean fullDay) {
|
||||||
|
isFullDay = fullDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPrivate() {
|
||||||
|
return isPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrivate(boolean aPrivate) {
|
||||||
|
isPrivate = aPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time getStart() {
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStart(Time start) {
|
||||||
|
this.start = start;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time getEnd() {
|
||||||
|
return end;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnd(Time end) {
|
||||||
|
this.end = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<UserEvent> getUserEvent() {
|
||||||
|
return userEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserEvent(List<UserEvent> userEvent) {
|
||||||
|
this.userEvent = userEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// toString
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Event{" +
|
||||||
|
"id=" + id +
|
||||||
|
", name='" + name + '\'' +
|
||||||
|
", priority=" + priority +
|
||||||
|
", isFullDay=" + isFullDay +
|
||||||
|
", start=" + start +
|
||||||
|
", end=" + end +
|
||||||
|
", userEvent=" + userEvent +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
32
server/src/main/java/com/vpr/server/EventRepository.java
Normal file
32
server/src/main/java/com/vpr/server/EventRepository.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package com.vpr.server;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
// This will be AUTO IMPLEMENTED by Spring into a Bean called eventRepository
|
||||||
|
// CRUD refers Create, Read, Update, Delete
|
||||||
|
|
||||||
|
public interface EventRepository extends CrudRepository<Event, Integer> {
|
||||||
|
@Query(value = "SELECT e.id AS eid, e.name AS ename, e.start, e.end, e.priority , e.is_full_day, " +
|
||||||
|
"ue.date, " +
|
||||||
|
"u.id AS uid, u.forename, u.name AS uname " +
|
||||||
|
"FROM event e " +
|
||||||
|
"INNER JOIN user_event ue " +
|
||||||
|
"ON e.id = ue.event_id " +
|
||||||
|
"INNER JOIN user u " +
|
||||||
|
"ON ue.user_id = u.id " +
|
||||||
|
"WHERE u.id = ?1 " +
|
||||||
|
"OR e.is_private = 0",
|
||||||
|
nativeQuery = true)
|
||||||
|
Object[] findAllVisibleByUserId(long id);
|
||||||
|
|
||||||
|
@Query(value = "SELECT * " +
|
||||||
|
"FROM event e " +
|
||||||
|
"INNER JOIN user_event ue " +
|
||||||
|
"ON e.id = ue.event_id " +
|
||||||
|
"WHERE ue.user_id = ?1",
|
||||||
|
nativeQuery = true)
|
||||||
|
Object[] findAllByUserId(long id);
|
||||||
|
}
|
134
server/src/main/java/com/vpr/server/MainController.java
Normal file
134
server/src/main/java/com/vpr/server/MainController.java
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
package com.vpr.server;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
|
import java.sql.Time;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Controller // This means that this class is a Controller
|
||||||
|
@RequestMapping(path="/vpr") // This means URL's start with /demo (after Application path)
|
||||||
|
public class MainController {
|
||||||
|
|
||||||
|
// This means to get the bean called userRepository
|
||||||
|
// Which is auto-generated by Spring, we will use it to handle the data
|
||||||
|
@Autowired
|
||||||
|
private com.vpr.server.UserRepository userRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventRepository eventRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserEventRepository userEventRepository;
|
||||||
|
|
||||||
|
// POST-request at /add with request parameter
|
||||||
|
// @ResponseBody means the returned String is the response, not a view name
|
||||||
|
@PostMapping(path="/add-user")
|
||||||
|
public @ResponseBody String addNewUser (
|
||||||
|
@RequestParam String name,
|
||||||
|
@RequestParam String forename,
|
||||||
|
@RequestParam String password,
|
||||||
|
@RequestParam String isAdmin
|
||||||
|
) {
|
||||||
|
|
||||||
|
com.vpr.server.User user = new com.vpr.server.User();
|
||||||
|
|
||||||
|
// TODO set correct token and password
|
||||||
|
user.setName(name);
|
||||||
|
user.setForename(forename);
|
||||||
|
user.setPassword(password);
|
||||||
|
user.setToken("test");
|
||||||
|
user.setAdmin(isAdmin.equals("1"));
|
||||||
|
|
||||||
|
userRepository.save(user);
|
||||||
|
return "Saved";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(path="/add-event")
|
||||||
|
public @ResponseBody String addEvent (
|
||||||
|
@RequestParam Integer userId,
|
||||||
|
@RequestParam String date,
|
||||||
|
@RequestParam String name,
|
||||||
|
@RequestParam String start,
|
||||||
|
@RequestParam String end,
|
||||||
|
@RequestParam Integer prority,
|
||||||
|
@RequestParam Boolean isFullDay,
|
||||||
|
@RequestParam Boolean isPrivate
|
||||||
|
) {
|
||||||
|
|
||||||
|
com.vpr.server.Event event = new com.vpr.server.Event();
|
||||||
|
|
||||||
|
event.setName(name);
|
||||||
|
|
||||||
|
try {
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm");
|
||||||
|
long ms = simpleDateFormat.parse(start).getTime();
|
||||||
|
event.setStart(new Time(ms));
|
||||||
|
}catch (Exception e){
|
||||||
|
event.setStart(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm");
|
||||||
|
long ms = simpleDateFormat.parse(end).getTime();
|
||||||
|
event.setEnd(new Time(ms));
|
||||||
|
}catch (Exception e){
|
||||||
|
event.setEnd(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setPriority(prority);
|
||||||
|
event.setFullDay(isFullDay);
|
||||||
|
event.setPrivate(isPrivate);
|
||||||
|
|
||||||
|
|
||||||
|
eventRepository.save(event);
|
||||||
|
|
||||||
|
|
||||||
|
com.vpr.server.UserEvent userEvent = new com.vpr.server.UserEvent();
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println("date " + date);
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
userEvent.setDate(new java.sql.Date(simpleDateFormat.parse(date).getTime()));
|
||||||
|
}catch (Exception e){
|
||||||
|
System.out.println("DATE FORMAT NOT CORRECT");
|
||||||
|
}
|
||||||
|
|
||||||
|
userEvent.setEvent(event);
|
||||||
|
|
||||||
|
long uId = Long.valueOf(userId);
|
||||||
|
User user = userRepository.findById(uId);
|
||||||
|
userEvent.setUser(user);
|
||||||
|
|
||||||
|
System.out.println(userEvent);
|
||||||
|
System.out.println(user);
|
||||||
|
|
||||||
|
userEventRepository.save(userEvent);
|
||||||
|
return "Saved";
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET-request at /all-users
|
||||||
|
// returns JSON-data
|
||||||
|
@GetMapping(path="/all-users")
|
||||||
|
public @ResponseBody Object[] getAllUsers() {
|
||||||
|
return userRepository.findAllUsernames();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST-request at /all-events
|
||||||
|
// returns JSON-data
|
||||||
|
@PostMapping(path="/all-events")
|
||||||
|
public @ResponseBody Object[] getAllEvents(@RequestParam long userId) {
|
||||||
|
return eventRepository.findAllVisibleByUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(path="/all-events-test")
|
||||||
|
public @ResponseBody Iterable<com.vpr.server.Event> getAllEventsTest() {
|
||||||
|
return eventRepository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server;
|
package com.vpr.server;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
|
@ -1,29 +1,10 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.data;
|
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// @Entity creates a table out of this class with Hibernate
|
// @Entity creates a table out of this class with Hibernate
|
||||||
@Entity(name = "User")
|
@Entity
|
||||||
@Table(name = "user")
|
|
||||||
|
|
||||||
@SqlResultSetMapping(name="deleteResult", columns = {
|
|
||||||
@ColumnResult(name = "count")
|
|
||||||
})
|
|
||||||
|
|
||||||
@NamedNativeQueries({
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "getAllUser",
|
|
||||||
query = "SELECT * FROM user",
|
|
||||||
resultClass = User.class
|
|
||||||
),
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "deleteAllUserEvents",
|
|
||||||
query = "DELETE FROM user_event WHERE user_id = :userId",
|
|
||||||
resultSetMapping = "deleteResult"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
public class User {
|
public class User {
|
||||||
// Generate the primary key
|
// Generate the primary key
|
||||||
@Id
|
@Id
|
||||||
@ -36,14 +17,8 @@ public class User {
|
|||||||
@Column(name="forename", nullable=false)
|
@Column(name="forename", nullable=false)
|
||||||
private String forename;
|
private String forename;
|
||||||
|
|
||||||
@Column(name="login", nullable=false)
|
|
||||||
private String login;
|
|
||||||
|
|
||||||
@Column(name="password", nullable=false)
|
@Column(name="password", nullable=false)
|
||||||
private byte[] password;
|
private String password;
|
||||||
|
|
||||||
@Column(name="salt", nullable=false)
|
|
||||||
private byte[] salt;
|
|
||||||
|
|
||||||
@Column(name="token")
|
@Column(name="token")
|
||||||
private String token;
|
private String token;
|
||||||
@ -82,30 +57,14 @@ public class User {
|
|||||||
this.forename = forename;
|
this.forename = forename;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLogin() {
|
public String getPassword() {
|
||||||
return login;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLogin(String login) {
|
|
||||||
this.login = login;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getPassword() {
|
|
||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPassword(byte[] password) {
|
public void setPassword(String password) {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getSalt() {
|
|
||||||
return salt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSalt(byte[] salt) {
|
|
||||||
this.salt = salt;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getToken() {
|
public String getToken() {
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
@ -129,19 +88,4 @@ public class User {
|
|||||||
public void setEventList(List<UserEvent> userEvent) {
|
public void setEventList(List<UserEvent> userEvent) {
|
||||||
this.userEvent = userEvent;
|
this.userEvent = userEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj){
|
|
||||||
if(!(obj instanceof User)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
User user = (User) obj;
|
|
||||||
return user.getId() == getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode(){
|
|
||||||
return (int)getId();
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.data;
|
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
// @Entity creates a table out of this class with Hibernate
|
// @Entity creates a table out of this class with Hibernate
|
||||||
// @Table defines the table-name
|
// @Table defines the table-name
|
||||||
@ -61,41 +61,4 @@ public class UserEvent {
|
|||||||
", date=" + date +
|
", date=" + date +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj){
|
|
||||||
System.out.println("equals");
|
|
||||||
if(!(obj instanceof UserEvent)){
|
|
||||||
System.out.println("not an userevent");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UserEvent userEvent = (UserEvent) obj;
|
|
||||||
|
|
||||||
System.out.println("date " + userEvent.getDate().equals(getDate()));
|
|
||||||
System.out.println("user " + userEvent.getUser().equals(getUser()));
|
|
||||||
System.out.println("event " + userEvent.getEvent().equals(getEvent()));
|
|
||||||
|
|
||||||
return userEvent.getDate().equals(getDate()) &&
|
|
||||||
userEvent.getUser().equals(getUser()) &&
|
|
||||||
userEvent.getEvent().equals(getEvent());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode(){
|
|
||||||
long hash = getUser().hashCode() +
|
|
||||||
getEvent().hashCode() +
|
|
||||||
getDate().hashCode();
|
|
||||||
|
|
||||||
return (int)hash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.data;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
@ -1,7 +1,6 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.repository;
|
|
||||||
|
|
||||||
import com.vpr.server.data.UserEvent;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
@ -11,5 +10,5 @@ import java.util.List;
|
|||||||
// CRUD refers Create, Read, Update, Delete
|
// CRUD refers Create, Read, Update, Delete
|
||||||
|
|
||||||
public interface UserEventRepository extends CrudRepository<UserEvent, Integer> {
|
public interface UserEventRepository extends CrudRepository<UserEvent, Integer> {
|
||||||
List<UserEvent> findByUserIdAndDate(long userId, Date date);
|
|
||||||
}
|
}
|
@ -1,12 +1,13 @@
|
|||||||
//Marc Beyer//
|
package com.vpr.server;
|
||||||
package com.vpr.server.repository;
|
|
||||||
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
|
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
|
||||||
// CRUD refers Create, Read, Update, Delete
|
// CRUD refers Create, Read, Update, Delete
|
||||||
|
|
||||||
public interface UserRepository extends CrudRepository<User, Integer> {
|
public interface UserRepository extends CrudRepository<User, Integer> {
|
||||||
|
|
||||||
@Query(value = "SELECT u.id, u.name, u.forename " +
|
@Query(value = "SELECT u.id, u.name, u.forename " +
|
||||||
@ -14,13 +15,5 @@ public interface UserRepository extends CrudRepository<User, Integer> {
|
|||||||
nativeQuery = true)
|
nativeQuery = true)
|
||||||
Object[] findAllUsernames();
|
Object[] findAllUsernames();
|
||||||
|
|
||||||
User findById(long id);
|
com.vpr.server.User findById(long id);
|
||||||
|
|
||||||
User findByLogin(String login);
|
|
||||||
|
|
||||||
User findByLoginAndPassword(String login, byte[] password);
|
|
||||||
|
|
||||||
void deleteById(long id);
|
|
||||||
|
|
||||||
User findByToken(String token);
|
|
||||||
}
|
}
|
@ -1,16 +0,0 @@
|
|||||||
//Marco Kühn//
|
|
||||||
package com.vpr.server.controller;
|
|
||||||
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import com.vpr.server.repository.UserRepository;
|
|
||||||
|
|
||||||
public class AuthController {
|
|
||||||
|
|
||||||
public User getAuthUserFromHeader(String authorizationHeader, UserRepository userRepository){
|
|
||||||
String[] splitAuthHeader = authorizationHeader.split("\\s");
|
|
||||||
if(splitAuthHeader.length == 2){
|
|
||||||
return userRepository.findByToken(splitAuthHeader[1]);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,253 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.controller;
|
|
||||||
|
|
||||||
import com.vpr.server.dao.interfaces.EventDAO;
|
|
||||||
import com.vpr.server.data.Event;
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import com.vpr.server.data.UserEvent;
|
|
||||||
import com.vpr.server.json.JSONMapper;
|
|
||||||
import com.vpr.server.json.Validator;
|
|
||||||
import com.vpr.server.repository.EventRepository;
|
|
||||||
import com.vpr.server.repository.UserEventRepository;
|
|
||||||
import com.vpr.server.repository.UserRepository;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
@RequestMapping(path = "/event")
|
|
||||||
public class EventController {
|
|
||||||
@Autowired
|
|
||||||
private UserRepository userRepository;
|
|
||||||
@Autowired
|
|
||||||
private EventRepository eventRepository;
|
|
||||||
@Autowired
|
|
||||||
private UserEventRepository userEventRepository;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private EventDAO eventDAO;
|
|
||||||
|
|
||||||
/******************
|
|
||||||
* POST-ENDPOINTS *
|
|
||||||
******************/
|
|
||||||
|
|
||||||
@PostMapping(path = "/add")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> addEvent(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam long userId,
|
|
||||||
@RequestParam String date,
|
|
||||||
@RequestParam String name,
|
|
||||||
@RequestParam String start,
|
|
||||||
@RequestParam String end,
|
|
||||||
@RequestParam Integer priority,
|
|
||||||
@RequestParam Boolean isFullDay,
|
|
||||||
@RequestParam Boolean isPrivate
|
|
||||||
) {
|
|
||||||
User authUser = userRepository.findByToken(authorizationHeader.split("\\s")[1]);
|
|
||||||
if (authUser == null || (!authUser.isAdmin() && authUser.getId() != userId)) {
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um den Termin zu erstellen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
ResponseEntity<String> BAD_REQUEST = createEventAndUserEvent(userId, date, name, start, end, priority, isFullDay, isPrivate);
|
|
||||||
if (BAD_REQUEST != null) return BAD_REQUEST;
|
|
||||||
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/del")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> delEvent(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam long eventId,
|
|
||||||
@RequestParam long userId,
|
|
||||||
@RequestParam String date
|
|
||||||
) {
|
|
||||||
User authUser = userRepository.findByToken(authorizationHeader.split("\\s")[1]);
|
|
||||||
if (authUser == null || (!authUser.isAdmin() && authUser.getId() != userId)) {
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um den Termin zu löschen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
eventRepository.deleteUserEventsById(userId, eventId, date);
|
|
||||||
if (eventDAO.getAllEventsWithId(eventId).size() == 0) {
|
|
||||||
eventRepository.deleteById(eventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping(path = "/all")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> getAllEvents(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam String startDate,
|
|
||||||
@RequestParam String endDate
|
|
||||||
) {
|
|
||||||
User authUser = userRepository.findByToken(authorizationHeader.split("\\s")[1]);
|
|
||||||
if (authUser == null) {
|
|
||||||
return new ResponseEntity<>("Bitte erneut einloggen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Event> eventList = eventDAO.getAllEventsInTimespan(authUser.getId(), startDate, endDate);
|
|
||||||
|
|
||||||
return new ResponseEntity<>(JSONMapper.eventListToJSON(eventList), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping(path = "/edit")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> editEvent(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam Long eventId,
|
|
||||||
@RequestParam Long userId,
|
|
||||||
@RequestParam String date,
|
|
||||||
@RequestParam String newDate,
|
|
||||||
@RequestParam String newName,
|
|
||||||
@RequestParam String newStart,
|
|
||||||
@RequestParam String newEnd,
|
|
||||||
@RequestParam Integer newPriority,
|
|
||||||
@RequestParam Boolean newIsFullDay,
|
|
||||||
@RequestParam Boolean newIsPrivate
|
|
||||||
) {
|
|
||||||
User authUser = userRepository.findByToken(authorizationHeader.split("\\s")[1]);
|
|
||||||
if (authUser == null || (!authUser.isAdmin() && authUser.getId() != userId)) {
|
|
||||||
return new ResponseEntity<>(
|
|
||||||
"Du hast keine Rechte um den Termin zu bearbeiten",
|
|
||||||
HttpStatus.UNAUTHORIZED
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Event> eventList = eventDAO.getAllEventsWithIdAndDate(userId, eventId, date);
|
|
||||||
|
|
||||||
if (eventList == null || eventList.size() == 0) {
|
|
||||||
return new ResponseEntity<>("Der Termin exestiert nicht in der Datenbank", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
if (eventList.size() > 1) {
|
|
||||||
return new ResponseEntity<>(
|
|
||||||
"Der Termin ist doppelt vorhanden. " +
|
|
||||||
"(Um das zu lösen versuche den Termin zu löschen und erneut zu erstellen)",
|
|
||||||
HttpStatus.BAD_REQUEST
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
ResponseEntity<String> error = createEventAndUserEvent(
|
|
||||||
userId,
|
|
||||||
newDate,
|
|
||||||
newName,
|
|
||||||
newStart,
|
|
||||||
newEnd,
|
|
||||||
newPriority,
|
|
||||||
newIsFullDay,
|
|
||||||
newIsPrivate,
|
|
||||||
eventId
|
|
||||||
);
|
|
||||||
|
|
||||||
if (error != null) return error;
|
|
||||||
|
|
||||||
eventRepository.deleteUserEventsById(userId, eventId, date);
|
|
||||||
if (eventDAO.getAllEventsWithId(eventId).size() == 0) {
|
|
||||||
eventRepository.deleteById(eventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ResponseEntity<String> createEventAndUserEvent(
|
|
||||||
long userId,
|
|
||||||
String date,
|
|
||||||
String name,
|
|
||||||
String start,
|
|
||||||
String end,
|
|
||||||
Integer priority,
|
|
||||||
Boolean isFullDay,
|
|
||||||
Boolean isPrivate
|
|
||||||
) {
|
|
||||||
return createEventAndUserEvent(
|
|
||||||
userId,
|
|
||||||
date,
|
|
||||||
name,
|
|
||||||
start,
|
|
||||||
end,
|
|
||||||
priority,
|
|
||||||
isFullDay,
|
|
||||||
isPrivate,
|
|
||||||
-1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ResponseEntity<String> createEventAndUserEvent(
|
|
||||||
long userId,
|
|
||||||
String date,
|
|
||||||
String name,
|
|
||||||
String start,
|
|
||||||
String end,
|
|
||||||
Integer priority,
|
|
||||||
Boolean isFullDay,
|
|
||||||
Boolean isPrivate,
|
|
||||||
long oldEventId
|
|
||||||
) {
|
|
||||||
User user = userRepository.findById(userId);
|
|
||||||
if (user == null) {
|
|
||||||
return new ResponseEntity<>("UserId nicht korrekt", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
Event event = new Event();
|
|
||||||
|
|
||||||
event.setName(Validator.ValidateEventName(name));
|
|
||||||
event.setStart(Validator.ValidateEventTime(start));
|
|
||||||
event.setEnd(Validator.ValidateEventTime(end));
|
|
||||||
event.setPriority(priority);
|
|
||||||
event.setFullDay(isFullDay);
|
|
||||||
event.setPrivate(isPrivate);
|
|
||||||
|
|
||||||
UserEvent userEvent = new UserEvent();
|
|
||||||
|
|
||||||
userEvent.setDate(Validator.ValidateEventDate(date));
|
|
||||||
userEvent.setEvent(event);
|
|
||||||
userEvent.setUser(user);
|
|
||||||
|
|
||||||
List<UserEvent> userEvents = userEventRepository.findByUserIdAndDate(user.getId(), userEvent.getDate());
|
|
||||||
|
|
||||||
boolean isFullDayButDayHasEvents = event.isFullDay() && userEvents.size() > 0;
|
|
||||||
boolean userEventIsSelf = userEvents.size() == 1 &&
|
|
||||||
isSelf(userEvent.getDate(), userId, oldEventId, userEvents.get(0));
|
|
||||||
|
|
||||||
if (isFullDayButDayHasEvents && !userEventIsSelf) {
|
|
||||||
return new ResponseEntity<>(
|
|
||||||
"Es gibt bereits Termine am " + userEvent.getDate(),
|
|
||||||
HttpStatus.BAD_REQUEST
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
for (UserEvent ue : userEvents) {
|
|
||||||
if (ue.getEvent().isFullDay() && !isSelf(userEvent.getDate(), userId, oldEventId, ue)) {
|
|
||||||
return new ResponseEntity<>(
|
|
||||||
"Der Tag " + userEvent.getDate() + " ist schon mit '"
|
|
||||||
+ ue.getEvent().getName() + "' belegt",
|
|
||||||
HttpStatus.BAD_REQUEST
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eventRepository.save(event);
|
|
||||||
userEventRepository.save(userEvent);
|
|
||||||
} catch (IllegalArgumentException exception) {
|
|
||||||
return new ResponseEntity<>(exception.getMessage(), HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isSelf(Date date, long userId, long eventId, UserEvent userEvent){
|
|
||||||
return date.equals(userEvent.getDate()) &&
|
|
||||||
userId == userEvent.getUser().getId() &&
|
|
||||||
eventId == userEvent.getEvent().getId();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.controller;
|
|
||||||
|
|
||||||
import com.vpr.server.repository.EventRepository;
|
|
||||||
import com.vpr.server.repository.UserEventRepository;
|
|
||||||
import com.vpr.server.repository.UserRepository;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestHeader;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
|
||||||
|
|
||||||
@Controller // This means that this class is a Controller
|
|
||||||
@RequestMapping(path = "/vpr") // This means URL's start with /demo (after Application path)
|
|
||||||
public class MainController {
|
|
||||||
|
|
||||||
@GetMapping(path = "/status-test")
|
|
||||||
public String statusTest(){
|
|
||||||
throw new ResponseStatusException(HttpStatus.I_AM_A_TEAPOT, "TestTestTest");
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/header-test")
|
|
||||||
public ResponseEntity<String> headerTest(@RequestHeader("Authorization") String authorizationHeader){
|
|
||||||
System.out.println("authorizationHeader: " + authorizationHeader);
|
|
||||||
return new ResponseEntity<>(authorizationHeader, HttpStatus.OK);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,232 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.controller;
|
|
||||||
|
|
||||||
import com.vpr.server.dao.interfaces.UserDAO;
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import com.vpr.server.json.JSONMapper;
|
|
||||||
import com.vpr.server.repository.UserRepository;
|
|
||||||
import com.vpr.server.security.Hasher;
|
|
||||||
import com.vpr.server.security.Token;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.spec.InvalidKeySpecException;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Controller
|
|
||||||
@RequestMapping(path = "/user")
|
|
||||||
public class UserController {
|
|
||||||
@Autowired
|
|
||||||
private UserRepository userRepository;
|
|
||||||
@Autowired
|
|
||||||
private UserDAO userDAO;
|
|
||||||
|
|
||||||
private final AuthController authController;
|
|
||||||
|
|
||||||
public UserController() {
|
|
||||||
this.authController = new AuthController();
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************
|
|
||||||
* POST-ENDPOINTS *
|
|
||||||
******************/
|
|
||||||
|
|
||||||
@PostMapping(path = "/add")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> addNewUser(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam String name,
|
|
||||||
@RequestParam String forename,
|
|
||||||
@RequestParam String login,
|
|
||||||
@RequestParam String password,
|
|
||||||
@RequestParam Boolean isAdmin
|
|
||||||
) {
|
|
||||||
User authUser = authController.getAuthUserFromHeader(authorizationHeader, userRepository);
|
|
||||||
if (authUser == null || !authUser.isAdmin()) {
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um einen User an zu legen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userRepository.findByLogin(login) != null) {
|
|
||||||
return new ResponseEntity<>("Login exestiert bereits", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] salt = Hasher.GenerateSalt();
|
|
||||||
byte[] hash;
|
|
||||||
try {
|
|
||||||
hash = Hasher.HashPassword(password, salt);
|
|
||||||
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ResponseEntity<>("Fehler beim hashen", HttpStatus.INTERNAL_SERVER_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
User user = new User();
|
|
||||||
|
|
||||||
user.setName(name);
|
|
||||||
user.setForename(forename);
|
|
||||||
user.setLogin(login);
|
|
||||||
user.setPassword(hash);
|
|
||||||
user.setSalt(salt);
|
|
||||||
user.setToken("");
|
|
||||||
user.setAdmin(isAdmin);
|
|
||||||
|
|
||||||
userRepository.save(user);
|
|
||||||
return new ResponseEntity<>("" + user.getId(), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/login")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> login(
|
|
||||||
@RequestParam String login,
|
|
||||||
@RequestParam String password
|
|
||||||
) {
|
|
||||||
if(userRepository.findAllUsernames().length == 0){
|
|
||||||
byte[] salt = Hasher.GenerateSalt();
|
|
||||||
byte[] hash;
|
|
||||||
try {
|
|
||||||
hash = Hasher.HashPassword(password, salt);
|
|
||||||
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ResponseEntity<>("Fehler beim hashen", HttpStatus.INTERNAL_SERVER_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
User user = new User();
|
|
||||||
user.setName("Admin");
|
|
||||||
user.setForename(login);
|
|
||||||
user.setLogin(login);
|
|
||||||
user.setPassword(hash);
|
|
||||||
user.setSalt(salt);
|
|
||||||
user.setToken("");
|
|
||||||
user.setAdmin(true);
|
|
||||||
|
|
||||||
userRepository.save(user);
|
|
||||||
}
|
|
||||||
System.out.println(login + " tries to login.");
|
|
||||||
User user = userRepository.findByLogin(login);
|
|
||||||
if (user == null) {
|
|
||||||
System.out.println("Login for " + login + " failed.");
|
|
||||||
return new ResponseEntity<>("Falscher login", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] salt = user.getSalt();
|
|
||||||
byte[] hash;
|
|
||||||
try {
|
|
||||||
hash = Hasher.HashPassword(password, salt);
|
|
||||||
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ResponseEntity<>("Fehler beim hashen", HttpStatus.INTERNAL_SERVER_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Arrays.equals(user.getPassword(), hash)) {
|
|
||||||
String token = Token.Generate(user.getLogin());
|
|
||||||
user.setToken(token);
|
|
||||||
userRepository.save(user);
|
|
||||||
|
|
||||||
System.out.println(user.getLogin() + " is now logged in.");
|
|
||||||
System.out.println(Token.Verify(Token.Generate(user.getLogin()), user.getLogin()));
|
|
||||||
|
|
||||||
return new ResponseEntity<>(token + " " + user.getId(), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
System.out.println(user.getLogin() + " failed to logged in.");
|
|
||||||
System.out.println("entered : " + javax.xml.bind.DatatypeConverter.printHexBinary(hash));
|
|
||||||
System.out.println("required: " + javax.xml.bind.DatatypeConverter.printHexBinary(user.getPassword()));
|
|
||||||
|
|
||||||
return new ResponseEntity<>("Falscher login", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/login-with-token")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> loginWithToken(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam long userId
|
|
||||||
) {
|
|
||||||
User authUser = authController.getAuthUserFromHeader(authorizationHeader, userRepository);
|
|
||||||
if (authUser == null || authUser.getId() != userId) {
|
|
||||||
return new ResponseEntity<>("Falscher auth-token", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/del")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> deleteUser(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam long userId
|
|
||||||
) {
|
|
||||||
User authUser = authController.getAuthUserFromHeader(authorizationHeader, userRepository);
|
|
||||||
if (authUser == null || !authUser.isAdmin()) {
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um den User zu löschen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
User user = userRepository.findById(userId);
|
|
||||||
if (user == null) {
|
|
||||||
return new ResponseEntity<>("User nicht in der Datenbank vorhanden", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
if(!userDAO.deleteAllUserEvents(user.getId())){
|
|
||||||
return new ResponseEntity<>("User konnte nicht gelöscht werden", HttpStatus.INTERNAL_SERVER_ERROR);
|
|
||||||
}
|
|
||||||
userRepository.delete(user);
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/edit")
|
|
||||||
public @ResponseBody ResponseEntity<String> editUser(
|
|
||||||
@RequestHeader("Authorization") String authorizationHeader,
|
|
||||||
@RequestParam long userId,
|
|
||||||
@RequestParam String name,
|
|
||||||
@RequestParam String forename,
|
|
||||||
@RequestParam String login,
|
|
||||||
@RequestParam(required = false) String password,
|
|
||||||
@RequestParam Boolean isAdmin
|
|
||||||
) {
|
|
||||||
User authUser = authController.getAuthUserFromHeader(authorizationHeader, userRepository);
|
|
||||||
if (authUser == null || (!authUser.isAdmin() && authUser.getId() != userId)) {
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um den User zu editieren", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
if(isAdmin && !authUser.isAdmin()){
|
|
||||||
return new ResponseEntity<>("Du hast keine Rechte um dich zum Admin zu machen", HttpStatus.UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
User user = userRepository.findById(userId);
|
|
||||||
if (user == null) {
|
|
||||||
return new ResponseEntity<>("User nicht in der Datenbank vorhanden", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
User userWithLogin = userRepository.findByLogin(login);
|
|
||||||
if (userWithLogin != null && userWithLogin.getId() != userId) {
|
|
||||||
return new ResponseEntity<>("Login exestiert bereits", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(password != null){
|
|
||||||
byte[] salt = Hasher.GenerateSalt();
|
|
||||||
byte[] hash;
|
|
||||||
try {
|
|
||||||
hash = Hasher.HashPassword(password, salt);
|
|
||||||
user.setPassword(hash);
|
|
||||||
user.setSalt(salt);
|
|
||||||
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ResponseEntity<>("Fehler beim hashen", HttpStatus.INTERNAL_SERVER_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
user.setName(name);
|
|
||||||
user.setForename(forename);
|
|
||||||
user.setLogin(login);
|
|
||||||
user.setToken("");
|
|
||||||
user.setAdmin(isAdmin);
|
|
||||||
|
|
||||||
userRepository.save(user);
|
|
||||||
return new ResponseEntity<>("", HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(path = "/all")
|
|
||||||
public @ResponseBody
|
|
||||||
ResponseEntity<String> getAllUser() {
|
|
||||||
List<User> userList = userDAO.getAllUser();
|
|
||||||
|
|
||||||
return new ResponseEntity<>(JSONMapper.userListToJSON(userList), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.dao.implementation;
|
|
||||||
|
|
||||||
import com.vpr.server.dao.interfaces.EventDAO;
|
|
||||||
import com.vpr.server.data.Event;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.PersistenceContext;
|
|
||||||
import javax.transaction.Transactional;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
@Transactional
|
|
||||||
public class EventDAOImplementation implements EventDAO {
|
|
||||||
|
|
||||||
@PersistenceContext
|
|
||||||
private EntityManager manager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Event> getAllEvents() {
|
|
||||||
return manager.createNamedQuery("getAllEvents", Event.class).getResultList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Event> getAllEventsWithId(long eventId) {
|
|
||||||
return manager.createNamedQuery("getAllEventsWithId", Event.class)
|
|
||||||
.setParameter("eventId", eventId)
|
|
||||||
.getResultList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Event> getAllEventsInTimespan(long userId, String startDate, String endDate) {
|
|
||||||
return manager.createNamedQuery("getAllEventsInTimespan", Event.class)
|
|
||||||
.setParameter("userId", userId)
|
|
||||||
.setParameter("startDate", startDate)
|
|
||||||
.setParameter("endDate", endDate)
|
|
||||||
.getResultList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Event> getAllEventsWithIdAndDate(long userId, long eventId, String date) {
|
|
||||||
return manager.createNamedQuery("getAllEventsWithIdAndDate", Event.class)
|
|
||||||
.setParameter("userId", userId)
|
|
||||||
.setParameter("eventId", eventId)
|
|
||||||
.setParameter("date", date)
|
|
||||||
.getResultList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.dao.implementation;
|
|
||||||
|
|
||||||
import com.vpr.server.dao.interfaces.UserDAO;
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.PersistenceContext;
|
|
||||||
import javax.transaction.Transactional;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
@Transactional
|
|
||||||
public class UserDAOImplementation implements UserDAO {
|
|
||||||
|
|
||||||
@PersistenceContext
|
|
||||||
private EntityManager manager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<User> getAllUser() {
|
|
||||||
return manager.createNamedQuery("getAllUser", User.class).getResultList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteAllUserEvents(long userId) {
|
|
||||||
try {
|
|
||||||
manager.createNamedQuery("deleteAllUserEvents", User.class)
|
|
||||||
.setParameter("userId", userId)
|
|
||||||
.executeUpdate();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}catch (Exception e){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.dao.interfaces;
|
|
||||||
|
|
||||||
import com.vpr.server.data.Event;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface EventDAO {
|
|
||||||
|
|
||||||
List<Event> getAllEvents();
|
|
||||||
|
|
||||||
List<Event> getAllEventsInTimespan(long userId, String startDate, String endDate);
|
|
||||||
|
|
||||||
List<Event> getAllEventsWithIdAndDate(long userId, long eventId, String date);
|
|
||||||
|
|
||||||
List<Event> getAllEventsWithId(long eventId);
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.dao.interfaces;
|
|
||||||
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface UserDAO {
|
|
||||||
List<User> getAllUser();
|
|
||||||
|
|
||||||
boolean deleteAllUserEvents(long userId);
|
|
||||||
}
|
|
@ -1,174 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.data;
|
|
||||||
|
|
||||||
import javax.persistence.*;
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.sql.Time;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Entity(name = "Event") // @Entity creates a table out of this class with Hibernate
|
|
||||||
@Table(name = "event")
|
|
||||||
@NamedNativeQueries({
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "getAllEvents",
|
|
||||||
query = "SELECT * FROM event",
|
|
||||||
resultClass = Event.class
|
|
||||||
),
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "getAllEventsInTimespan",
|
|
||||||
query = "SELECT * " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"WHERE (ue.user_id = :userId OR e.is_private = 0) " +
|
|
||||||
"AND ue.date >= :startDate " +
|
|
||||||
"AND ue.date < :endDate " +
|
|
||||||
"ORDER BY ue.date, e.priority DESC, e.start",
|
|
||||||
resultClass = Event.class
|
|
||||||
),
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "getAllEventsWithIdAndDate",
|
|
||||||
query = "SELECT * " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"WHERE ue.user_id = :userId " +
|
|
||||||
"AND ue.event_id = :eventId " +
|
|
||||||
"AND ue.date = :date",
|
|
||||||
resultClass = Event.class
|
|
||||||
),
|
|
||||||
@NamedNativeQuery(
|
|
||||||
name = "getAllEventsWithId",
|
|
||||||
query = "SELECT * " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"WHERE ue.event_id = :eventId",
|
|
||||||
resultClass = Event.class
|
|
||||||
)
|
|
||||||
})
|
|
||||||
public class Event implements Serializable {
|
|
||||||
// Generate the primary key
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
private long id;
|
|
||||||
|
|
||||||
@Column(name = "name", nullable = false)
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Column(name = "priority", nullable = false)
|
|
||||||
private Integer priority;
|
|
||||||
|
|
||||||
@Column(name = "is_full_day", nullable = false)
|
|
||||||
private boolean isFullDay;
|
|
||||||
|
|
||||||
@Column(name = "is_private", nullable = false)
|
|
||||||
private boolean isPrivate;
|
|
||||||
|
|
||||||
@Column(name = "start")
|
|
||||||
private Time start;
|
|
||||||
|
|
||||||
@Column(name = "end")
|
|
||||||
private Time end;
|
|
||||||
|
|
||||||
@OneToMany(mappedBy = "event")
|
|
||||||
private List<UserEvent> userEvent;
|
|
||||||
|
|
||||||
/*********************
|
|
||||||
* Getter and Setter *
|
|
||||||
*********************/
|
|
||||||
|
|
||||||
public long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getPriority() {
|
|
||||||
return priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPriority(Integer priority) {
|
|
||||||
this.priority = priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFullDay() {
|
|
||||||
return isFullDay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFullDay(boolean fullDay) {
|
|
||||||
isFullDay = fullDay;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPrivate() {
|
|
||||||
return isPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrivate(boolean aPrivate) {
|
|
||||||
isPrivate = aPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time getStart() {
|
|
||||||
return start;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStart(Time start) {
|
|
||||||
this.start = start;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time getEnd() {
|
|
||||||
return end;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnd(Time end) {
|
|
||||||
this.end = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<UserEvent> getUserEvent() {
|
|
||||||
return userEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserEvent(List<UserEvent> userEvent) {
|
|
||||||
this.userEvent = userEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
// toString
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Event{" +
|
|
||||||
"id=" + id +
|
|
||||||
", name='" + name + '\'' +
|
|
||||||
", priority=" + priority +
|
|
||||||
", isFullDay=" + isFullDay +
|
|
||||||
", start=" + start +
|
|
||||||
", end=" + end +
|
|
||||||
", userEvent=" + userEvent +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj){
|
|
||||||
if(!(obj instanceof Event)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Event event = (Event) obj;
|
|
||||||
System.out.println(event.getId() + " " + getId());
|
|
||||||
return event.getId() == getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode(){
|
|
||||||
return (int)getId();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
//Marco Kühn//
|
|
||||||
package com.vpr.server.json;
|
|
||||||
|
|
||||||
import com.vpr.server.data.Event;
|
|
||||||
import com.vpr.server.data.User;
|
|
||||||
import com.vpr.server.data.UserEvent;
|
|
||||||
|
|
||||||
import java.sql.Time;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class JSONMapper {
|
|
||||||
|
|
||||||
public static String userToJSON(User user) {
|
|
||||||
return "{" +
|
|
||||||
"\"userId\": " + user.getId() + ", " +
|
|
||||||
"\"forename\": \"" + user.getForename() + "\", " +
|
|
||||||
"\"name\": \"" + user.getName() + "\", " +
|
|
||||||
"\"login\": \"" + user.getLogin() + "\"," +
|
|
||||||
"\"admin\": " + user.isAdmin() +
|
|
||||||
"}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String userListToJSON(List<User> userList) {
|
|
||||||
StringBuilder userListJSON = new StringBuilder();
|
|
||||||
for (User user : userList) {
|
|
||||||
userListJSON.append(", ");
|
|
||||||
userListJSON.append(userToJSON(user));
|
|
||||||
}
|
|
||||||
userListJSON.delete(0, 2);
|
|
||||||
|
|
||||||
return "[" + userListJSON + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<String> eventToJSON(Event event) {
|
|
||||||
List<String> eventListJSON = new ArrayList<>();
|
|
||||||
|
|
||||||
for (UserEvent userEvent : event.getUserEvent()) {
|
|
||||||
|
|
||||||
String eventJSON = "{" +
|
|
||||||
"\"ownerId\": " + userEvent.getUser().getId() + ", " +
|
|
||||||
"\"ownerName\": \"" + userEvent.getUser().getForename() + " " + userEvent.getUser().getName() + "\", " +
|
|
||||||
"\"date\": \"" + userEvent.getDate() + "\", " +
|
|
||||||
"\"id\": " + event.getId() + "," +
|
|
||||||
"\"name\": \"" + event.getName() + "\"," +
|
|
||||||
"\"priority\": " + event.getPriority() + "," +
|
|
||||||
"\"fullDay\": " + event.isFullDay() + "," +
|
|
||||||
"\"private\": " + event.isPrivate() + "," +
|
|
||||||
"\"start\": " + timeToJSON(event.getStart()) + "," +
|
|
||||||
"\"end\": " + timeToJSON(event.getEnd()) +
|
|
||||||
"}";
|
|
||||||
|
|
||||||
eventListJSON.add(eventJSON);
|
|
||||||
}
|
|
||||||
|
|
||||||
return eventListJSON;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String eventListToJSON(List<Event> eventList) {
|
|
||||||
StringBuilder eventListJSON = new StringBuilder();
|
|
||||||
for (Event event : eventList) {
|
|
||||||
List<String> eventsJSON = eventToJSON(event);
|
|
||||||
for (String eventJSON : eventsJSON) {
|
|
||||||
eventListJSON.append(", ");
|
|
||||||
eventListJSON.append(eventJSON);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eventListJSON.delete(0, 2);
|
|
||||||
|
|
||||||
return "[" + eventListJSON + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String timeToJSON(Time time) {
|
|
||||||
if (time == null) {
|
|
||||||
return "null";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "\"" + time + "\"";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.json;
|
|
||||||
|
|
||||||
import java.sql.Date;
|
|
||||||
import java.sql.Time;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class Validator {
|
|
||||||
public static String ValidateEventName(String name) throws IllegalArgumentException {
|
|
||||||
if (name.length() < 3) {
|
|
||||||
System.out.println("NAME TO SHORT");
|
|
||||||
throw new IllegalArgumentException("Der Name ist zu kurz");
|
|
||||||
}
|
|
||||||
Pattern pattern = Pattern.compile("[A-Za-z\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df0-9 =!?+*/$.:,;_<>()-]*");
|
|
||||||
Matcher matcher = pattern.matcher(name);
|
|
||||||
if(!matcher.matches()){
|
|
||||||
System.out.println("NAME HAS ILLEGALCHARS");
|
|
||||||
throw new IllegalArgumentException("Der Name enthält nicht erlaubte Zeichen");
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Time ValidateEventTime(String time) throws IllegalArgumentException {
|
|
||||||
try {
|
|
||||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm");
|
|
||||||
long ms = simpleDateFormat.parse(time).getTime();
|
|
||||||
return new Time(ms);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Date ValidateEventDate(String date) throws IllegalArgumentException {
|
|
||||||
try {
|
|
||||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
||||||
return new Date(simpleDateFormat.parse(date).getTime());
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("DATE FORMAT NOT CORRECT");
|
|
||||||
throw new IllegalArgumentException("Datumformat nicht korrekt");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.repository;
|
|
||||||
|
|
||||||
import com.vpr.server.data.Event;
|
|
||||||
import org.springframework.data.jpa.repository.Modifying;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.data.repository.CrudRepository;
|
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
|
||||||
|
|
||||||
// This will be AUTO IMPLEMENTED by Spring into a Bean called eventRepository
|
|
||||||
// CRUD refers Create, Read, Update, Delete
|
|
||||||
|
|
||||||
public interface EventRepository extends CrudRepository<Event, Integer> {
|
|
||||||
@Query(
|
|
||||||
value = "SELECT e.id AS eid, e.name AS ename, e.start, e.end, e.priority , e.is_full_day, " +
|
|
||||||
"ue.date, " +
|
|
||||||
"u.id AS uid, u.forename, u.name AS uname " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"INNER JOIN user u " +
|
|
||||||
"ON ue.user_id = u.id " +
|
|
||||||
"WHERE u.id = ?1 " +
|
|
||||||
"OR e.is_private = 0",
|
|
||||||
nativeQuery = true
|
|
||||||
)
|
|
||||||
Object[] findAllVisibleByUserId(long id);
|
|
||||||
|
|
||||||
@Query(
|
|
||||||
value = "SELECT * " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"WHERE ue.user_id = ?1",
|
|
||||||
nativeQuery = true
|
|
||||||
)
|
|
||||||
Object[] findAllByUserId(long id);
|
|
||||||
|
|
||||||
|
|
||||||
@Query(
|
|
||||||
value = "SELECT ue.user_id as userId, ue.event_id as eventId, ue.date as date " +
|
|
||||||
"FROM event e " +
|
|
||||||
"INNER JOIN user_event ue " +
|
|
||||||
"ON e.id = ue.event_id " +
|
|
||||||
"WHERE ue.event_id = ?1 " +
|
|
||||||
"AND ue.user_id = ?2 " +
|
|
||||||
"AND ue.date = ?3",
|
|
||||||
nativeQuery = true
|
|
||||||
)
|
|
||||||
UserEventInterface findUserEventByEventIdUserIdAndDate(long eventId, long userId, String date);
|
|
||||||
|
|
||||||
interface UserEventInterface{
|
|
||||||
long getEventId();
|
|
||||||
long getUserId();
|
|
||||||
long getDate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Modifying
|
|
||||||
@Transactional
|
|
||||||
@Query(
|
|
||||||
value = "DELETE ue FROM user_event ue WHERE ue.event_id = :eventId AND ue.user_id = :userId AND ue.date = :date",
|
|
||||||
nativeQuery = true
|
|
||||||
)
|
|
||||||
void deleteUserEventsById(long userId, long eventId, String date);
|
|
||||||
|
|
||||||
|
|
||||||
@Modifying
|
|
||||||
@Transactional
|
|
||||||
@Query(
|
|
||||||
value = "DELETE e FROM event e WHERE e.id = ?1",
|
|
||||||
nativeQuery = true
|
|
||||||
)
|
|
||||||
void deleteById(long id);
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.security;
|
|
||||||
|
|
||||||
import javax.crypto.SecretKeyFactory;
|
|
||||||
import javax.crypto.spec.PBEKeySpec;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.security.spec.InvalidKeySpecException;
|
|
||||||
import java.security.spec.KeySpec;
|
|
||||||
|
|
||||||
public class Hasher {
|
|
||||||
|
|
||||||
public static byte[] HashPassword(String password, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
|
|
||||||
// Credit: https://www.baeldung.com/java-password-hashing
|
|
||||||
// Generate hash with PBKDF2
|
|
||||||
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 128);
|
|
||||||
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
|
|
||||||
return factory.generateSecret(spec).getEncoded();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] GenerateSalt(){
|
|
||||||
// Credit: https://www.baeldung.com/java-password-hashing
|
|
||||||
// Create a salt
|
|
||||||
SecureRandom random = new SecureRandom();
|
|
||||||
byte[] salt = new byte[16];
|
|
||||||
random.nextBytes(salt);
|
|
||||||
return salt;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
//Marc Beyer//
|
|
||||||
package com.vpr.server.security;
|
|
||||||
|
|
||||||
import io.jsonwebtoken.JwtException;
|
|
||||||
import io.jsonwebtoken.Jwts;
|
|
||||||
import io.jsonwebtoken.SignatureAlgorithm;
|
|
||||||
import io.jsonwebtoken.security.Keys;
|
|
||||||
|
|
||||||
import java.security.Key;
|
|
||||||
|
|
||||||
public class Token {
|
|
||||||
|
|
||||||
private static final Key KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
|
|
||||||
|
|
||||||
public static String Generate(String subject){
|
|
||||||
return Jwts.builder().setSubject(subject).signWith(KEY).compact();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean Verify(String jws, String subject){
|
|
||||||
try {
|
|
||||||
assert Jwts.parserBuilder().setSigningKey(KEY).build().parseClaimsJws(jws)
|
|
||||||
.getBody().getSubject().equals(subject);
|
|
||||||
return true;
|
|
||||||
} catch (JwtException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user