Merge pull request 'show apps by role' (#131) from tonitch/front/apps into master
Reviewed-on: PGL/Clyde#131 Reviewed-by: Wal <karpinskiwal@gmail.com> Reviewed-by: Maxime <231026@umons.ac.be>
This commit is contained in:
		| @ -2,6 +2,7 @@ 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; | ||||||
| @ -9,10 +10,12 @@ 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; | ||||||
| @ -41,12 +44,17 @@ 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); | ||||||
|  | |||||||
| @ -1,32 +1,10 @@ | |||||||
| <script setup> | <script setup> | ||||||
|   import { toast } from 'vue3-toastify'; |   import { toast } from 'vue3-toastify'; | ||||||
|   import { ref, computed } from 'vue' |   import { ref } 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"  |  | ||||||
|  |  | ||||||
|   const apps = { |  | ||||||
|   	'/login': LoginPage, |  | ||||||
| 	'/inscription': Inscription, |  | ||||||
|   '/profil': Profil, |  | ||||||
|   '/manage-courses' : Courses, |  | ||||||
|   } |  | ||||||
|   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")) | ||||||
| @ -36,6 +14,9 @@ | |||||||
|  |  | ||||||
|   const Logged = ref(isLogged()); |   const Logged = ref(isLogged()); | ||||||
|  |  | ||||||
|  | 	const apps = ref([]) | ||||||
|  | 	appList().then(e => apps.value = e) | ||||||
|  |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
| @ -84,31 +65,12 @@ | |||||||
|  |  | ||||||
|     <div class="leftBar"> |     <div class="leftBar"> | ||||||
|     <ul class="vertical"> |     <ul class="vertical"> | ||||||
|         <li style="margin-top: 25px;" > |         <li v-for="app in apps"> | ||||||
|           <a href="#Messages"> | 						<a href="app.path"> | ||||||
|             <div class="fa-solid fa-comment" style="font-size: 40px;"></div> |             <div class="fa-solid" :class="app.icon" style="font-size: 40px;"></div> | ||||||
|             <div class="text">{{i18n("app.messages")}}</div> |             <div class="text">{{app.text}}</div> | ||||||
|           </a></li> | 						</a> | ||||||
|         <li > | 				</li> | ||||||
|           <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> |  | ||||||
|     </ul> |     </ul> | ||||||
|  |  | ||||||
|     </div> |     </div> | ||||||
| @ -277,3 +239,5 @@ | |||||||
| 	  } | 	  } | ||||||
|      |      | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | <!-- vim:set noet sts=0 sw=4 ts=2: -->  | ||||||
|  | |||||||
| @ -1,9 +1,60 @@ | |||||||
| 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(){ | ||||||
| 	return restGet("/apps") | 		let ret = []; | ||||||
|  | 		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: | ||||||
|  | |||||||
| @ -46,7 +46,6 @@ 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"; | ||||||
| 			}}, | 			}}, | ||||||
| 		}) | 		}) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user