Skip to content
This repository has been archived by the owner on Jan 3, 2024. It is now read-only.

Commit

Permalink
cli: recode using yargs
Browse files Browse the repository at this point in the history
  • Loading branch information
maelgangloff committed Jun 4, 2021
1 parent 02b9034 commit 0f9d404
Show file tree
Hide file tree
Showing 43 changed files with 930 additions and 886 deletions.
120 changes: 12 additions & 108 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,103 +1,11 @@
## Classes

<dl>
<dt><a href="#Kdecole">Kdecole</a></dt>
<dd><p>Support non-officiel de l&#39;API Kdecole (Mon Bureau Numérique, Skolengo, etc.)</p>
<p>L&#39;accès à l&#39;API requiert une en-tête avec la version de l&#39;application en cours d&#39;utilisation.
Les versions à utiliser lors de la création de l&#39;instance <code>Kdecole</code> sont données ci-dessous.</p>
<table>
<thead>
<tr>
<th align="center">Nom de l&#39;ENT</th>
<th align="center">Version</th>
<th>URL de l&#39;API</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Mon Bureau Numérique</td>
<td align="center">3.4.14</td>
<td><a href="https://mobilite.monbureaunumerique.fr/mobilite">https://mobilite.monbureaunumerique.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Mon ENT Occitanie</td>
<td align="center">3.5.2</td>
<td><a href="https://mobilite.mon-ent-occitanie.fr/mobilite">https://mobilite.mon-ent-occitanie.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Arsene 76</td>
<td align="center">3.7.11</td>
<td><a href="https://mobilite.arsene76.fr/mobilite">https://mobilite.arsene76.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">ENT27</td>
<td align="center">3.5.6</td>
<td><a href="https://mobilite.ent27.fr/mobilite">https://mobilite.ent27.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">ENT Creuse</td>
<td align="center">3.5.6</td>
<td><a href="https://mobilite.entcreuse.fr/mobilite">https://mobilite.entcreuse.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">ENT Auvergne-Rhône-Alpes</td>
<td align="center">3.7.11</td>
<td><a href="https://mobilite.ent.auvergnerhonealpes.fr/mobilite">https://mobilite.ent.auvergnerhonealpes.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Savoirs Numériques 62</td>
<td align="center">3.5.4</td>
<td><a href="https://mobilite.savoirsnumeriques62.fr/mobilite">https://mobilite.savoirsnumeriques62.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Agora 06</td>
<td align="center">3.7.14</td>
<td><a href="https://mobilite.agora06.fr/mobilite">https://mobilite.agora06.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">CyberCollèges 42</td>
<td align="center">3.5.6</td>
<td><a href="https://mobilite.cybercolleges42.fr/mobilite">https://mobilite.cybercolleges42.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">eCollège 31 Haute-Garonne</td>
<td align="center">3.1.15</td>
<td><a href="https://mobilite.ecollege.haute-garonne.fr/mobilite">https://mobilite.ecollege.haute-garonne.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Mon collège en Val d&#39;Oise</td>
<td align="center">3.4.11</td>
<td><a href="https://mobilite.moncollege.valdoise.fr/mobilite">https://mobilite.moncollege.valdoise.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Webcollège Seine-Saint-Denis</td>
<td align="center">3.7.14</td>
<td><a href="https://mobilite.webcollege.seinesaintdenis.fr/mobilite">https://mobilite.webcollege.seinesaintdenis.fr/mobilite</a></td>
</tr>
<tr>
<td align="center">Eclat-BFC</td>
<td align="center">3.5.3</td>
<td><a href="https://mobilite.eclat-bfc.fr/mobilite">https://mobilite.eclat-bfc.fr/mobilite</a></td>
</tr>
</tbody></table>
</dd>
</dl>

## Functions

<dl>
<dt><a href="#cli">cli()</a></dt>
<dd><p>Pour obtenir un jeton d&#39;authentification, vous pouvez utiliser la ligne de commande</p>
</dd>
</dl>

<a name="Kdecole"></a>

## Kdecole
Support non-officiel de l'API Kdecole (Mon Bureau Numérique, Skolengo, etc.)

L'accès à l'API requiert une en-tête avec la version de l'application en cours d'utilisation.
Les versions à utiliser lors de la création de l'instance `Kdecole` sont données ci-dessous.
L'accès à l'API requiert une en-tête (header) avec la version de l'application en cours d'utilisation.

Les versions à utiliser lors de la création de l'instance `Kdecole` sont données ci-dessous.
| Nom de l'ENT | Version | URL de l'API |
|:----------------------------: |:-------: |--------------------------------------------------------- |
| Mon Bureau Numérique | 3.4.14 | https://mobilite.monbureaunumerique.fr/mobilite |
Expand All @@ -114,6 +22,12 @@ Les versions à utiliser lors de la création de l'instance `Kdecole` sont donn
| Webcollège Seine-Saint-Denis | 3.7.14 | https://mobilite.webcollege.seinesaintdenis.fr/mobilite |
| Eclat-BFC | 3.5.3 | https://mobilite.eclat-bfc.fr/mobilite |

Une autre méthode pour obtenir un token est d'utiliser la commande

```shell
npx kdecole -u USERNAME -p CODE -ent PROD_MON_BUREAU_NUMERIQUE
```

**Kind**: global class

* [Kdecole](#Kdecole)
Expand Down Expand Up @@ -150,7 +64,7 @@ Les versions à utiliser lors de la création de l'instance `Kdecole` sont donn
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| authToken | <code>string</code> | | Le jeton d'accès |
| appVersion | <code>string</code> | | La version de l'application mobile autorisée par l'API |
| appVersion | <code>ApiVersion</code> \| <code>string</code> | | La version de l'application mobile autorisée par l'API |
| idEtablissement | <code>number</code> | <code>0</code> | L'identifiant de l'établissement |
| apiURL | <code>ApiUrl</code> \| <code>string</code> | | L'URL de l'API Kdecole |

Expand Down Expand Up @@ -587,21 +501,11 @@ Retourne le jeton d'accès de l'utilisateur
| --- | --- | --- |
| username | <code>string</code> | Le nom d'utilisateur |
| password | <code>string</code> | Le mot de passe à usage unique |
| appVersion | <code>string</code> | La version de l'application mobile autorisée par l'API |
| apiUrl | <code>apiURL</code> | L'URL de l'API Kdecole |
| appVersion | <code>ApiVersion</code> \| <code>string</code> | La version de l'application mobile autorisée par l'API |
| apiUrl | <code>apiURL</code> \| <code>string</code> | L'URL de l'API Kdecole |

**Example**
```js
const { Kdecole } = require('kdecole-api')
Kdecole.login(username, uniquePassword).then(token => console.log(token)) // Affiche dans la console son token
```
<a name="cli"></a>

## cli()
Pour obtenir un jeton d'authentification, vous pouvez utiliser la ligne de commande

**Kind**: global function
**Example**
```bash
npx kdecole <identifiant> <code_activation_mobile>
Kdecole.login(username, uniquePassword).then(token => console.log(token)) // Affiche son token dans la console
```
35 changes: 34 additions & 1 deletion bin/kdecole
Original file line number Diff line number Diff line change
@@ -1,2 +1,35 @@
#!/usr/bin/env node
require('../dist/cli').cli(process.argv);
const yargs = require('yargs')
const { Kdecole, ApiVersion, ApiUrl } = require('../dist/Kdecole.js')

const {u, p, ent} = yargs
.usage('Usage: -u <username> -p <uniquePassword> -e <ENT>')
.option('u', { alias: 'username', describe: "Nom d'utilisateur", demandOption: true })
.option('p', { alias: 'password', describe: 'Mot de passe unique', demandOption: true })
.option('e', {
alias: 'ent',
describe: "ENT auquel s'authentifier",
choices: [
'PROD_MON_BUREAU_NUMERIQUE',
'PROD_MON_ENT_OCCITANIE',
'PROD_ARSENE76',
'PROD_ENT27',
'PROD_ENTCREUSE',
'PROD_AUVERGNERHONEALPES',
'PROD_SAVOIRSNUMERIQUES62',
'PROD_AGORA06',
'PROD_CYBERCOLLEGES42',
'PROD_ECOLLEGE_HAUTE_GARONNE',
'PROD_MONCOLLEGE_VALDOISE',
'PROD_WEBCOLLEGE_SEINESAINTDENIS',
'PROD_ECLAT_BFC',
'PROD_DEMO_SKOLENGO'
],
demandOption: false,
})
.argv

Kdecole.login(u, p, ApiVersion[ent], ApiUrl[ent]).then(token => {
console.log(token)
console.log('ATTENTION: Ce token octroie un accès majeur à votre compte et ne doit donc jamais être transmis à un tiers.')
}).catch(console.log)
42 changes: 26 additions & 16 deletions dist/Kdecole.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ exports.APP_VERSION = ApiVersion.PROD_MON_BUREAU_NUMERIQUE;
/**
* Support non-officiel de l'API Kdecole (Mon Bureau Numérique, Skolengo, etc.)
*
* L'accès à l'API requiert une en-tête avec la version de l'application en cours d'utilisation.
* Les versions à utiliser lors de la création de l'instance `Kdecole` sont données ci-dessous.
* L'accès à l'API requiert une en-tête (header) avec la version de l'application en cours d'utilisation.
*
* Les versions à utiliser lors de la création de l'instance `Kdecole` sont données ci-dessous.
* | Nom de l'ENT | Version | URL de l'API |
* |:----------------------------: |:-------: |--------------------------------------------------------- |
* | Mon Bureau Numérique | 3.4.14 | https://mobilite.monbureaunumerique.fr/mobilite |
Expand All @@ -77,6 +77,11 @@ exports.APP_VERSION = ApiVersion.PROD_MON_BUREAU_NUMERIQUE;
* | Webcollège Seine-Saint-Denis | 3.7.14 | https://mobilite.webcollege.seinesaintdenis.fr/mobilite |
* | Eclat-BFC | 3.5.3 | https://mobilite.eclat-bfc.fr/mobilite |
*
* Une autre méthode pour obtenir un token est d'utiliser la commande
*
*```shell
* npx kdecole -u USERNAME -p CODE -ent PROD_MON_BUREAU_NUMERIQUE
* ```
* @example ```js
* const { Kdecole } = require('kdecole-api')
*
Expand All @@ -86,41 +91,43 @@ exports.APP_VERSION = ApiVersion.PROD_MON_BUREAU_NUMERIQUE;
* ```
*/
class Kdecole {
authToken;
appVersion;
idEtablissement;
apiURL;
/**
* @param {string} authToken Le jeton d'accès
* @param {string} appVersion La version de l'application mobile autorisée par l'API
* @param {ApiVersion|string} appVersion La version de l'application mobile autorisée par l'API
* @param {number} idEtablissement L'identifiant de l'établissement
* @param {ApiUrl|string} apiURL L'URL de l'API Kdecole
*/
constructor(authToken, appVersion = ApiVersion.PROD_MON_BUREAU_NUMERIQUE, idEtablissement = 0, apiURL = ApiUrl.PROD_MON_BUREAU_NUMERIQUE) {
if (authToken === undefined) {
throw Error('Un jeton d\'accès doit être renseigné');
}
this.authToken = authToken;
this.appVersion = appVersion;
this.idEtablissement = idEtablissement;
this.apiURL = apiURL;
if (authToken === undefined)
throw Error('Un jeton d\'accès doit être renseigné');
}
/**
* Retourne le jeton d'accès de l'utilisateur
* @param {string} username Le nom d'utilisateur
* @param {string} password Le mot de passe à usage unique
* @param {string} appVersion La version de l'application mobile autorisée par l'API
* @param {apiURL} apiUrl L'URL de l'API Kdecole
* @param {ApiVersion|string} appVersion La version de l'application mobile autorisée par l'API
* @param {apiURL|string} apiUrl L'URL de l'API Kdecole
* @return {Promise<string>}
* @example ```js
* const { Kdecole } = require('kdecole-api')
* Kdecole.login(username, uniquePassword).then(token => console.log(token)) // Affiche dans la console son token
* Kdecole.login(username, uniquePassword).then(token => console.log(token)) // Affiche son token dans la console
* ```
*/
static async login(username, password, appVersion = ApiVersion.PROD_MON_BUREAU_NUMERIQUE, apiUrl = ApiUrl.PROD_MON_BUREAU_NUMERIQUE) {
const activation = new Activation_1.default(await Kdecole.kdecole(new Kdecole('', appVersion, 0, apiUrl), {
service: 'activation',
parameters: `${username}/${password}`
}));
if (activation.authtoken && activation.success) {
if (activation.authtoken && activation.success)
return activation.authtoken;
}
throw Error('L\'authentification n\'a pas fonctionné');
}
/**
Expand Down Expand Up @@ -154,10 +161,7 @@ class Kdecole {
* @return {Promise<void>}
*/
async starting() {
await Kdecole.kdecole(this, {
service: 'starting',
parameters: ''
});
await Kdecole.kdecole(this, { service: 'starting' });
}
/**
* Retourne le relevé de notes de l'élève
Expand Down Expand Up @@ -545,7 +549,13 @@ class Kdecole {
});
}
static async kdecole(ctx, { service, parameters, type = 'get', data }) {
if (parameters === undefined && service !== 'desactivation' && service !== 'messagerie/info' && service !== 'messagerie/communication' && service !== 'messagerie/boiteReception' && service !== 'infoutilisateur')
if (parameters === undefined &&
service !== 'desactivation' &&
service !== 'messagerie/info' &&
service !== 'messagerie/communication' &&
service !== 'messagerie/boiteReception' &&
service !== 'starting' &&
service !== 'infoutilisateur')
parameters = `idetablissement/${ctx.idEtablissement}`;
return (await axios_1.default.request({
baseURL: ctx.apiURL,
Expand Down
23 changes: 0 additions & 23 deletions dist/cli.js

This file was deleted.

3 changes: 3 additions & 0 deletions dist/entities/Authentication/Activation.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Activation {
success;
authtoken;
errmsg;
constructor(activation) {
this.errmsg = activation.errmsg;
this.success = activation.success;
Expand Down
3 changes: 3 additions & 0 deletions dist/entities/Authentication/Desactivation.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Desactivation {
success;
authtoken;
errmsg;
constructor(desactivation) {
this.errmsg = desactivation.errmsg;
this.success = desactivation.success;
Expand Down
5 changes: 4 additions & 1 deletion dist/entities/Calendar/Calendrier.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
const ListeJourCdt_1 = __importDefault(require("./ListeJourCdt"));
class Calendrier {
currentDate;
listeJourCdt = [];
cdtOuvert;
errmsg;
constructor(calendrier) {
this.listeJourCdt = [];
this.errmsg = calendrier.errmsg;
this.currentDate = new Date(calendrier.currentDate);
this.cdtOuvert = calendrier.cdtOuvert;
Expand Down
4 changes: 4 additions & 0 deletions dist/entities/Calendar/Exercice.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Exercice {
type;
uid;
date;
titre;
constructor(enSeance) {
this.type = enSeance.type;
this.uid = enSeance.uid;
Expand Down
3 changes: 2 additions & 1 deletion dist/entities/Calendar/ListeJourCdt.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
const Seance_1 = __importDefault(require("./Seance"));
class ListeJourCdt {
listeSeances = [];
date;
constructor(listeJourCdt) {
this.listeSeances = [];
listeJourCdt.listeSeances.forEach(seance => this.listeSeances.push(new Seance_1.default(seance)));
this.date = new Date(listeJourCdt.date);
}
Expand Down
17 changes: 14 additions & 3 deletions dist/entities/Calendar/Seance.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true });
const Exercice_1 = __importDefault(require("./Exercice"));
class Seance {
hdeb;
enSeance = [];
matiere;
aFaire = [];
heureFin;
flagModif;
flagActif;
heureDebut;
hfin;
aRendre = [];
motifModif;
idSeance;
salle;
titre;
constructor(seance) {
this.enSeance = [];
this.aFaire = [];
this.aRendre = [];
this.hdeb = new Date(seance.hdeb);
seance.enSeance?.forEach(enSeance => this.enSeance?.push(new Exercice_1.default(enSeance)));
this.matiere = seance.matiere;
Expand Down
Loading

0 comments on commit 0f9d404

Please sign in to comment.