Compare commits
5 Commits
tonitch/fr
...
Leo/Backen
Author | SHA1 | Date | |
---|---|---|---|
49b99e14c9 | |||
9328601d2d | |||
79f4b84b70 | |||
0c73f6f44d | |||
a1bdae9e83 |
@ -15,7 +15,7 @@ import java.util.Date;
|
||||
|
||||
public class MockController {
|
||||
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
|
||||
public final UserService userService;
|
||||
public final UserRepository userRepo;
|
||||
public final TokenRepository tokenRepo;
|
||||
public final TokenService tokenService;
|
||||
@ -27,7 +27,8 @@ public class MockController {
|
||||
ArrayList<User> mockUsers;
|
||||
|
||||
|
||||
public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, InscriptionService inscriptionService){
|
||||
public MockController(UserService userService, UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, InscriptionService inscriptionService){
|
||||
this.userService = userService;
|
||||
this.tokenRepo = tokenRepo;
|
||||
this.userRepo = userRepo;
|
||||
this.tokenService = tokenService;
|
||||
@ -45,21 +46,21 @@ public class MockController {
|
||||
|
||||
@PostMapping("/mock")
|
||||
public void postMock(){
|
||||
|
||||
// user part
|
||||
|
||||
|
||||
User herobrine = new User("brine","hero","admin@admin.com","behind","ShadowsLand",new Date(0), null,Role.Admin,passwordEncoder.encode("admin"));
|
||||
User joe = new User("Mama","Joe","student@student.com","roundabout","England",new Date(0), null,Role.Student,passwordEncoder.encode("student"));
|
||||
User meh = new User("Polo","Marco","secretary@secretary.com","a Box","Monaco",new Date(0), null,Role.Secretary,passwordEncoder.encode("secretary"));
|
||||
User joke = new User("Gaillard","Corentin","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher"));
|
||||
User jojo = new User("Bridoux","Justin","teacher2@teacher2.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher"));
|
||||
User lena = new User("Louille","Lena","inscriptionService@InscriptionService.com","no","yes",new Date(0), null,Role.InscriptionService,passwordEncoder.encode("inscriptionService"));
|
||||
mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena,jojo));
|
||||
|
||||
userRepo.saveAll(mockUsers);
|
||||
mockUsers = new ArrayList<>(Arrays.asList(joke, herobrine, joe, meh, jojo));
|
||||
userService.saveAll(mockUsers);
|
||||
userService.save(lena);
|
||||
|
||||
// Course / Curriculum part
|
||||
|
||||
//Course / Curriculum part
|
||||
|
||||
Curriculum infoBab1 = new Curriculum(1,"info");
|
||||
Curriculum chemistryBab1 = new Curriculum(1,"chemistry");
|
||||
|
43
backend/src/main/java/ovh/herisson/Clyde/RegNoGenerator.java
Normal file
43
backend/src/main/java/ovh/herisson/Clyde/RegNoGenerator.java
Normal file
@ -0,0 +1,43 @@
|
||||
package ovh.herisson.Clyde;
|
||||
|
||||
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
public class RegNoGenerator implements IdentifierGenerator {
|
||||
private final UserSaveCounter usv = UserSaveCounter.getInstance();
|
||||
@Override
|
||||
public Object generate(SharedSessionContractImplementor session, Object object) {
|
||||
try{
|
||||
JdbcConnectionAccess jdbccon = session.getJdbcConnectionAccess();
|
||||
Connection conn = jdbccon.obtainConnection();
|
||||
|
||||
Statement statement = conn.createStatement();
|
||||
|
||||
int n = usv.getCount();
|
||||
Calendar c = new GregorianCalendar();
|
||||
int y = c.get(Calendar.YEAR);
|
||||
String query = "select count(reg_no) + "+n+" from Users where reg_no/10000 = " + y%1000;
|
||||
|
||||
ResultSet set = statement.executeQuery(query);
|
||||
long resp = 0;
|
||||
if(set.next()){
|
||||
resp = set.getLong(1)+((y%1000)*10000);
|
||||
usv.increment();
|
||||
}
|
||||
|
||||
conn.close();
|
||||
statement.close();
|
||||
|
||||
return resp;
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -5,13 +5,10 @@ import org.springframework.data.repository.CrudRepository;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
public interface UserRepository extends CrudRepository<User, Long> {
|
||||
|
||||
User findById(long id);
|
||||
|
||||
User findByEmail(String email);
|
||||
|
||||
|
||||
|
||||
@Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Teacher")
|
||||
Iterable<User> findAllTeachers();
|
||||
|
||||
|
@ -5,13 +5,15 @@ import org.springframework.stereotype.Service;
|
||||
import ovh.herisson.Clyde.Repositories.UserRepository;
|
||||
import ovh.herisson.Clyde.Tables.Role;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
import ovh.herisson.Clyde.UserSaveCounter;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class UserService {
|
||||
private final UserRepository userRepo;
|
||||
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
|
||||
private final UserSaveCounter usc = UserSaveCounter.getInstance();
|
||||
public UserService(UserRepository userRepo){
|
||||
this.userRepo = userRepo;
|
||||
}
|
||||
@ -106,10 +108,19 @@ public class UserService {
|
||||
}
|
||||
|
||||
public User save(User user){
|
||||
usc.reset();
|
||||
user.setPassword(passwordEncoder.encode(user.getPassword()));
|
||||
return userRepo.save(user);
|
||||
}
|
||||
|
||||
public void saveAll(ArrayList<User> list){
|
||||
//S'assure que le compteur est bien a 0
|
||||
usc.reset();
|
||||
userRepo.saveAll(list);
|
||||
//Reset le compteur a zero pour les futurs ajouts
|
||||
usc.reset();
|
||||
}
|
||||
|
||||
public Iterable<User> getAll(){
|
||||
return userRepo.findAll();
|
||||
}
|
||||
@ -131,4 +142,5 @@ public class UserService {
|
||||
public void delete(User user) {
|
||||
userRepo.delete(user);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package ovh.herisson.Clyde.Tables;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@ -8,7 +10,8 @@ import java.util.Date;
|
||||
@Table(name = "Users")
|
||||
public class User {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
@GenericGenerator(name = "userGen", type = ovh.herisson.Clyde.RegNoGenerator.class)
|
||||
@GeneratedValue(generator = "userGen")
|
||||
private Long regNo;
|
||||
private String lastName;
|
||||
private String firstName;
|
||||
|
@ -0,0 +1,25 @@
|
||||
package ovh.herisson.Clyde;
|
||||
|
||||
public final class UserSaveCounter {
|
||||
private static UserSaveCounter instance;
|
||||
private int count = 0;
|
||||
|
||||
public void increment() {
|
||||
this.count+=1;
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
public void reset(){
|
||||
this.count = 0;
|
||||
}
|
||||
public static UserSaveCounter getInstance(){
|
||||
if (instance == null){
|
||||
instance = new UserSaveCounter();
|
||||
return instance;
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
}
|
@ -1,3 +1,2 @@
|
||||
spring.jpa.hibernate.ddl-auto=create-drop
|
||||
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
|
||||
spring.sql.init.mode=always
|
@ -23,6 +23,7 @@ import ovh.herisson.Clyde.Repositories.TokenRepository;
|
||||
import ovh.herisson.Clyde.Repositories.UserRepository;
|
||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
|
||||
import ovh.herisson.Clyde.Services.TokenService;
|
||||
import ovh.herisson.Clyde.Services.UserService;
|
||||
import ovh.herisson.Clyde.Tables.Role;
|
||||
import ovh.herisson.Clyde.Tables.Token;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
@ -47,6 +48,8 @@ public class UserControllerTest {
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
@Autowired
|
||||
@ -79,12 +82,13 @@ public class UserControllerTest {
|
||||
tokenRepository.deleteAll();
|
||||
userRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
//Verifie qu'un user qui n'a pas les permissions admin ou secretaire ne peut pas post
|
||||
public void userPostTest(){
|
||||
User god = new User("god","god","admin@admin.com","everywhere","every",new Date(0), null, Role.Admin,"goddoesntneedpassword");
|
||||
Token godToken = new Token(god, tokenService.generateNewToken(), new Date());
|
||||
userRepository.save(god);
|
||||
userService.save(god);
|
||||
tokenService.saveToken(godToken);
|
||||
|
||||
//Can god post herobrine himself ?
|
||||
@ -97,7 +101,7 @@ public class UserControllerTest {
|
||||
//Can noob post herobrine without authorizations (no)
|
||||
User noob = new User("boon","noob","noob@student.com","everywhere","every",new Date(0), null, Role.Student,"noob");
|
||||
Token noobToken = new Token(noob, tokenService.generateNewToken(), new Date());
|
||||
userRepository.save(noob);
|
||||
userService.save(noob);
|
||||
tokenService.saveToken(noobToken);
|
||||
|
||||
with().body(herobrine).contentType(ContentType.JSON).header("Authorization", noobToken.getToken()).when().request("POST", "/user").then().statusCode(401);
|
||||
|
@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import ovh.herisson.Clyde.Services.UserService;
|
||||
import ovh.herisson.Clyde.Tables.Role;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
@ -24,6 +25,7 @@ public class UserRepoTest {
|
||||
|
||||
@BeforeEach
|
||||
public void setup(){
|
||||
userRepo.deleteAll();
|
||||
User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand", new GregorianCalendar(2005, 4, 3).getTime(), null, Role.Admin,"admin");
|
||||
userRepo.save(herobrine);
|
||||
}
|
||||
@ -34,8 +36,8 @@ public class UserRepoTest {
|
||||
}
|
||||
@Test
|
||||
public void usertest(){
|
||||
Assert.assertEquals("brine", userRepo.findById(1).getLastName());
|
||||
Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findById(1).getBirthDate()));
|
||||
Assert.assertEquals("brine", userRepo.findByEmail("admin@admin.com").getLastName());
|
||||
Assert.assertTrue(new GregorianCalendar(2005, 4, 3).getTime().equals(userRepo.findByEmail("admin@admin.com").getBirthDate()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ window.addEventListener('hashchange', () => {
|
||||
<a class="icon" href="#Notifications">
|
||||
<div class="fa-solid fa-bell" style="margin-top: 7px; margin-bottom: 3px;"></div>
|
||||
</a></li>
|
||||
<li @click="active=!active" class="option"style="float: right;" title=settings>
|
||||
<li @click="active=!active" class="option"style="float: right;" title=settings>
|
||||
<a class="icon" >
|
||||
<div class="fa-solid fa-gear" style="margin-top: 7px; margin-bottom: 3px;"></div>
|
||||
<div v-if="active" class="dropdown">
|
||||
@ -86,9 +86,12 @@ window.addEventListener('hashchange', () => {
|
||||
</ul>
|
||||
</div>
|
||||
<div class="page">
|
||||
<div style=" margin:50px;">
|
||||
<Suspense>
|
||||
<component :is="currentView" />
|
||||
|
||||
<component :is="currentView" />
|
||||
</Suspense>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -96,8 +99,6 @@ window.addEventListener('hashchange', () => {
|
||||
<style scoped>
|
||||
|
||||
.container{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display:grid;
|
||||
grid-template-columns:[firstCol-start]70px[firstCol-end secondCol-start]auto[endCol];
|
||||
grid-template-rows:[firstRow-start]61px[firstRow-end secondRow-start] auto [endRow];
|
||||
@ -110,8 +111,6 @@ window.addEventListener('hashchange', () => {
|
||||
|
||||
.page {
|
||||
grid-area:page;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
place-self:center;
|
||||
}
|
||||
|
||||
|
@ -56,10 +56,10 @@
|
||||
|
||||
|
||||
<template>
|
||||
<div class="setup">
|
||||
<div class='loginBox'>
|
||||
|
||||
<div v-if="loginPage">
|
||||
<div class='loginBox' style="margin-top:30%;">
|
||||
<form @submit.prevent="login(outputs.email,outputs.password);goBackHome();"class="form">
|
||||
<form @submit.prevent=" login(outputs.email,outputs.password);goBackHome();"class="form">
|
||||
<h1 style="color:rgb(239,60,168); font-family: sans-serif;">
|
||||
{{i18n("login.guest.signin")}}
|
||||
</h1>
|
||||
@ -74,15 +74,14 @@
|
||||
<div class="register">
|
||||
<a @click="loginPage=!loginPage">{{i18n("login.guest.register")}}</a>
|
||||
</div>
|
||||
<div class="inputBox" style="margin-bottom:35px;">
|
||||
<div class="inputBox">
|
||||
<input type="submit" v-model="submitValue">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-else>
|
||||
<div class='loginBox' style="margin-top:30%; margin-bottom:50%;">
|
||||
<form class="form">
|
||||
<form class="form">
|
||||
<h1 style="color:rgb(239,60,168); font-family: sans-serif; text-align:center;">
|
||||
{{i18n("login.guest.welcome")}}
|
||||
</h1>
|
||||
@ -129,12 +128,9 @@
|
||||
<p>{{i18n("login.guest.country")}}</p>
|
||||
<input type="text" v-model="outputs.country">
|
||||
</div>
|
||||
<form class="inputBox"novalidate enctype="multipart/form-data">
|
||||
<form novalidate enctype="multipart/form-data" class="inputBox">
|
||||
<p>{{i18n("profile.picture").toUpperCase()}}</p>
|
||||
<label class="browser">
|
||||
Parcourir . . .
|
||||
<input type="file" :disabled="imageSaved" @change="ppData = uploadProfilePicture($event.target.files); imageSaved = true;" accept="image/*">
|
||||
</label>
|
||||
<input type="file" :disabled="imageSaved" @change="ppData = uploadProfilePicture($event.target.files); imageSaved = true;" accept="image/*">
|
||||
</form>
|
||||
<div class="inputBox">
|
||||
<p>{{i18n("Curriculum").toUpperCase()}}</p>
|
||||
@ -157,26 +153,35 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.setup {
|
||||
margin-left: auto;
|
||||
margin-right:auto;
|
||||
min-width:400px;
|
||||
|
||||
width:25%;
|
||||
height:60%;
|
||||
.Home{
|
||||
position:absolute;
|
||||
display: flex;
|
||||
z-index: 100;
|
||||
padding: 8px 16px;
|
||||
color:rgb(255, 255, 255);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.Home:hover{
|
||||
width:40px;
|
||||
background-color: black;
|
||||
border-radius:6px;
|
||||
color:white;
|
||||
transform: translate(0px ,1px);
|
||||
}
|
||||
|
||||
|
||||
.loginBox {
|
||||
background-color: rgb(24,24,24);
|
||||
width: 400px;
|
||||
display:flex;
|
||||
justify-content: center;
|
||||
border-radius: 5%;
|
||||
padding: 40px;
|
||||
border-radius: 20px;
|
||||
box-shadow:0 5px 25px #000000;
|
||||
|
||||
}
|
||||
@ -185,8 +190,9 @@
|
||||
width:100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items:center;
|
||||
gap: 3%;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
|
||||
@ -194,12 +200,12 @@
|
||||
|
||||
width:100%;
|
||||
border: none;
|
||||
margin-right: 12.5%;
|
||||
padding-left: 2.5%;
|
||||
padding-top:2.5%;
|
||||
padding-bottom:2.5%;
|
||||
margin-right: 50px;
|
||||
padding-left: 10px;
|
||||
padding-top:10px;
|
||||
padding-bottom:10px;
|
||||
outline:none;
|
||||
border-radius: 10px;
|
||||
border-radius: 4px;
|
||||
font-size:1.35em;
|
||||
}
|
||||
|
||||
@ -214,9 +220,8 @@
|
||||
|
||||
.register{
|
||||
color:rgb(239,60,168);
|
||||
width:70%;
|
||||
margin-bottom:20px;
|
||||
margin-top:20px;
|
||||
width: 100%;
|
||||
display:flex;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@ -245,21 +250,6 @@ input[type=submit],button,select{
|
||||
|
||||
}
|
||||
|
||||
input[type=file]{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.browser{
|
||||
display:inline-block;
|
||||
cursor:pointer;
|
||||
border-radius:20px;
|
||||
background-color:rgb(239,60,168);
|
||||
padding:5%;
|
||||
font-size:1.35em;
|
||||
font-family:sans-serif;
|
||||
background:#FFFFFF;
|
||||
}
|
||||
|
||||
button:active ,.switchpage:active{
|
||||
opacity:0.8;
|
||||
|
||||
|
@ -1,11 +1,4 @@
|
||||
body {
|
||||
background-color: rgb(53, 25, 60);
|
||||
margin:0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
#app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
Reference in New Issue
Block a user