Skip to content
Snippets Groups Projects
Commit 5a877418 authored by Quentin Bramas's avatar Quentin Bramas
Browse files

fixes #7 and some connexion issues

parent 3363aa3c
Branches
Tags v0.5
No related merge requests found
Pipeline #335282 passed with stages
in 4 minutes and 43 seconds
......@@ -104,7 +104,7 @@ for i in range(2, len(sys.argv)):
elif sys.argv[i] == '--help':
print(full_help)
exit(0)
elif sys.argv[i].startswith('--'):
elif sys.argv[i].startswith('--') and sys.argv[i] not in ['--url-to', '--front-end-url']:
print('Invalid option: '+sys.argv[i], file=sys.stderr)
exit(1)
......
import { h } from 'hyperapp'
const FromStorage = () => (state,actions) => {
if(!localStorage.getItem('adminKey')) {
return '';
}
const adminKey = localStorage.getItem('adminKey');
const classKey = localStorage.getItem('classKey');
return <button type="button" class="btn btn-secondary" onclick={() => actions.connect({adminKey, classKey})}>Ouvrir le dernier QCM</button>
const FromStorage = () => (state, actions) => {
if (!localStorage.getItem('adminKey')) {
return '';
}
const adminKey = localStorage.getItem('adminKey');
const classKey = localStorage.getItem('classKey');
return <button type="button" class="btn btn-secondary" onclick={() => actions.connect({ adminKey, classKey })}>Ouvrir le dernier QCM</button>
}
export default () => (state,actions) => <div class="container" style={{maxWidth:'700px'}}>
<div class="row">
<div class="col">
<div class="my-3 p-3 bg-white rounded shadow-sm text-center">
<div class="form-group">
<label for='classKeyInput'>ID du questionnaire</label>
<input
type="text"
maxlength="5"
style={{width:'7em', margin:'auto'}}
class={'form-control form-control-lg'+(state.joinError === 'UNKNOWN_CLASS_ID'?' is-invalid':'')}
id='classKeyInput'
value={state.classKeyInput}
onkeyup={(e) => actions.setClassKeyInput(e.target.value)}/>
{state.joinError === 'UNKNOWN_CLASS_ID' && <div class="invalid-feedback">
ID inconnu
</div>
}
</div>
<div class="form-group">
<label for='classKeyInput'>Clé Admin</label>
<input
maxlength="12"
style={{width:'14em', margin:'auto'}}
placeholder='optionnel'
type="text"
class={'form-control form-control-sm'+(state.joinError === 'UNKNOWN_ADMIN_KEY'?' is-invalid':'')}
id='classKeyInput'
value={state.adminKeyInput}
onkeyup={(e) => actions.setAdminKeyInput(e.target.value)}/>
{state.joinError === 'UNKNOWN_ADMIN_KEY' && <div class="invalid-feedback">
Clé inconnue
</div>
}
</div>
<div class="form-group">
<button type="button" class="btn btn-primary" onclick={actions.connect}>Ouvrir</button>
{' '}<FromStorage />
export default () => (state, actions) => <div class="container" style={{ maxWidth: '700px' }}>
<div class="row">
<div class="col">
<div class="my-3 p-3 bg-white rounded shadow-sm text-center">
<div class="form-group">
<label for='classKeyInput'>ID du questionnaire</label>
<input
type="text"
maxlength="5"
style={{ width: '7em', margin: 'auto' }}
class={'form-control form-control-lg' + (state.joinError === 'UNKNOWN_CLASS_ID' ? ' is-invalid' : '')}
id='classKeyInput'
value={state.classKeyInput}
onkeyup={(e) => actions.setClassKeyInput(e.target.value)} />
{state.joinError === 'UNKNOWN_CLASS_ID' && <div class="invalid-feedback">
ID inconnu
</div>
}
</div>
{state.showJwtInput && !state.connectedAs &&
<div class="form-group">
<label for='JwtInput'>Clé de connexion</label>
<input
type="text"
maxlength="255"
style={{ width: '7em', margin: 'auto' }}
class={'form-control form-control-lg' + (state.joinError === 'WRONG_JWT' ? ' is-invalid' : '')}
id='JwtInput'
value={state.jwtInput}
onkeyup={(e) => actions.setJwtInput(e.target.value)} />
{state.joinError === 'WRONG_JWT' && <div class="invalid-feedback">
Clé inconnue
</div>
<hr class="my-4" />
<div class="form-group">
<button type="button" class="btn btn-secondary" onclick={actions.create}>Créer</button>
}
</div>
}
{state.showAdminKey &&
<div class="form-group">
<label for='classKeyInput'>Clé Admin</label>
<input
maxlength="12"
style={{ width: '14em', margin: 'auto' }}
placeholder='optionnel'
type="text"
class={'form-control form-control-sm' + (state.joinError === 'UNKNOWN_ADMIN_KEY' ? ' is-invalid' : '')}
id='classKeyInput'
value={state.adminKeyInput}
onkeyup={(e) => actions.setAdminKeyInput(e.target.value)} />
{state.joinError === 'UNKNOWN_ADMIN_KEY' && <div class="invalid-feedback">
Clé inconnue
</div>
}
</div>
}
<div class="form-group">
<button type="button" class="btn btn-primary" onclick={actions.connect}>Ouvrir</button>
{' '}<FromStorage />
</div>
<hr class="my-4" />
{state.showCreate &&
<div class="form-group">
<button type="button" class="btn btn-secondary" onclick={actions.create}>Créer</button>
</div>
}
</div>
</div>
\ No newline at end of file
</div>
</div>
</div>
......@@ -42,7 +42,7 @@ const PrintDeadline = ({ deadline }) => {
export default () => (state, actions) => {
if (state.classKey === null) {
if (!state.connectedToClass) {
return <ClassForm />
}
if (state.ejected) {
......
......@@ -52,6 +52,9 @@ if (casRedirect) {
const customPages = ['me', 'login-mail']
const state = {
showCreate: false,
showJwtInput: true,
showAdminKey: false,
connectedToClass: false,
previewSlideId: -1,
ejected: false,
......@@ -77,6 +80,7 @@ const state = {
classKey,
classKeyInput: '',
adminKeyInput: '',
jwtInput: '',
mailInput: '',
showAnswers: false,
allAnswers: {},
......@@ -372,12 +376,23 @@ const actions = {
}
return { answer: value, confirmed: state.confirmed && value === state.answer }
},
connect: ({ classKey, adminKey, jwtToken }) => (state, actions) => {
connect: ({ classKey, adminKey }) => (state, actions) => {
if (!state.connectedAs && state.jwtInput) {
jwtToken = state.jwtInput;
socket.emit('verify', jwtToken);
connectionState = "VERIFYING";
return {
classKey: classKey || state.classKeyInput,
adminKey: adminKey || state.adminKeyInput,
}
}
console.log('connect to class', state.classKeyInput)
socket.emit('connectToClass', {
classKey: classKey || state.classKeyInput,
adminKey: adminKey || state.adminKeyInput,
jwtToken
jwtToken: jwtToken || state.jwtInput,
});
},
create: () => (state, actions) => {
......@@ -434,6 +449,7 @@ const actions = {
},
setClassKeyInput: classKeyInput => ({ classKeyInput }),
setAdminKeyInput: adminKeyInput => ({ adminKeyInput }),
setJwtInput: jwtInput => ({ jwtInput }),
setMailInput: mailInput => ({ mailInput }),
showAnswers: () => ({ showAnswers: true }),
hideAnswers: () => ({ showAnswers: false }),
......
......@@ -292,6 +292,11 @@ io.on('connection', function (socket) {
});
socket.on('verify', async jwtToken => {
if (!(typeof jwtToken === 'string' || jwtToken instanceof String)) {
Log.error(socket, { type: 'jwt is not a string' })
return;
}
if (jwtToken.indexOf(':') !== -1) {
const [username, token] = jwtToken.split(':');
// this is not a jwt token but a user token
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment