Skip to content

Commit

Permalink
Merge branch 'working' into dev-channel
Browse files Browse the repository at this point in the history
  • Loading branch information
Truiteseche committed Mar 31, 2024
2 parents b07958c + af85015 commit 4d6d914
Show file tree
Hide file tree
Showing 23 changed files with 776 additions and 169 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ Enjoy the most-requested features and a ton of small but game changer improvemen

## FAQ

- An error of any kind?<br>Please install EDP Unblock from the [Mozilla Add-On Store](https://addons.mozilla.org/en-US/firefox/addon/ecole-directe-plus-unblock/) or the [Chrome Web Store](https://chromewebstore.google.com/detail/ecole-directe-plus-unbloc/jglboadggdgnaicfaejjgmnfhfdnflkb) before reporting a bug or asking for help in the [discord](https://discord.gg/AKAqXfTgvE).
- A release date?<br>When it's ready.
- My data?<br>We don't and will never collect any data about you.
- My data?<br>We don't and will never collect any data about you, more details in our privacy policy.
- Do I need an application?<br>No, you don't. Ecole Directe Plus is a web application therefore you just need a browser, however you can easily install it as an application (check out our tutorial).

## Join us
Expand Down
4 changes: 4 additions & 0 deletions public/images/extension-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
251 changes: 171 additions & 80 deletions src/App.jsx

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions src/components/EdpUnblock/EdpUnblock.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,14 @@ export default function EdpUnblock() {
</Link>
</main>
<div className="edpu-about" ref={aboutRef}>
<h2 className="edpu-about-h2">Pourquoi dois-je installer Ecole Directe Plus Unblock ?</h2>
<p className="edpu-about-explanation">EDP Unblock permet un accès ininterrompu à Ecole Directe Plus en donnant l'accès en continu aux données fournis par l'API d'EcoleDirecte. Cette extension est nécessaire au bon fonctionnement d'Ecole Directe Plus.</p>
<h2 className="edpu-about-h2">Pourquoi ai-je besoin d'installer Ecole Directe Plus Unblock ?</h2>
<p className="edpu-about-explanation">EDP Unblock offre un accès ininterrompu à Ecole Directe Plus en donnant l'accès en continu aux données fournis par l'API d'EcoleDirecte. Cette extension est nécessaire au bon fonctionnement d'Ecole Directe Plus.</p>
<h2 className="edpu-about-h2">Où et comment installer EDP Unblock ?</h2>
<p className="edpu-about-explanation">EDP Unblock est une extension de navigateur, elle est compatible avec les navigateurs basés sur Chromium (Chrome, Edge, Brave, Opera, ...) ainsi que Firefox. En fonction de votre navigateur, la source d'installation diffère. Cliquez sur le bouton "Ajouter l'extension" ci-dessus et vous devriez être redirigé vers la boutique d'extensions compatible avec votre navigateur. Mise en garde : EDP Unblock n'est pas disponible sur toutes les plateformes, notamment sur iOS et iPadOS, ainsi que le navigateur Safari sur MacOS. Si vous êtes sur l'une de ces plateformes, considérez l'usage d'un ordinateur ou d'un appareil android. Toutefois, même sur android, tous les navigateurs ne supportent pas les extensions, considérez alors l'installation des navigateurs KiwiBrowser (basé sur Chromium) ou Firefox.</p>
<h2 className="edpu-about-h2">Vie privée et confidentialité</h2>
<p className="edpu-about-explanation">EDP Unblock est uniquement actif sur les domaines `ecole-directe.plus` ainsi que `ecoledirecte.com`. L'application n'est pas autorisée à accéder aux informations sur n'importe quel autre site. De plus, EDP Unblock ne lit aucune donnée : l'extension sert simplement de passerelle aux requêtes pour "arriver correction à destination", mais n'a pas accès à leur contenu</p>
<p className="edpu-about-explanation">EDP Unblock est exclusivement actif sur les domaines `ecole-directe.plus` ainsi que `ecoledirecte.com`. L'extension ne peut pas accéder aux informations provenant de n'importe quel autre site web. De plus, EDP Unblock ne lit aucune donnée : l'extension sert simplement de passerelle aux requêtes pour "arriver correction à destination", mais n'a pas accès à leur contenu.</p>
<h2 className="edpu-about-h2">Divers</h2>
<p className="edpu-about-explanation">L'extension Ecole Directe Plus Unblock, tout comme le site Ecole Directe Plus, est un projet open-source sous license MIT, vous pouvez donc retrouver le code source en ligne, visitez le <a href="https://github.com/Magic-Fishes/Ecole-Directe-Plus-Unblock">dépôt Github</a>.</p>
<p className="edpu-about-explanation">L'extension Ecole Directe Plus Unblock, tout comme le site Ecole Directe Plus, est un projet open-source sous license MIT, le code source est donc disponible en ligne : <a href="https://github.com/Magic-Fishes/Ecole-Directe-Plus-Unblock">dépôt Github</a>.</p>
</div>
</div>
</>)
Expand Down
8 changes: 8 additions & 0 deletions src/components/Lab/Lab.css
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,11 @@
flex-flow: row wrap;
justify-content: space-evenly;
}


#lab-page .radio-buttons-test {
display: flex;
flex-flow: column nowrap;
gap: 10px;
padding: 10px;
}
16 changes: 16 additions & 0 deletions src/components/Lab/Lab.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import NumberInput from "../generic/UserInputs/NumberInput";
import ProxyErrorNotification from "../Errors/ProxyErrorNotification";

import "./Lab.css";
import RadioButton from "../generic/UserInputs/RadioButton";

export default function Lab({ fetchGrades }) {
const addNotification = useCreateNotification()
Expand Down Expand Up @@ -254,6 +255,21 @@ export default function Lab({ fetchGrades }) {
<Button onClick={() => setDisplayProxyErrorNotification((v) => !v)}>Display ProxyErrorNotification</Button>
{displayProxyErrorNotification && <ProxyErrorNotification />}

<h3>RadioButtons</h3>
<div className="radio-buttons-test">
<RadioButton id="dilemme-cornelien-1" name="dilemme">Choix 1</RadioButton>
<RadioButton id="dilemme-cornelien-2" name="dilemme">Choix 2</RadioButton>
<RadioButton id="dilemme-cornelien-3" name="dilemme">Choix 3</RadioButton>
<RadioButton id="dilemme-cornelien-4" name="dilemme">Choix 4</RadioButton>
<RadioButton id="dilemme-cornelien-5" name="dilemme">Choix 5</RadioButton>
<RadioButton id="dilemme-cornelien-6" name="dilemme">Choix 6</RadioButton>
<RadioButton id="dilemme-cornelien-7" name="dilemme">Choix 7</RadioButton>
<RadioButton id="dilemme-cornelien-8" name="dilemme">Choix 8</RadioButton>
<RadioButton id="dilemme-cornelien-9" name="dilemme">Choix 9</RadioButton>
<RadioButton id="dilemme-cornelien-10" name="dilemme">Choix 10</RadioButton>
<RadioButton id="dilemme-cornelien-11" name="dilemme">Choix 11</RadioButton>
<RadioButton id="dilemme-cornelien-12" name="dilemme">Choix 12</RadioButton>
</div>

{/* FOOTER */}
<div style={{ height: "100px" }}></div>
Expand Down
96 changes: 96 additions & 0 deletions src/components/Login/A2FLogin.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@

#pop-up-background:has(#A2F-login-form) {
max-width: 435px;
/* padding: 25px; */
}

.A2F-login h2 {
font-size: var(--font-size-20);
text-align: center;
padding: 20px;
background-color: rgb(var(--background-color-0), .5);
/* margin-bottom: 20px; */
}

.A2F-login .explanation {
color: rgb(var(--text-color-alt));
padding: 10px 20px;
font-size: var(--font-size-14);
}

.A2F-login #A2F-login-form {
margin-top: 15px;
}

.A2F-login h3 {
font-size: var(--font-size-16);
margin-bottom: 25px;
padding-inline: 20px;
text-align: center;
}

.A2F-login .A2F-answers-container {
display: flex;
flex-flow: column wrap;
gap: 5px 20px;
width: max-content;
align-content: center;
margin-inline: auto;
margin-bottom: 30px;
max-height: 250px;
}

.A2F-login .A2F-content-loader-container {
display: flex;
flex-flow: row nowrap;
align-items: center;
gap: 5px;
}

.A2F-login .A2F-error-message {
margin-inline: 20px;
margin-bottom: 20px;
color: rgb(var(--text-color-error));
text-align: center;
}

.A2F-login .A2F-buttons {
font-size: var(--font-size-13);
padding: 12px;
background-color: rgb(var(--background-color-0), .5);

display: flex;
justify-content: space-around;
gap: 10px;
}

.A2F-login .A2F-buttons > * {
margin: 0;
font-size: var(--font-size-15);
border: none;
border-radius: 10px;
padding: 6px 16px;
border: 2px solid transparent;
}

.A2F-login .A2F-buttons .cancel-A2F {
color: rgb(var(--text-color-alt));
}
.A2F-login .A2F-buttons .cancel-A2F:is(:hover, :focus-visible) {
background-color: transparent;
border-color: rgb(var(--text-color-alt));
}
.A2F-login .A2F-buttons .cancel-A2F:active {
background-color: rgb(var(--text-color-alt), .2);
}

.A2F-login .A2F-buttons .submit-A2F {
background-color: rgb(var(--border-color-0));
}
.A2F-login .A2F-buttons .submit-A2F:is(:hover, :focus-visible) {
filter: brightness(1.15);
}
.A2F-login .A2F-buttons .submit-A2F:active {
filter: brightness(0.9);
}

104 changes: 104 additions & 0 deletions src/components/Login/A2FLogin.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@

import { useState, useEffect } from "react";
import ContentLoader from "react-content-loader";

import "./A2FLogin.css";
import PopUp from "../generic/PopUps/PopUp";
import RadioButton from "../generic/UserInputs/RadioButton";
import { decodeBase64 } from "../../utils/utils";
import Button from "../generic/UserInputs/Button";

export default function A2FLogin({ fetchA2F, ...props }) {
const [A2FForm, setA2FForm] = useState({});
const [isOpen, setIsOpen] = useState(true);
const [choice, setChoice] = useState(null);
const [errorMessage, setErrorMessage] = useState(null);

function callback(response) {
setA2FForm(response.data)
}

useEffect(() => {
const controller = new AbortController();
if (Object.keys(A2FForm).length < 1) {
fetchA2F({ callback: callback, controller: controller });
}

return () => {
controller.abort();
}
}, []);

const handleA2FSubmit = (event) => {
const handleA2FError = (response) => {
if (response.message === null || response.code === 550) {
setErrorMessage("Votre compte EcoleDirecte a peut être été bloqué suite à une réponse incorrecte au défi de sécurité. Consultez vos emails pour les instructions de déblocage.")
} else {
setErrorMessage(response.message)
}
}

event.preventDefault();
fetchA2F({ method: "post", choice: choice, errorCallback: handleA2FError });
}

// JSX
return (
<PopUp className="A2F-login" externalClosing={!isOpen} {...props}>
<h2>Authentification à deux facteurs</h2>
<p className="explanation">Ce formulaire est une mesure de sécurité mise en place par EcoleDirecte afin de vérifier votre identité.</p>
<form id="A2F-login-form" onSubmit={handleA2FSubmit}>
{A2FForm.question ? <h3>{decodeBase64(A2FForm.question)}</h3> : <h3><ContentLoader
// animate={settings.get("displayMode") === "quality"}
speed={1}
// backgroundColor={actualDisplayTheme === "dark" ? "#63638c" : "#9d9dbd"}
// foregroundColor={actualDisplayTheme === "dark" ? "#7e7eb2" : "#bcbce3"}
backgroundColor="#63638c"
foregroundColor="#7e7eb2"
height="25"
width="300"
>
<rect x="0" y="0" rx="10" ry="10" style={{ width: "100%", height: "100%" }} />
</ContentLoader></h3>}
{Object.keys(A2FForm).length > 0
? <div className="A2F-answers-container">
{A2FForm.propositions.map((answer, index) => <RadioButton id={`A2F-login-${index}`} name="A2F-fieldset" key={answer} data-value={answer} onChange={(event) => setChoice(event.target.dataset.value)}>{decodeBase64(answer)}</RadioButton>)}
</div>
: <div className="A2F-answers-container">
{Array.from({ length: 11 }, (_, index) => <div className="A2F-content-loader-container" key={crypto.randomUUID()}>
<ContentLoader
// animate={settings.get("displayMode") === "quality"}
speed={1}
// backgroundColor={actualDisplayTheme === "dark" ? "#63638c" : "#9d9dbd"}
// foregroundColor={actualDisplayTheme === "dark" ? "#7e7eb2" : "#bcbce3"}
backgroundColor="#63638c"
foregroundColor="#7e7eb2"
height="20"
width="20"
>
<rect x="0" y="0" rx="10" ry="10" style={{ width: "100%", height: "100%" }} />
</ContentLoader>
<ContentLoader
// animate={settings.get("displayMode") === "quality"}
speed={1}
// backgroundColor={'#4b48d9'}
// foregroundColor={'#6354ff'}
backgroundColor="#63638c"
foregroundColor="#7e7eb2"
height="25"
width="100"
>
<rect x="0" y="0" rx="10" ry="10" style={{ width: "100%", height: "100%" }} />
</ContentLoader>
</div>)}
</div>
}
<p className="A2F-error-message">{errorMessage}</p>
<div className="A2F-buttons">
<Button className="cancel-A2F" onClick={() => setIsOpen(false)}>Annuler</Button>
<Button className="submit-A2F" type="submit">Valider</Button>
</div>
</form>
</PopUp>
);
}
74 changes: 72 additions & 2 deletions src/components/Login/Login.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,77 @@

#proxy-error-notification.temp-disclaimer {
#edp-unblock-ad {
position: fixed;
top: 15px;
left: 50%;
transform: translate(-50%, calc(-100% - 10px));

padding: 10px;
text-align: center;
width: 95%;
max-width: 750px;
max-width: 900px;

border: 2px solid rgb(var(--text-color-alt));
border-radius: 10px;

animation: edp-unblock-ad-pop-in .3s var(--timing-function-spring-effect) forwards;
transition: border-color .1s, background-color .1s;
cursor: pointer;
text-decoration: none;
outline: none;
z-index: 50;

display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
}

.dark #edp-unblock-ad {
background-color: rgba(var(--text-color-alt), .2);
backdrop-filter: blur(8px) brightness(.5);
}
.light #edp-unblock-ad {
background-color: rgba(var(--background-color-1));
}

#edp-unblock-ad:is(:hover, :focus-visible) {
background-color: rgb(var(--background-color-0));
border-color: rgba(var(--text-color-main), .9);
}
#edp-unblock-ad:active {
opacity: .8;
}

#edp-unblock-ad .extension-icon {
height: 35px;
fill: rgb(var(--text-color-alt));
transition: .1s;
}

#edp-unblock-ad:is(:hover, :focus-visible) .extension-icon {
fill: rgba(var(--text-color-main), .9);
}

#edp-unblock-ad span {
flex: 1;
color: rgb(var(--text-color-alt));
transition: .1s;
}
#edp-unblock-ad a {
color: rgb(var(--text-color-alt));
transition: .1s;
}
#edp-unblock-ad:is(:hover, :focus-visible) :is(span, a) {
color: rgba(var(--text-color-main), .9);
}

@keyframes edp-unblock-ad-pop-in {
from {
transform: translate(-50%, calc(-100% - 15px));
}
to {
transform: translate(-50%, 0);
}
}

.login-logo {
Expand Down
Loading

0 comments on commit 4d6d914

Please sign in to comment.