2021-11-18 11:12:28 +00:00
|
|
|
|
<script context="module">
|
|
|
|
|
import { user } from '../stores/user';
|
|
|
|
|
let stop_refresh = false;
|
|
|
|
|
|
|
|
|
|
let refresh_interval_auth = null;
|
|
|
|
|
async function refresh_auth(cb=null, interval=null) {
|
|
|
|
|
if (refresh_interval_auth)
|
|
|
|
|
clearInterval(refresh_interval_auth);
|
|
|
|
|
if (interval === null) {
|
|
|
|
|
interval = Math.floor(Math.random() * 200000) + 200000;
|
|
|
|
|
}
|
|
|
|
|
if (stop_refresh) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
refresh_interval_auth = setInterval(refresh_auth, interval);
|
|
|
|
|
|
|
|
|
|
const res = await fetch('api/auth', {headers: {'Accept': 'application/json'}})
|
|
|
|
|
if (res.status == 200) {
|
|
|
|
|
const auth = await res.json();
|
|
|
|
|
user.set(auth);
|
|
|
|
|
} else {
|
|
|
|
|
user.set(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function load({ props, stuff, url }) {
|
|
|
|
|
refresh_auth();
|
|
|
|
|
|
|
|
|
|
const rroutes = url.pathname.split('/');
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
props: {
|
|
|
|
|
...props,
|
|
|
|
|
rroute: rroutes.length>1?rroutes[1]:'',
|
|
|
|
|
},
|
|
|
|
|
stuff: {
|
|
|
|
|
...stuff,
|
|
|
|
|
refresh_auth,
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<script>
|
2022-05-15 10:34:19 +00:00
|
|
|
|
import AuthButton from '../components/AuthButton.svelte';
|
2022-03-01 12:16:20 +00:00
|
|
|
|
import Toaster from '../components/Toaster.svelte';
|
|
|
|
|
|
2021-11-18 11:12:28 +00:00
|
|
|
|
export let rroute = '';
|
|
|
|
|
|
|
|
|
|
function switchAdminMode() {
|
|
|
|
|
var tmp = $user.is_admin;
|
|
|
|
|
$user.is_admin = $user.was_admin || false;
|
|
|
|
|
$user.was_admin = tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function disconnectCurrentUser() {
|
|
|
|
|
fetch('api/auth/logout', {
|
|
|
|
|
method: 'POST'
|
|
|
|
|
}).then((response) => {
|
|
|
|
|
refresh_auth();
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-08-02 09:59:53 +00:00
|
|
|
|
|
|
|
|
|
let isSRS = false;
|
|
|
|
|
$: {
|
|
|
|
|
isSRS = window.location.host === 'srs.nemunai.re' || ($user && ($user.groups.includes('ing-srs') || $user.groups.includes('teachers')))
|
|
|
|
|
}
|
2021-11-18 11:12:28 +00:00
|
|
|
|
</script>
|
|
|
|
|
|
2022-02-28 09:52:27 +00:00
|
|
|
|
<svelte:head>
|
2022-08-02 09:59:53 +00:00
|
|
|
|
<title>ЕРІТА: MCQ and others courses related stuff</title>
|
2022-02-28 09:52:27 +00:00
|
|
|
|
</svelte:head>
|
|
|
|
|
|
2022-08-02 09:59:53 +00:00
|
|
|
|
{#if isSRS}
|
|
|
|
|
<div style="position: fixed; bottom: 20px; right: 20px; z-index: -1; background-image: url('img/srstamps.png'); background-size: cover; width: 125px; height: 125px;"></div>
|
|
|
|
|
{/if}
|
2021-11-18 11:12:28 +00:00
|
|
|
|
<nav class="navbar navbar-expand-sm navbar-dark bg-primary">
|
|
|
|
|
<div class="container">
|
|
|
|
|
<a class="navbar-brand" href=".">
|
2022-08-02 09:59:53 +00:00
|
|
|
|
ЕРІТА
|
2021-11-18 11:12:28 +00:00
|
|
|
|
</a>
|
2022-03-02 03:31:08 +00:00
|
|
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#loggedMenu" aria-controls="loggedMenu" aria-expanded="false" aria-label="Toggle navigation">
|
|
|
|
|
<span class="navbar-toggler-icon"></span>
|
2021-11-18 11:12:28 +00:00
|
|
|
|
</button>
|
|
|
|
|
|
|
|
|
|
<div class="collapse navbar-collapse" id="loggedMenu">
|
|
|
|
|
<ul class="navbar-nav mr-auto">
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" href="adlin" target="_self">AdLin</a>
|
|
|
|
|
</li>
|
2022-08-02 09:59:53 +00:00
|
|
|
|
{#if isSRS}
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" href="fic" target="_self">FIC</a>
|
|
|
|
|
</li>
|
|
|
|
|
{/if}
|
2021-11-18 11:12:28 +00:00
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" class:active={rroute === 'surveys'} href="surveys">
|
|
|
|
|
Questionnaires
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
2022-09-04 19:44:20 +00:00
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" class:active={rroute === 'works'} href="works">
|
|
|
|
|
Travaux
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
2021-11-18 11:12:28 +00:00
|
|
|
|
{#if $user && $user.is_admin}
|
|
|
|
|
<li class="nav-item"><a class="nav-link" class:active={rroute === 'users'} href="users">Étudiants</a></li>
|
|
|
|
|
{/if}
|
|
|
|
|
<li class="nav-item"><a class="nav-link" href="virli" target="_self">VIRLI</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<ul class="navbar-nav ms-auto">
|
|
|
|
|
{#if $user}
|
|
|
|
|
{#if $user.was_admin}
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<button class="btn btn-dark" on:click={switchAdminMode}>
|
|
|
|
|
Vue admin
|
|
|
|
|
</button>
|
|
|
|
|
</li>
|
|
|
|
|
{:else if $user.is_admin}
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<button class="btn btn-light" on:click={switchAdminMode}>
|
|
|
|
|
Vue étudiant
|
|
|
|
|
</button>
|
|
|
|
|
</li>
|
|
|
|
|
{/if}
|
|
|
|
|
<li class="nav-item dropdown">
|
|
|
|
|
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">
|
2022-03-02 00:35:47 +00:00
|
|
|
|
<img class="rounded-circle" src="//photos.cri.epita.fr/square/{$user.login}" alt="Menu" style="margin: -0.75em 0; max-height: 2.5em; border: 2px solid white;">
|
2021-11-18 11:12:28 +00:00
|
|
|
|
</a>
|
|
|
|
|
<ul class="dropdown-menu dropdown-menu-end">
|
2022-09-03 14:16:41 +00:00
|
|
|
|
<li><a class="dropdown-item" class:active={rroute === 'keys'} href="keys">Clef PGP</a></li>
|
2021-11-18 11:12:28 +00:00
|
|
|
|
<li><a class="dropdown-item" class:active={rroute === 'help'} href="help">Besoin d'aide ?</a></li>
|
|
|
|
|
<li><a class="dropdown-item" class:active={rroute === 'bug-bounty'} href="bug-bounty">Bug Bounty</a></li>
|
|
|
|
|
<li><hr class="dropdown-divider"></li>
|
|
|
|
|
<li>
|
|
|
|
|
<button class="dropdown-item" on:click={disconnectCurrentUser}>
|
|
|
|
|
Se déconnecter
|
|
|
|
|
</button>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
{:else if $user === undefined}
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
|
|
|
|
|
</li>
|
|
|
|
|
{:else}
|
|
|
|
|
<li class="nav-item">
|
2022-05-15 10:34:19 +00:00
|
|
|
|
<AuthButton class="btn btn-dark">
|
|
|
|
|
Se connecter
|
|
|
|
|
</AuthButton>
|
2021-11-18 11:12:28 +00:00
|
|
|
|
</li>
|
|
|
|
|
{/if}
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
|
|
<div class="container mt-3">
|
|
|
|
|
<slot></slot>
|
|
|
|
|
</div>
|
2022-03-01 12:16:20 +00:00
|
|
|
|
|
|
|
|
|
<Toaster />
|