Skip to content
Snippets Groups Projects
Commit f359840b authored by abdu's avatar abdu
Browse files

changed too much shit to list everything on here

parent b42731cc
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,11 @@ ...@@ -2,6 +2,11 @@
export default { export default {
name: "LoginPage", name: "LoginPage",
created() {
if(localStorage.getItem('isLoggedIn') === 'true' && localStorage.getItem('userId') !== null){
this.$router.push({ name: 'main', params: {id: localStorage.getItem('userId')}})
}
},
data(){ data(){
return { return {
user: { user: {
...@@ -15,11 +20,9 @@ export default { ...@@ -15,11 +20,9 @@ export default {
}, },
computed: { computed: {
checkEmptyFieldsSignup(){ checkEmptyFieldsSignup(){
console.log("here: " + this.user.userName)
return this.user.userName === '' || this.user.password === '' || this.repeatedPassword === '' || this.user.password !== this.repeatedPassword; return this.user.userName === '' || this.user.password === '' || this.repeatedPassword === '' || this.user.password !== this.repeatedPassword;
}, },
checkEmptyFieldsSignin(){ checkEmptyFieldsSignin(){
console.log("here: " + this.user.userName)
return this.user.userName === '' || this.user.password === '' return this.user.userName === '' || this.user.password === ''
} }
}, },
...@@ -32,6 +35,7 @@ export default { ...@@ -32,6 +35,7 @@ export default {
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json"
}, },
credentials: 'include',
body: JSON.stringify({ body: JSON.stringify({
"userName": this.user.userName, "userName": this.user.userName,
"password": this.user.password "password": this.user.password
...@@ -52,6 +56,7 @@ export default { ...@@ -52,6 +56,7 @@ export default {
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json"
}, },
credentials: 'include',
body: JSON.stringify({ body: JSON.stringify({
"userName": this.user.userName, "userName": this.user.userName,
"password": this.user.password "password": this.user.password
...@@ -61,23 +66,20 @@ export default { ...@@ -61,23 +66,20 @@ export default {
const responseData = await response.json(); const responseData = await response.json();
if(response.status === 200){ if(response.status === 200){
localStorage.setItem('userId', responseData.userId)
localStorage.setItem('isLoggedIn', 'true')
this.$bvToast.show('signin-success') this.$bvToast.show('signin-success')
await this.$router.push({ name: 'main', params: {id: responseData.userId}}); await this.$router.push({ name: 'main', params: {id: responseData.userId}});
} else { } else {
this.$bvToast.show('invalid-user-password') this.$bvToast.show('invalid-user-password')
} }
}, },
async signOut(){
await this.$router.push({ name: 'login'});
}
} }
} }
</script> </script>
<template> <template>
<b-container class="h-100" fluid id="main-container">
<b-container fluid id="main-container">
<b-row class="justify-content-center align-items-center"> <b-row class="justify-content-center align-items-center">
<b-col></b-col> <b-col></b-col>
<b-col> <b-col>
...@@ -105,7 +107,6 @@ export default { ...@@ -105,7 +107,6 @@ export default {
</b-card-body> </b-card-body>
<b-card-footer> <b-card-footer>
© Jan Schnaidt & Abdullah Kiran, 2024 © Jan Schnaidt & Abdullah Kiran, 2024
<b-button @click="signOut">Test Logout</b-button>
</b-card-footer> </b-card-footer>
</b-card> </b-card>
</b-col> </b-col>
......
...@@ -2,9 +2,14 @@ ...@@ -2,9 +2,14 @@
export default { export default {
name: "MainPage", name: "MainPage",
created(){ created(){
console.log('main page: ' + this.$route.params.id) if(localStorage.getItem('isLoggedIn') === null && localStorage.getItem('userId') !== 'true'){
this.$router.push({ name: 'login' })
}
this.userId = localStorage.getItem('userId')
this.getAllTodos()
}, },
data: function () { data() {
return { return {
items: [], items: [],
newItem: "", newItem: "",
...@@ -12,10 +17,9 @@ export default { ...@@ -12,10 +17,9 @@ export default {
showDetailsModal: false, showDetailsModal: false,
selectedItem: "", selectedItem: "",
user: { user: {
userId: this.$route.params.id, userId: '',
userName: '', userName: '',
password: '', password: ''
todoList: []
}, },
todo: { todo: {
todoId: '', todoId: '',
...@@ -25,9 +29,6 @@ export default { ...@@ -25,9 +29,6 @@ export default {
completed: false completed: false
} }
} }
},
computed: {
}, },
methods: { methods: {
asdItem() { asdItem() {
...@@ -40,7 +41,16 @@ export default { ...@@ -40,7 +41,16 @@ export default {
this.selectedItem = item; this.selectedItem = item;
this.showDetailsModal = true; this.showDetailsModal = true;
}, },
async getAllTodos(){
let url = `http://localhost:9876/user/getAllTodos?userId=${localStorage.getItem('userId')}`
const response = await fetch(url, {
method: 'GET',
credentials: 'include',
})
this.items = await response.json()
},
async addTodo(){ async addTodo(){
let url = "http://localhost:9876/user/addTodo" let url = "http://localhost:9876/user/addTodo"
...@@ -49,15 +59,36 @@ export default { ...@@ -49,15 +59,36 @@ export default {
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json"
}, },
credentials: 'include', // Ensure credentials are included
body: JSON.stringify({ body: JSON.stringify({
"title": this.todo.title, "title": this.todo.title,
"description": this.todo.description, "description": this.todo.description,
"userId": this.$route.params.id, "userId": this.$route.params.id,
"completed": false "completed": false
}) })
});
this.items = await response.json()
},
async signout(){
let url = "http://localhost:9876/user/signout"
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
credentials: 'include',
body: JSON.stringify({
'userId': localStorage.getItem('userId')
})
}) })
console.log(response) if(response.status === 200){
localStorage.removeItem('isLoggedIn')
localStorage.removeItem('userId')
await this.$router.push({ name: 'login'})
}
} }
} }
} }
...@@ -66,7 +97,7 @@ export default { ...@@ -66,7 +97,7 @@ export default {
<template> <template>
<div> <div>
<b-container fluid id="main-container"> <b-container fluid id="main-container">
<b-button @click="signout">Log out</b-button>
<b-row class="justify-content-center align-items-center"> <b-row class="justify-content-center align-items-center">
<b-col> <b-col>
<b-card class="shadow-lg" border-variant="secondary" title="ToDo-App"> <b-card class="shadow-lg" border-variant="secondary" title="ToDo-App">
...@@ -84,7 +115,8 @@ export default { ...@@ -84,7 +115,8 @@ export default {
</b-modal> </b-modal>
<ul class="list-group mt-3"> <ul class="list-group mt-3">
<li v-for="(item, index) in items" :key="index" class="list-group-item" @click="showDetails(item)"> <li v-for="(item, index) in items" :key="index" class="list-group-item" @click="showDetails(item)">
{{ item }} <h5> {{ item.title }} </h5>
<p> {{ item.description }}</p>
</li> </li>
</ul> </ul>
<b-modal v-model="showDetailsModal" title="Details" hide-header id="showDetailsModal"> <b-modal v-model="showDetailsModal" title="Details" hide-header id="showDetailsModal">
...@@ -97,26 +129,21 @@ export default { ...@@ -97,26 +129,21 @@ export default {
</b-card> </b-card>
</b-col> </b-col>
</b-row> </b-row>
<!--
----- toasts & alerts -----
<b-toast no-close-button auto-hide-delay="5000" variant="success" id="account-created-toast" title="success">
account for {{ this.user.userName }} has been created
</b-toast>
<b-toast no-close-button auto-hide-delay="5000" variant="danger" id="account-not-created-toast" title="error">
user {{ this.user.userName }} already exists
</b-toast>
<b-toast signin-success auto-hide-delay="5000" variant="success" id="signin-success" title="success">
Signin Success
</b-toast>
<b-toast invalid-user-password auto-hide-delay="10000" variant="danger" id="invalid-user-password" title="error">
User {{ this.user.userName }} or Password invalid
</b-toast>
-->
</b-container> </b-container>
</div> </div>
</template> </template>
<style scoped> <style scoped>
.list-group-item {
padding: 5px;
margin-bottom: 10px;
border-radius: 5px;
background-color: #f8f9fa;
border: 1px darkgray solid;
}
.list-group-item:hover {
background-color: #e9ecef;
}
</style> </style>
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.cloudcomputing.todo.controller; ...@@ -3,6 +3,7 @@ package com.cloudcomputing.todo.controller;
import com.cloudcomputing.todo.dto.TodoDTO; import com.cloudcomputing.todo.dto.TodoDTO;
import com.cloudcomputing.todo.dto.UserDTO; import com.cloudcomputing.todo.dto.UserDTO;
import com.cloudcomputing.todo.service.UserService; import com.cloudcomputing.todo.service.UserService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession; import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -13,7 +14,7 @@ import java.util.List; ...@@ -13,7 +14,7 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
@CrossOrigin(origins = "*") @CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true")
public class UserController { public class UserController {
@Autowired @Autowired
private UserService userService; private UserService userService;
...@@ -30,8 +31,8 @@ public class UserController { ...@@ -30,8 +31,8 @@ public class UserController {
} }
@PostMapping("/signin") @PostMapping("/signin")
public ResponseEntity<UserDTO> login(HttpSession session, @RequestBody UserDTO user) { public ResponseEntity<UserDTO> login(HttpServletRequest request, @RequestBody UserDTO user) {
boolean loginSuccessful = userService.login(session, user); boolean loginSuccessful = userService.login(request, user);
if(loginSuccessful){ if(loginSuccessful){
return new ResponseEntity<>(userService.getUser(user), HttpStatus.OK); return new ResponseEntity<>(userService.getUser(user), HttpStatus.OK);
} }
...@@ -39,10 +40,33 @@ public class UserController { ...@@ -39,10 +40,33 @@ public class UserController {
return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
} }
@PostMapping("/signout")
public ResponseEntity<String> logout(HttpServletRequest request, @RequestBody String userId) {
boolean logoutSuccessful = userService.logout(request, userId);
if(logoutSuccessful){
return new ResponseEntity<>(HttpStatus.OK);
}
return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
}
@PostMapping("/addTodo") @PostMapping("/addTodo")
public ResponseEntity<List<TodoDTO>> addTodo(HttpSession session, @RequestBody TodoDTO todoDTO) { public ResponseEntity<List<TodoDTO>> addTodo(HttpServletRequest request, @RequestBody TodoDTO todoDTO) {
session.getAttribute("currentUser"); if(userService.validateSession(request)){
List<TodoDTO> todos = userService.addTodo(todoDTO); List<TodoDTO> todos = userService.addTodo(todoDTO);
return new ResponseEntity<>(todos, HttpStatus.CREATED); return new ResponseEntity<>(todos, HttpStatus.CREATED);
}
return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
}
@GetMapping("/getAllTodos")
public ResponseEntity<List<TodoDTO>> getAllTodos(HttpServletRequest request, @RequestParam String userId) {
if(userService.validateSession(request)){
List<TodoDTO> todos = userService.getAllTodos(userId);
return new ResponseEntity<>(todos, HttpStatus.OK);
}
return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
} }
} }
...@@ -9,6 +9,7 @@ import com.cloudcomputing.todo.mapper.UserMapper; ...@@ -9,6 +9,7 @@ import com.cloudcomputing.todo.mapper.UserMapper;
import com.cloudcomputing.todo.repository.TodoRepository; import com.cloudcomputing.todo.repository.TodoRepository;
import com.cloudcomputing.todo.repository.UserRepository; import com.cloudcomputing.todo.repository.UserRepository;
import com.cloudcomputing.todo.util.CustomAuthenticator; import com.cloudcomputing.todo.util.CustomAuthenticator;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession; import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,8 +28,10 @@ public class UserService { ...@@ -27,8 +28,10 @@ public class UserService {
@Autowired @Autowired
private CustomAuthenticator customAuthenticator; private CustomAuthenticator customAuthenticator;
@Autowired @Autowired
private TodoMapper todoMapper; private TodoMapper todoMapper;
@Autowired @Autowired
private TodoRepository todoRepository; private TodoRepository todoRepository;
...@@ -47,15 +50,37 @@ public class UserService { ...@@ -47,15 +50,37 @@ public class UserService {
return userMapper.entityToDto(userRepository.findByUserName(userDTO.getUserName())); return userMapper.entityToDto(userRepository.findByUserName(userDTO.getUserName()));
} }
public boolean login(HttpSession session, UserDTO userDTO) { public boolean login(HttpServletRequest request, UserDTO userDTO) {
if(customAuthenticator.authenticate(userDTO)){ if(customAuthenticator.authenticate(userDTO)){
session.setAttribute("currentUser", userDTO); String userId = userRepository.findByUserName(userDTO.getUserName()).getUserId();
HttpSession session = request.getSession();
session.setAttribute("userId", userId);
return true; return true;
} }
return false; return false;
} }
public boolean logout(HttpServletRequest request, String userId) {
HttpSession session = request.getSession();
if(session != null){
session.invalidate();
}
return true;
}
public List<TodoDTO> getAllTodos(String userId) {
List <Todo> todoList = todoRepository.findAllByUserId(userId);
List<TodoDTO> todoDTOList = new ArrayList<>();
todoList.forEach((todoItem) -> {
todoDTOList.add(todoMapper.entityToDto(todoItem));
});
return todoDTOList;
}
public List<TodoDTO> addTodo(TodoDTO todoDTO){ public List<TodoDTO> addTodo(TodoDTO todoDTO){
Todo todo = todoMapper.dtoToEntity(todoDTO); Todo todo = todoMapper.dtoToEntity(todoDTO);
todoRepository.save(todo); todoRepository.save(todo);
...@@ -67,4 +92,10 @@ public class UserService { ...@@ -67,4 +92,10 @@ public class UserService {
}); });
return todoDTOList; return todoDTOList;
} }
public boolean validateSession(HttpServletRequest request) {
HttpSession session = request.getSession(false);
System.out.println("Session ID: " + (session != null ? session.getId() : "null"));
return session != null && session.getAttribute("userId") != null;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment