Compare commits

..

No commits in common. "5a7934b2a3817186e117ce75c9b90390bb43101a" and "36fc33c3e9fad425e3be3ad86719f65e2c3a5935" have entirely different histories.

18 changed files with 111 additions and 344 deletions

View File

@ -2,7 +2,6 @@ package ovh.herisson.Clyde.EndPoints;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
@ -10,12 +9,10 @@ import org.springframework.web.bind.annotation.RestController;
import ovh.herisson.Clyde.Services.AuthenticatorService; import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Tables.Applications; import ovh.herisson.Clyde.Tables.Applications;
import ovh.herisson.Clyde.Tables.Role; import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.User;
import java.util.ArrayList; import java.util.ArrayList;
@RestController @RestController
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
public class ApplicationsController { public class ApplicationsController {
AuthenticatorService authServ; AuthenticatorService authServ;
@ -44,17 +41,12 @@ public class ApplicationsController {
} }
public ArrayList<Applications> getAuthorizedApplications(String token){ public ArrayList<Applications> getAuthorizedApplications(String token){
Role posterRole = authServ.getUserFromToken(token).getRole();
ArrayList<Applications> authorizedApps = new ArrayList<>(); ArrayList<Applications> authorizedApps = new ArrayList<>();
authorizedApps.add(Applications.Login); authorizedApps.add(Applications.Login);
authorizedApps.add(Applications.Profile); authorizedApps.add(Applications.Profile);
User user = authServ.getUserFromToken(token);
if(user == null)
return authorizedApps;
Role posterRole = user.getRole();
if (posterRole == Role.Teacher || posterRole == Role.Student || posterRole == Role.Admin){ if (posterRole == Role.Teacher || posterRole == Role.Student || posterRole == Role.Admin){
authorizedApps.add(Applications.Msg); authorizedApps.add(Applications.Msg);
authorizedApps.add(Applications.Forum); authorizedApps.add(Applications.Forum);

View File

@ -1,80 +0,0 @@
package ovh.herisson.Clyde.EndPoints;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Services.CourseService;
import ovh.herisson.Clyde.Services.TeacherCourseService;
import ovh.herisson.Clyde.Tables.Course;
import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.TeacherCourse;
import ovh.herisson.Clyde.Tables.User;
import java.util.ArrayList;
import java.util.Map;
@RestController
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
public class CourseController {
private final CourseService courseServ;
private final TeacherCourseService teacherCourseServ;
private final AuthenticatorService authServ;
public CourseController(CourseService courseServ, TeacherCourseService teacherCourseServ, AuthenticatorService authServ) {
this.courseServ = courseServ;
this.teacherCourseServ = teacherCourseServ;
this.authServ = authServ;
}
@GetMapping("/course/{id}")
public ResponseEntity<Course> getCourse(@RequestHeader("Authorization") String token, @PathVariable long id){
if (authServ.getUserFromToken(token) == null)
return new UnauthorizedResponse<>(null);
return new ResponseEntity<>(courseServ.findById(id), HttpStatus.OK);
}
@PostMapping("/course")
public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token, @RequestBody Course course){
if (authServ.isNotSecretaryOrAdmin(token))
return new UnauthorizedResponse<>(null);
return new ResponseEntity<>(courseServ.save(course), HttpStatus.CREATED);
}
@PatchMapping("/course/{id}")
public ResponseEntity<Course> patchCourse(@RequestHeader("Authorization") String token,
@RequestBody Map<String,Object> updates,
@PathVariable long id)
{
if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token)){
return new UnauthorizedResponse<>(null);
}
return new ResponseEntity<>(courseServ.modifyData(id, updates, authServ.getUserFromToken(token).getRole()), HttpStatus.OK);
}
@PostMapping("/course/{id}")
public ResponseEntity<String> postTeachers(@RequestHeader("Authorization") String token,
@RequestBody Iterable<Long> teacherIds,
@PathVariable Long id)
{
if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
return new UnauthorizedResponse<>(null);
teacherCourseServ.saveAll(teacherIds,courseServ.findById(id));
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -15,7 +15,6 @@ import ovh.herisson.Clyde.Tables.User;
import java.util.Map; import java.util.Map;
@RestController @RestController
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
public class CurriculumController { public class CurriculumController {
@ -44,17 +43,4 @@ public class CurriculumController {
public ResponseEntity<Iterable<CurriculumCourse>> findAll(){ public ResponseEntity<Iterable<CurriculumCourse>> findAll(){
return new ResponseEntity<>(curriculumCourseServ.findAll(),HttpStatus.OK); return new ResponseEntity<>(curriculumCourseServ.findAll(),HttpStatus.OK);
} }
/**@PostMapping("/curriculum") //todo now
public ResponseEntity<String> postCurriculum(@RequestHeader("Authorization") String token,@RequestBody Curriculum curriculum){
if (!isSecretaryOrAdmin(token)){
return new UnauthorizedResponse<>("you're not allowed to post a Curriculum");
}
CurriculumServ.save(Curriculum);
return new ResponseEntity<>("created !",HttpStatus.CREATED);
}**/
} }

View File

@ -47,6 +47,6 @@ public class LoginController {
@PostMapping("/request/register") @PostMapping("/request/register")
public ResponseEntity<String> register(@RequestBody InscriptionRequest inscriptionRequest){ public ResponseEntity<String> register(@RequestBody InscriptionRequest inscriptionRequest){
authServ.register(inscriptionRequest); authServ.register(inscriptionRequest);
return new ResponseEntity<>("Is OK", HttpStatus.CREATED); return new ResponseEntity<>("Is OK", HttpStatus.OK);
} }
} }

View File

@ -68,10 +68,10 @@ public class MockController {
curriculumService.save(psychologyBab1); curriculumService.save(psychologyBab1);
Course progra1 = new Course(5,"Programmation et algorithimque 1",joke); Course progra1 = new Course(5,"Programmation et algorithimque 1","TODO DELETE");
Course chemistry1 = new Course(12, "Thermochimie",joke); Course chemistry1 = new Course(12, "Thermochimie","TODO DELETE");
Course psycho1 = new Course(21, "rien faire t'as cru c'est psycho",joke); Course psycho1 = new Course(21, "rien faire t'as cru c'est psycho", "TODO DELETE");
Course commun = new Course(2, "cours commun",joke); Course commun = new Course(2, "cours commun","TODO DELETE");
courseService.save(progra1); courseService.save(progra1);
courseService.save(chemistry1); courseService.save(chemistry1);

View File

@ -9,8 +9,6 @@ import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Services.UserService; import ovh.herisson.Clyde.Services.UserService;
import ovh.herisson.Clyde.Tables.Role; import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.User; import ovh.herisson.Clyde.Tables.User;
import java.security.Key;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -74,23 +72,6 @@ public class UserController {
return new ResponseEntity<>("data modified", HttpStatus.OK); return new ResponseEntity<>("data modified", HttpStatus.OK);
} }
@GetMapping("/teachers")
public ResponseEntity<Iterable<HashMap<String,Object>>> getAllTeachers(@RequestHeader("Authorization") String token){
if (authServ.getUserFromToken(token) == null)
return new UnauthorizedResponse<>(null);
Iterable<User> teachers = userService.getAllTeachers();
ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
for (User t: teachers){
withoutPassword.add(userWithoutPassword(t));
}
return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
}
/** return user's data except password /** return user's data except password
* @param user the user to return * @param user the user to return
* @return all the user data without the password * @return all the user data without the password

View File

@ -1,8 +0,0 @@
package ovh.herisson.Clyde.Repositories;
import org.springframework.data.repository.CrudRepository;
import ovh.herisson.Clyde.Tables.TeacherCourse;
public interface TeacherCourseRepository extends CrudRepository<TeacherCourse, Long> {
}

View File

@ -15,8 +15,4 @@ public interface UserRepository extends CrudRepository<User, Long> {
/** /**
@Query(value = "select a.* from Users a ",nativeQuery = true) @Query(value = "select a.* from Users a ",nativeQuery = true)
Iterable<User> findAllUsers();**/ Iterable<User> findAllUsers();**/
@Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Teacher")
Iterable<User> findAllTeachers();
} }

View File

@ -50,18 +50,5 @@ public class AuthenticatorService {
return poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin; return poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin;
} }
public boolean IsNotIn(Role[] roles, String token){
if (token == null)
return true;
User poster = getUserFromToken(token);
if (poster == null) return true;
for (Role r:roles){
if (poster.getRole() == r)
return false;
}
return true;
}
} }

View File

@ -3,10 +3,6 @@ package ovh.herisson.Clyde.Services;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ovh.herisson.Clyde.Repositories.CourseRepository; import ovh.herisson.Clyde.Repositories.CourseRepository;
import ovh.herisson.Clyde.Tables.Course; import ovh.herisson.Clyde.Tables.Course;
import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.User;
import java.util.Map;
@Service @Service
public class CourseService { public class CourseService {
@ -17,39 +13,11 @@ public class CourseService {
this.courseRepo = courseRepo; this.courseRepo = courseRepo;
} }
public Course save(Course course){ public void save(Course course){
return courseRepo.save(course); courseRepo.save(course);
} }
public Course findById(long id){ public Course findById(long id){
return courseRepo.findById(id); return courseRepo.findById(id);
} }
public Course modifyData(long id, Map<String, Object> updates, Role role) {
Course target = courseRepo.findById(id);
if (role == Role.Teacher){
for (Map.Entry<String, Object> entry : updates.entrySet()){
if (entry.getKey().equals("title")){
target.setTitle((String) entry.getValue());
return courseRepo.save(target);
}
}
}
for (Map.Entry<String ,Object> entry: updates.entrySet()){
switch (entry.getKey()){
case "title":
target.setTitle((String) entry.getValue());
break;
case "credits":
target.setCredits((Integer) entry.getValue());
break;
case "owner":
target.setOwner((User) entry.getValue()); //todo check if is a teacher !
break;
}
}
return courseRepo.save(target);
}
} }

View File

@ -1,39 +0,0 @@
package ovh.herisson.Clyde.Services;
import org.springframework.stereotype.Controller;
import ovh.herisson.Clyde.Repositories.TeacherCourseRepository;
import ovh.herisson.Clyde.Repositories.UserRepository;
import ovh.herisson.Clyde.Tables.Course;
import ovh.herisson.Clyde.Tables.TeacherCourse;
import ovh.herisson.Clyde.Tables.User;
import java.util.ArrayList;
@Controller
public class TeacherCourseService {
private final TeacherCourseRepository teacherCourseRepo;
private final UserRepository userRepo;
public TeacherCourseService(TeacherCourseRepository teacherCourseRepo, UserRepository userRepo) {
this.teacherCourseRepo = teacherCourseRepo;
this.userRepo = userRepo;
}
public boolean saveAll(Iterable<Long> teacherIds, Course course){
ArrayList<Long> addedIds = new ArrayList<>();
for (Long teacherId : teacherIds){
User teacher = userRepo.findById((long) teacherId);
if ( teacher== null){
return false;
}
if (!addedIds.contains(teacherId))
{
teacherCourseRepo.save(new TeacherCourse(teacher,course));
addedIds.add(teacherId);
}
}
return true;
}
}

View File

@ -103,8 +103,4 @@ public class UserService {
public Iterable<User> getAll(){ public Iterable<User> getAll(){
return userRepo.findAll(); return userRepo.findAll();
} }
public Iterable<User> getAllTeachers (){return userRepo.findAllTeachers();}
} }

View File

@ -1,6 +1,9 @@
package ovh.herisson.Clyde.Tables; package ovh.herisson.Clyde.Tables;
import jakarta.persistence.*; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity @Entity
public class Course { public class Course {
@ -9,15 +12,12 @@ public class Course {
private int courseID; private int courseID;
private int credits; private int credits;
private String title; private String title;
private String faculty;
@ManyToOne(fetch = FetchType.EAGER) public Course(int credits, String title, String faculty){
@JoinColumn(name = "Users")
private User owner;
public Course(int credits, String title, User owner){
this.credits = credits; this.credits = credits;
this.title = title; this.title = title;
this.owner = owner; this.faculty = faculty;
} }
public Course() {} public Course() {}
@ -34,6 +34,14 @@ public class Course {
this.credits = credits; this.credits = credits;
} }
public String getFaculty() {
return faculty;
}
public void setFaculty(String faculty){
this.faculty = faculty;
}
public String getTitle() { public String getTitle() {
return title; return title;
} }
@ -41,12 +49,4 @@ public class Course {
public void setTitle(String title){ public void setTitle(String title){
this.title = title; this.title = title;
} }
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
} }

View File

@ -3,26 +3,30 @@ package ovh.herisson.Clyde.Tables;
import jakarta.persistence.*; import jakarta.persistence.*;
@Entity @Entity
public class TeacherCourse { public class TeacherGivenCourse {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private int id; private int id;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Users") @JoinColumn(name = "Users")
private User user; private User user;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Course") @JoinColumn(name = "Course")
private Course course; private Course course;
public TeacherCourse(User user, Course course){ //This flag helps make the difference between an assistant or a Teacher (who owns the course)
private boolean owned;
public TeacherGivenCourse(User user, Course course, boolean owned){
this.user = user; this.user = user;
this.course = course; this.course = course;
this.owned = owned;
} }
public TeacherCourse() {} public TeacherGivenCourse() {}
public int getId() { public int getId() {
return id; return id;
@ -44,4 +48,11 @@ public class TeacherCourse {
this.course = course; this.course = course;
} }
public boolean isOwned() {
return owned;
}
public void setOwned(boolean owned) {
this.owned = owned;
}
} }

View File

@ -1,10 +1,36 @@
<script setup> <script setup>
import { toast } from 'vue3-toastify'; import { toast } from 'vue3-toastify';
import { ref } from 'vue' import { ref, computed } from 'vue'
import i18n, { setLang } from './i18n.js' import i18n, { setLang } from './i18n.js'
import { isLogged } from '@/rest/Users.js' import { isLogged } from '@/rest/Users.js'
import { appList, currentView } from '@/rest/apps.js'
// Liste des apps
import LoginPage from './Apps/Login.vue'
import Inscription from "./Apps/Inscription.vue"
import Profil from "./Apps/Profil.vue"
import Courses from "./Apps/ManageCourses.vue"
import Students from "./Apps/StudentsList.vue"
import Users from "./Apps/UsersList.vue"
const apps = {
'/login': LoginPage,
'/inscription': Inscription,
'/profil': Profil,
'/manage-courses' : Courses,
'/students' : Students,
'/users' : Users,
}
const currentPath = ref(window.location.hash)
window.addEventListener('hashchange', () => {
Logged.value = isLogged();
currentPath.value = window.location.hash
})
const currentView = computed(() => {
return apps[currentPath.value.slice(1) || '/']
})
const home=ref(i18n("app.home")) const home=ref(i18n("app.home"))
const notifications=ref(i18n("app.notifications")) const notifications=ref(i18n("app.notifications"))
@ -14,9 +40,6 @@
const Logged = ref(isLogged()); const Logged = ref(isLogged());
const apps = ref([])
appList().then(e => apps.value = e)
</script> </script>
<template> <template>
@ -65,13 +88,38 @@
<div class="leftBar"> <div class="leftBar">
<ul class="vertical"> <ul class="vertical">
<li v-for="app in apps"> <li style="margin-top: 25px;" >
<a href="app.path"> <a href="#Messages">
<div class="fa-solid" :class="app.icon" style="font-size: 40px;"></div> <div class="fa-solid fa-comment" style="font-size: 40px;"></div>
<div class="text">{{app.text}}</div> <div class="text">{{i18n("app.messages")}}</div>
</a> </a></li>
</li> <li >
</ul> <a href="#Notifications">
<div class="fa-solid fa-bell" style="font-size: 40px;" ></div>
<div class="text">{{i18n("app.notifications")}}</div>
</a></li>
<li >
<a href="#Schedule">
<div class="fa-solid fa-calendar-days" style="font-size: 40px;"></div>
<div class="text">{{i18n("app.schedules")}}</div>
</a></li>
<li ><a href="#Forum">
<div class="fa-solid fa-envelope" style="font-size: 40px;" ></div>
<div class="text">{{i18n("app.forum")}}</div></a></li>
<li><a href="#/inscription">
<div class="fa-solid fa-users" style="align-self:center;font-size: 40px;"></div>
<div class="text" style="top:0;">{{i18n("app.inscription.requests")}}</div></a></li>
<li><a href="#/manage-courses">
<div class="fa-solid fa-book" style="align-self:center;font-size: 40px;overflow:none;"></div>
<div class="text">{{i18n("app.manage.courses")}}</div></a></li>
<li><a href="#/students">
<div class="fa-solid fa-users-between-lines" style="font-size: 40px"></div>
<div class="text">{{i18n("app.studentList")}}</div></a></li>
<li><a href="#/users">
<div class="fa-solid fa-users" style="font-size: 40px"></div>
<div class="text">{{i18n("app.users")}}</div></a></li>
</ul>
</div> </div>
<div class="page"> <div class="page">
<div style=" margin:50px;"> <div style=" margin:50px;">
@ -241,5 +289,3 @@
} }
</style> </style>
<!-- vim:set noet sts=0 sw=4 ts=2: -->

View File

@ -13,35 +13,20 @@
const unreg = ref(false); const unreg = ref(false);
const reg = ref(false); const reg = ref(false);
const pattern = { const toModify = {
profilPictureUrl:null, profilPictureUrl:null,
email:null, email:null,
adress:null, adress:null,
password:null, password:null,
}; };
const patternInfos ={
email: null,
password: null,
passwordConfirm:null,
id:null,
}
let toModify= Object.assign({}, pattern);
let personnalInfos = Object.assign({}, patternInfos);
function resetInputs(inputs,list){
inputs=Object.assign({},list);
}
function ChangeInfos(){ function ChangeInfos(){
for (const [key, value] in Object.entries(toModify)){ for (const [key, value] in Object.entries(toModify)){
if(value !== null){ if(value !== null){
alterSelf({key:value}); alterSelf({key:value})
} }
} }
toModify= Object.assign({}, pattern);
} }
function getPP(){ function getPP(){
@ -88,23 +73,22 @@
</div> </div>
<div> <div>
E-mail: E-mail:
<input type="mail" v-model="personnalInfos.email" /> <input type="mail" v-model="toModify.email" />
</div> </div>
<div> <div>
{{i18n("profile.address")}}: {{i18n("profile.address")}}:
<input type="text" v-model="personnalInfos.id"> <input type="text" v-model="toModify.address">
</div> </div>
<div> <div>
{{i18n("login.password")}}: {{i18n("login.password")}}:
<input type="password" v-model="personnalInfos.password"> <input type="password" v-model="toModify.password">
</div> </div>
<div> <div>
{{i18n("login.cPassword")}}: {{i18n("login.cPassword")}}:
<input type="password" v-model="personnalInfos.passwordConfirm"> <input type="password" id="confirm">
</div> </div>
<div> <div>
<button @click=" modif=!modif; ChangeInfos();">{{i18n("courses.confirm")}}</button> <button @click=" modif=!modif; ChangeInfos();">{{i18n("courses.confirm")}}</button>
<button @click="modif=!modif; resetInputs(toModify,pattern);console.log(pattern)" style="float:right;">{{i18n("courses.back")}}</button>
</div> </div>
</div> </div>
<div v-else-if="curric" class="infosContainer"> <div v-else-if="curric" class="infosContainer">
@ -129,7 +113,6 @@
<div> <div>
<button @click=" curric=!curric;">{{i18n("courses.confirm")}}</button> <button @click=" curric=!curric;">{{i18n("courses.confirm")}}</button>
<button @click="curric=!curric; resetInputs(personnalInfos,patternInfos);console.log(pattern)" style="float:right;">{{i18n("courses.back")}}</button>
</div> </div>
</div> </div>
<div v-else-if="reg" class="infosContainer"> <div v-else-if="reg" class="infosContainer">
@ -138,8 +121,8 @@
<input type="mail" v-model="toModify.email" /> <input type="mail" v-model="toModify.email" />
</div> </div>
<div> <div>
ID : {{i18n("profile.address")}}:
<input type="text" v-model="toModify.id"> <input type="text" v-model="toModify.address">
</div> </div>
<div> <div>
{{i18n("login.password")}}: {{i18n("login.password")}}:
@ -152,7 +135,6 @@
<div> <div>
<button @click=" reg=!reg;">{{i18n("courses.confirm")}}</button> <button @click=" reg=!reg;">{{i18n("courses.confirm")}}</button>
<button @click=" reg=!reg; resetInputs(personnalInfos,patternInfos);console.log(pattern)" style="float:right;">{{i18n("courses.back")}}</button>
</div> </div>
</div> </div>
<div v-else-if="unreg" class="infosContainer"> <div v-else-if="unreg" class="infosContainer">
@ -175,7 +157,6 @@
<div> <div>
<button @click=" unreg=!unreg;">{{i18n("courses.confirm")}}</button> <button @click=" unreg=!unreg;">{{i18n("courses.confirm")}}</button>
<button @click=" unreg=!unreg; resetInputs(personnalInfos,patternInfos);console.log(pattern)" style="float:right;">{{i18n("courses.back")}}</button>
</div> </div>
</div> </div>

View File

@ -1,60 +1,9 @@
import { restGet } from './restConsumer.js' import { restGet } from './restConsumer.js'
import { ref, computed } from 'vue'
import i18n from '@/i18n.js'
// Liste des apps
import LoginPage from '@/Apps/Login.vue'
import Inscription from "@/Apps/Inscription.vue"
import Profil from "@/Apps/Profil.vue"
import Courses from "@/Apps/ManageCourses.vue"
const apps = {
'/login': LoginPage,
'/inscription': Inscription,
'/profil': Profil,
'/manage-courses' : Courses,
}
const appsList = {
'Msg': { path: '#/msg', icon: 'fa-comment', text: i18n("app.messages") },
'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
'Inscription': { path: '#/inscription', icon: 'fa-users', text: i18n("app.inscription.requests") },
'ManageCourses': { path: '#/manage-courses', icon: 'fa-book', text: i18n("app.manage.courses") },
}
const currentPath = ref(window.location.hash)
export const currentView = computed(() => {
return apps[currentPath.value.slice(1) || '/']
})
/**
* Return the list of app accesible by a logged (or not)
* user.
*/
export async function appList(){ export async function appList(){
let ret = []; return restGet("/apps")
let userAppList = await restGet("/apps");
for (let userapp in userAppList) {
if(appsList[userAppList[userapp]] != null){
ret.push(appsList[userAppList[userapp]])
}
}
return ret;
} }
/**
* Check if the specified page is authorized for the
* user
*/
export async function checkPage(page){ export async function checkPage(page){
return restGet("/apps/" + page) return restGet("/apps/" + page)
} }
window.addEventListener('hashchange', () => {
currentPath.value = window.location.hash
})
// vim:set noet sts=0 sw=4 ts=2 tw=2:

View File

@ -46,6 +46,7 @@ async function _rest(endPoint, config){
pending: config['pending'] != null ? config['pending'] : 'pending', pending: config['pending'] != null ? config['pending'] : 'pending',
error: config['error'] != null ? config['error'] : 'Network Failure...', error: config['error'] != null ? config['error'] : 'Network Failure...',
success: config['success'] != null ? config['success'] : {render(res){ success: config['success'] != null ? config['success'] : {render(res){
console.log(res);
return res.data.ok ? "Success" : "error"; return res.data.ok ? "Success" : "error";
}}, }},
}) })