Merge branch 'master' into wal/frontend/Register
This commit is contained in:
		@ -1,22 +1,27 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { login , register} from './rest/Users.js'
 | 
			
		||||
  import { ref } from 'vue'
 | 
			
		||||
  import i18n from './i18n.js'
 | 
			
		||||
  const login= ref(true)
 | 
			
		||||
  const loginPage= ref(true)
 | 
			
		||||
  const page = ref(0)
 | 
			
		||||
 | 
			
		||||
  const emailID=ref("")
 | 
			
		||||
  const passwordIN=ref("")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  const submitValue= ref(i18n("login.guest.submit"))
 | 
			
		||||
  const surname=ref("")
 | 
			
		||||
  const firstname=ref("")
 | 
			
		||||
  const passwordOUT=ref("")
 | 
			
		||||
  const passwordConfirm=ref("")
 | 
			
		||||
  const birthday=ref("")
 | 
			
		||||
  const emailOUT=ref("")
 | 
			
		||||
  const address=ref("")
 | 
			
		||||
  const country=ref("")
 | 
			
		||||
  const cursus=ref("")
 | 
			
		||||
  const loginInfos = [{_emailID:emailID},{_passwordIN:passwordIN}]
 | 
			
		||||
  const registerInfos= [{_surname:surname},{_firstname:firstname},{_passwordOUT:passwordOUT},{_passwordConfirm:passwordConfirm},{_emailOUT:emailOUT},{_address:address},{_country:country},{_cursus:cursus}]
 | 
			
		||||
  const registerInfos= [{_surname:surname},{_firstname:firstname},{_birthday:birthday},{_passwordOUT:passwordOUT},
 | 
			
		||||
  {_passwordConfirm:passwordConfirm},{_emailOUT:emailOUT},{_address:address},{_country:country},{_cursus:cursus}]
 | 
			
		||||
 
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
@ -30,32 +35,34 @@
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="logBoxCenterer">
 | 
			
		||||
      <div class='loginBox'>
 | 
			
		||||
      
 | 
			
		||||
        <div v-if="login">
 | 
			
		||||
          <div class="form">
 | 
			
		||||
            <h1 style="color:rgb(239,60,168); font-family: sans-serif;">{{i18n("login.guest.signin")}}</h1>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <p>ID / {{i18n("login.guest.email")}}</p> 
 | 
			
		||||
                <input type="text" v-model="emailID">
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <p>{{i18n("login.guest.password")}}</p>
 | 
			
		||||
                <input type="password" v-model="passwordIN">
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="register">
 | 
			
		||||
                <a @click="login=!login">{{i18n("login.guest.register")}}</a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <button @click="console.log(inputs)">{{i18n("login.guest.submit")}}</button>
 | 
			
		||||
 | 
			
		||||
              </div>
 | 
			
		||||
        <div v-if="loginPage">
 | 
			
		||||
          <form @submit.prevent="login(emailID, passwordIN)"class="form">
 | 
			
		||||
            <h1 style="color:rgb(239,60,168); font-family: sans-serif;">
 | 
			
		||||
              {{i18n("login.guest.signin")}}
 | 
			
		||||
            </h1>
 | 
			
		||||
            <div class="inputBox">
 | 
			
		||||
              <p>ID / {{i18n("login.guest.email")}}</p> 
 | 
			
		||||
              <input type="text" v-model="emailID">
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div v-else>
 | 
			
		||||
            <div class="form">
 | 
			
		||||
            <h1 style="color:rgb(239,60,168); font-family: sans-serif; text-align:center;">{{i18n("login.guest.welcome")}}</h1>
 | 
			
		||||
            <div class="inputBox">
 | 
			
		||||
              <p>{{i18n("login.guest.password")}}</p>
 | 
			
		||||
              <input type="password" v-model="passwordIN">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="register">
 | 
			
		||||
              <a @click="loginPage=!loginPage">{{i18n("login.guest.register")}}</a>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="inputBox">
 | 
			
		||||
              <input type="submit" v-model="submitValue">
 | 
			
		||||
            </div>
 | 
			
		||||
          </form>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div v-else>
 | 
			
		||||
          <form @submit.prevent="register(surname,firstname,emailOUT)" class="form">
 | 
			
		||||
            <h1 style="color:rgb(239,60,168); font-family: sans-serif; text-align:center;">
 | 
			
		||||
              {{i18n("login.guest.welcome")}}
 | 
			
		||||
            </h1>
 | 
			
		||||
            <div v-if="page === 0">
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <p>{{i18n("login.guest.surname")}}</p>
 | 
			
		||||
@ -65,6 +72,10 @@
 | 
			
		||||
                <p>{{i18n("login.guest.firstname")}}</p>
 | 
			
		||||
                <input type="text" v-model="firstname">
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <p>BIRTHDAY</p>
 | 
			
		||||
                <input type="date" v-model="birthday">
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                 <p>{{i18n("login.guest.password")}}</p>
 | 
			
		||||
                 <input type="password" v-model="passwordOUT">
 | 
			
		||||
@ -78,7 +89,7 @@
 | 
			
		||||
                <button @click="page++">{{i18n("login.guest.nextpage")}}</button>
 | 
			
		||||
 | 
			
		||||
              </div>
 | 
			
		||||
              <div @click="(login=!login) && (page=0)" class="register">
 | 
			
		||||
              <div @click="(loginPage=!loginPage) && (page=0)" class="register">
 | 
			
		||||
                <a>{{i18n("login.guest.alregister")}}</a>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -96,7 +107,7 @@
 | 
			
		||||
                <input type="text" v-model="country">
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="inputBox">
 | 
			
		||||
                <p>Cursus</p> 
 | 
			
		||||
                <p>CURSUS</p> 
 | 
			
		||||
                  <select v-model="cursus">
 | 
			
		||||
                    <option value="Chemistry">Chemistry</option>
 | 
			
		||||
                    <option value="Psycho">Psychology</option>
 | 
			
		||||
@ -109,14 +120,14 @@
 | 
			
		||||
              <div  class="switchpage">
 | 
			
		||||
                <button @click="page--">{{i18n("login.guest.lastpage")}}</button>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div  @click="(login=!login) && (page=0)" class="register">
 | 
			
		||||
              <div  @click="(loginPage=!loginPage) && (page=0)" class="register">
 | 
			
		||||
                <a>{{i18n("login.guest.alregister")}}</a>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          </form>
 | 
			
		||||
         </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </body>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@ -214,7 +225,7 @@
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
button,select{
 | 
			
		||||
input[type=submit],button,select{
 | 
			
		||||
  margin-bottom:20px;
 | 
			
		||||
  background-color: rgb(239,60,168);
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
@ -231,4 +242,5 @@ button:active ,.switchpage:active{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import { getCookie } from './utils.js';
 | 
			
		||||
import { getCookie, setCookie } from './utils.js';
 | 
			
		||||
 | 
			
		||||
const default_lang = "EN";
 | 
			
		||||
let langs;
 | 
			
		||||
@ -34,10 +34,6 @@ export default function i18n(key, options) {
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Those functions are utility functions use by previous exported functions.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Function that load the file with translation from the specified lang and return a dictionnary
 | 
			
		||||
 * @param select the language to load. could be null to fetch the cookies for an answer
 | 
			
		||||
@ -61,3 +57,8 @@ export async function loadLangs(lang){
 | 
			
		||||
	langs = filteredLines;
 | 
			
		||||
}
 | 
			
		||||
await loadLangs();
 | 
			
		||||
 | 
			
		||||
export async function setLang(lang){
 | 
			
		||||
	setCookie("lang", lang);
 | 
			
		||||
	await loadLangs();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								frontend/src/rest/Users.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								frontend/src/rest/Users.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
import { restGet, restPost } from './restConsumer.js'
 | 
			
		||||
 | 
			
		||||
export async function login(user, pass, exp){
 | 
			
		||||
	return restPost("/login", {login: user, password: pass, expiration: exp});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function register(user, pass, mail){
 | 
			
		||||
	return restPost("/user", {name: user, password: pass, mail: mail});
 | 
			
		||||
	restPost("/login", {login: user, password: pass, expiration: exp})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * get informations on a specific user.
 | 
			
		||||
 * Leaving the id empty will return the user's value based on his token
 | 
			
		||||
 * if the user is not authenticated. then an empty array should be returned
 | 
			
		||||
 */
 | 
			
		||||
export async function getUser(id){
 | 
			
		||||
	const endpoint = "/user" + id != null ? "/" + id : "";
 | 
			
		||||
	return restGet(endpoint);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Reserved for secretary roles. Allow to list all user on the plateform
 | 
			
		||||
 */
 | 
			
		||||
export async function getAllUsers(){
 | 
			
		||||
	return restGet("/users");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								frontend/src/rest/courses.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								frontend/src/rest/courses.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Courses API
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import { restGet, restPost, restDelete, restPatch } from './restConsumer.js'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Create a new course
 | 
			
		||||
 */
 | 
			
		||||
export async function createCourse(name, credits, faculty, teacher, assistants){
 | 
			
		||||
	return restPost("/courses", {name: name, credits: credits, faculty: faculty, teacher: teacher, assistants: assistants} )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Delete the specified course
 | 
			
		||||
 */
 | 
			
		||||
export async function deleteCourse(id){
 | 
			
		||||
	return restDelete("/course/" + id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get informations on a particular course
 | 
			
		||||
 *
 | 
			
		||||
 * @param id identification of the course
 | 
			
		||||
 *
 | 
			
		||||
 * @return all atribute of the specified course
 | 
			
		||||
 *  - name
 | 
			
		||||
 *  - credits
 | 
			
		||||
 *  - faculty
 | 
			
		||||
 *  - teacher
 | 
			
		||||
 *  - assistants : list
 | 
			
		||||
 */
 | 
			
		||||
export async function getCourse(id){
 | 
			
		||||
	return restGet("/course/" + id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Change the options of a course
 | 
			
		||||
 *
 | 
			
		||||
 * @param id the id of the course
 | 
			
		||||
 * @param changes Object with value to changes
 | 
			
		||||
 *
 | 
			
		||||
 * The changes object can contain:
 | 
			
		||||
 *  - name
 | 
			
		||||
 *  - credits
 | 
			
		||||
 *  - faculty
 | 
			
		||||
 *  - teacher
 | 
			
		||||
 *  - assistants: should be a list and will replace all assistants
 | 
			
		||||
 */
 | 
			
		||||
export async function alterCourse(id, changes){
 | 
			
		||||
	return restPatch("/course/" + id, changes);
 | 
			
		||||
}
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 * Return the content of a cookie with specified key
 | 
			
		||||
 * @param key cookie name
 | 
			
		||||
 */
 | 
			
		||||
function getCookie(key){
 | 
			
		||||
export function getCookie(key){
 | 
			
		||||
	key = key + "="
 | 
			
		||||
	let cookies = decodeURIComponent(document.cookie).split(";");
 | 
			
		||||
	for (let el of cookies) {
 | 
			
		||||
@ -14,4 +14,12 @@ function getCookie(key){
 | 
			
		||||
	return "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export {getCookie};
 | 
			
		||||
/**
 | 
			
		||||
 * Return the content of a cookie with specified key
 | 
			
		||||
 * @param key cookie name
 | 
			
		||||
 */
 | 
			
		||||
export function setCookie(key, value){
 | 
			
		||||
	cookie = key + "=" + value + ";";
 | 
			
		||||
	document.cookie = cookie;
 | 
			
		||||
	// Here we can apreciate the stupidity of Javascript :/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user