Skip to content

Commit cc47282

Browse files
committed
deploy: c6ea226
1 parent 770455d commit cc47282

File tree

21 files changed

+534
-503
lines changed

21 files changed

+534
-503
lines changed

controllers/PasswdController.html

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,8 @@ <h3 id="methods">
517517

518518
<tr>
519519
<td class="col-md-4">
520-
<div class="io-line">Defined in <a href="" data-line="118"
521-
class="link-to-prism">src/management/passwd/passwd.controller.ts:118</a></div>
520+
<div class="io-line">Defined in <a href="" data-line="110"
521+
class="link-to-prism">src/management/passwd/passwd.controller.ts:110</a></div>
522522
</td>
523523
</tr>
524524

@@ -609,8 +609,8 @@ <h3 id="methods">
609609

610610
<tr>
611611
<td class="col-md-4">
612-
<div class="io-line">Defined in <a href="" data-line="127"
613-
class="link-to-prism">src/management/passwd/passwd.controller.ts:127</a></div>
612+
<div class="io-line">Defined in <a href="" data-line="121"
613+
class="link-to-prism">src/management/passwd/passwd.controller.ts:121</a></div>
614614
</td>
615615
</tr>
616616

@@ -884,8 +884,8 @@ <h3 id="methods">
884884

885885
<tr>
886886
<td class="col-md-4">
887-
<div class="io-line">Defined in <a href="" data-line="139"
888-
class="link-to-prism">src/management/passwd/passwd.controller.ts:139</a></div>
887+
<div class="io-line">Defined in <a href="" data-line="134"
888+
class="link-to-prism">src/management/passwd/passwd.controller.ts:134</a></div>
889889
</td>
890890
</tr>
891891

@@ -985,7 +985,7 @@ <h3 id="methods">
985985
public async resetbycode(@Body() body: ResetByCodeDto, @Res() res: Response): Promise&lt;Response&gt; {
986986
const debug &#x3D; {};
987987
this.logger.log(&#x27;Reset by code : &#x27; + body.token + &#x27; code : &#x27; + body.code);
988-
try{
988+
try {
989989
const [_, data] &#x3D; await this.passwdService.resetByCode(body);
990990
if (process.env.NODE_ENV &#x3D;&#x3D;&#x3D; &#x27;development&#x27;) {
991991
debug[&#x27;_debug&#x27;] &#x3D; data;
@@ -1034,30 +1034,24 @@ <h3 id="methods">
10341034
@ApiOperation({ summary: &quot;Initialise le compte envoi un jeton par mail à l&#x27;identité&quot; })
10351035
@ApiResponse({ status: HttpStatus.OK })
10361036
public async init(@Body() body: InitAccountDto, @Res() res: Response): Promise&lt;Response&gt; {
1037-
const debug &#x3D; {};
1038-
const ok &#x3D; await this.passwdService.initAccount(body);
1039-
if (ok){
1040-
return res.status(HttpStatus.OK).json({
1041-
message: &#x27;Email envoyé verifiez votre boite mail alternative et vos spam&#x27;,
1042-
...debug,
1043-
});
1044-
}else{
1045-
return res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
1046-
message: &#x27;Erreur serveur impossible d\&#x27;envoyer le mail&#x27;,
1047-
...debug,
1048-
});
1049-
}
1050-
1037+
const data &#x3D; await this.passwdService.initAccount(body);
1038+
return res.status(HttpStatus.OK).json({
1039+
message: &#x27;Email envoyé verifiez votre boite mail alternative et vos spam&#x27;,
1040+
data,
1041+
});
10511042
}
1043+
10521044
@Post(&#x27;initmany&#x27;)
10531045
@ApiOperation({ summary: &quot;Initialise plusieurs identités. envoi un jeton par mail à l&#x27;identité&quot; })
10541046
@ApiResponse({ status: HttpStatus.OK })
10551047
public async initMany(@Body() body: InitManyDto, @Res() res: Response): Promise&lt;Response&gt; {
1056-
const result &#x3D; await this.passwdService.initMany(body);
1048+
const data &#x3D; await this.passwdService.initMany(body);
10571049
return res.status(HttpStatus.OK).json({
10581050
message: &#x27;identités initialisées&#x27;,
1051+
data,
10591052
});
10601053
}
1054+
10611055
@Post(&#x27;initreset&#x27;)
10621056
@ApiOperation({ summary: &#x27;Demande l envoi de mail pour le reset&#x27; })
10631057
@ApiResponse({ status: HttpStatus.OK })
@@ -1071,6 +1065,7 @@ <h3 id="methods">
10711065
...debug,
10721066
});
10731067
}
1068+
10741069
@Get(&#x27;ioutdated&#x27;)
10751070
@ApiOperation({ summary: &#x27;Compte donc l invitation d init n a pas été repondue dans les temps&#x27; })
10761071
public async search(@Res() res: Response): Promise&lt;

injectables/PasswdService.html

Lines changed: 127 additions & 115 deletions
Large diffs are not rendered by default.

interfaces/CipherData.html

Lines changed: 98 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ <h3 id="inputs">Properties</h3>
234234

235235

236236
<div class="tab-pane fade tab-source-code" id="source">
237-
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {InjectRedis} from &#x27;@nestjs-modules/ioredis&#x27;;
237+
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { InjectRedis } from &#x27;@nestjs-modules/ioredis&#x27;;
238238
import {
239239
BadRequestException,
240240
HttpException,
@@ -244,30 +244,31 @@ <h3 id="inputs">Properties</h3>
244244
NotFoundException,
245245
} from &#x27;@nestjs/common&#x27;;
246246
import * as crypto from &#x27;crypto&#x27;;
247-
import {randomInt} from &#x27;crypto&#x27;;
247+
import { randomInt } from &#x27;crypto&#x27;;
248248
import Redis from &#x27;ioredis&#x27;;
249-
import {AbstractService} from &#x27;~/_common/abstracts/abstract.service&#x27;;
250-
import {ActionType} from &#x27;~/core/backends/_enum/action-type.enum&#x27;;
251-
import {BackendsService} from &#x27;~/core/backends/backends.service&#x27;;
252-
import {Jobs} from &#x27;~/core/jobs/_schemas/jobs.schema&#x27;;
253-
import {AskTokenDto} from &#x27;./_dto/ask-token.dto&#x27;;
254-
import {ChangePasswordDto} from &#x27;./_dto/change-password.dto&#x27;;
255-
import {ResetPasswordDto} from &#x27;./_dto/reset-password.dto&#x27;;
256-
import {IdentitiesCrudService} from &#x27;../identities/identities-crud.service&#x27;;
257-
import {get} from &#x27;radash&#x27;;
258-
import {Identities} from &#x27;../identities/_schemas/identities.schema&#x27;;
259-
import {MailerService} from &#x27;@nestjs-modules/mailer&#x27;;
260-
import {InitAccountDto} from &#x27;~/management/passwd/_dto/init-account.dto&#x27;;
261-
import {ConfigService} from &#x27;@nestjs/config&#x27;;
262-
import {ResetByCodeDto} from &#x27;~/management/passwd/_dto/reset-by-code.dto&#x27;;
263-
import {PasswdadmService} from &#x27;~/settings/passwdadm.service&#x27;;
264-
import {IdentityState} from &#x27;~/management/identities/_enums/states.enum&#x27;;
265-
import {InitResetDto} from &#x27;~/management/passwd/_dto/init-reset.dto&#x27;;
266-
import {SmsadmService} from &#x27;~/settings/smsadm.service&#x27;;
267-
import {InitManyDto} from &#x27;~/management/passwd/_dto/init-many.dto&#x27;;
268-
import {InitStatesEnum} from &#x27;~/management/identities/_enums/init-state.enum&#x27;;
269-
import {MailadmService} from &#x27;~/settings/mailadm.service&#x27;;
270-
import {DataStatusEnum} from &quot;~/management/identities/_enums/data-status&quot;;
249+
import { AbstractService } from &#x27;~/_common/abstracts/abstract.service&#x27;;
250+
import { ActionType } from &#x27;~/core/backends/_enum/action-type.enum&#x27;;
251+
import { BackendsService } from &#x27;~/core/backends/backends.service&#x27;;
252+
import { Jobs } from &#x27;~/core/jobs/_schemas/jobs.schema&#x27;;
253+
import { AskTokenDto } from &#x27;./_dto/ask-token.dto&#x27;;
254+
import { ChangePasswordDto } from &#x27;./_dto/change-password.dto&#x27;;
255+
import { ResetPasswordDto } from &#x27;./_dto/reset-password.dto&#x27;;
256+
import { IdentitiesCrudService } from &#x27;../identities/identities-crud.service&#x27;;
257+
import { get } from &#x27;radash&#x27;;
258+
import { Identities } from &#x27;../identities/_schemas/identities.schema&#x27;;
259+
import { MailerService } from &#x27;@nestjs-modules/mailer&#x27;;
260+
import { InitAccountDto } from &#x27;~/management/passwd/_dto/init-account.dto&#x27;;
261+
import { ConfigService } from &#x27;@nestjs/config&#x27;;
262+
import { ResetByCodeDto } from &#x27;~/management/passwd/_dto/reset-by-code.dto&#x27;;
263+
import { PasswdadmService } from &#x27;~/settings/passwdadm.service&#x27;;
264+
import { IdentityState } from &#x27;~/management/identities/_enums/states.enum&#x27;;
265+
import { InitResetDto } from &#x27;~/management/passwd/_dto/init-reset.dto&#x27;;
266+
import { SmsadmService } from &#x27;~/settings/smsadm.service&#x27;;
267+
import { InitManyDto } from &#x27;~/management/passwd/_dto/init-many.dto&#x27;;
268+
import { InitStatesEnum } from &#x27;~/management/identities/_enums/init-state.enum&#x27;;
269+
import { MailadmService } from &#x27;~/settings/mailadm.service&#x27;;
270+
import { DataStatusEnum } from &quot;~/management/identities/_enums/data-status&quot;;
271+
import { SentMessageInfo } from &#x27;nodemailer&#x27;;
271272

272273
interface TokenData {
273274
k: string;
@@ -299,14 +300,15 @@ <h3 id="inputs">Properties</h3>
299300
) {
300301
super();
301302
}
303+
302304
//Initialisation du reset de mot de passe envoie un email ou par sms un code et fourni un token au front.
303305
// Le code est la clé du token
304306
public async initReset(initDto: InitResetDto): Promise&lt;any&gt; {
305307
//envoi du mail
306308
try {
307309
const identity &#x3D; (await this.identities.findOne({ &#x27;inetOrgPerson.uid&#x27;: initDto.uid })) as Identities;
308310
//test si on peu reninitialiser le compte
309-
if ( identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED){
311+
if (identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED) {
310312
throw new BadRequestException(
311313
&#x27;Une erreur est survenue : Tentative de réinitialisation de mot de passe impossible&#x27;,
312314
);
@@ -379,67 +381,70 @@ <h3 id="inputs">Properties</h3>
379381
return falseToken;
380382
}
381383
}
384+
382385
//Initialisation du compte. Envoi d&#x27; un mail avec un token pour l&#x27;init du compte
383-
public async initAccount(initDto: InitAccountDto): Promise&lt;any&gt; {
384-
//recherche de l&#x27;identity
386+
public async initAccount(initDto: InitAccountDto): Promise&lt;SentMessageInfo&gt; {
387+
const identity &#x3D; (await this.identities.findOne({ &#x27;inetOrgPerson.uid&#x27;: initDto.uid })) as Identities;
388+
//test si on peu reninitialiser le compte
389+
if (identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED) {
390+
throw new BadRequestException(
391+
&#x27;Une erreur est survenue : Tentative de réinitialisation de mot de passe impossible&#x27;,
392+
);
393+
}
394+
//envoi du mail
395+
const params &#x3D; await this.passwdadmService.getPolicies();
396+
const mailAttribute &#x3D; params.emailAttribute;
397+
this.logger.log(&#x27;mailer.identityMailAttribute : &#x27; + mailAttribute);
398+
399+
if (!mailAttribute) {
400+
this.logger.error(&#x27;Error while initAccount identityMailAttribute Empty&#x27;);
401+
throw new BadRequestException({
402+
message: &quot;Une erreur est survenue : l&#x27;attribut de l&#x27;adresse mail n&#x27;est pas défini&quot;,
403+
error: &#x27;Bad Request&#x27;,
404+
statusCode: 400,
405+
});
406+
}
407+
408+
const mail &#x3D; &lt;string&gt;get(identity.toObject(), mailAttribute);
409+
if (!mail) {
410+
this.logger.error(&#x27;Error while initAccount identityMailAttribute not defined&#x27;);
411+
throw new BadRequestException({
412+
message: &quot;Une erreur est survenue : L&#x27;identité &lt;&quot; + (identity.inetOrgPerson?.cn || identity._id) + &quot;&gt; n&#x27;a pas d&#x27;adresse mail&quot;,
413+
error: &#x27;Bad Request&#x27;,
414+
statusCode: 400,
415+
});
416+
}
417+
418+
const smtpParams &#x3D; await this.mailadmService.getParams();
419+
//demande du token
420+
const k &#x3D; crypto.randomBytes(PasswdService.RANDOM_BYTES_K).toString(&#x27;hex&#x27;);
421+
const token &#x3D; await this.askToken({ mail: mail, uid: initDto.uid }, k, params.initTokenTTL);
422+
//envoi du token
423+
385424
try {
386-
const identity &#x3D; (await this.identities.findOne({ &#x27;inetOrgPerson.uid&#x27;: initDto.uid })) as Identities;
387-
//test si on peu reninitialiser le compte
388-
if ( identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED){
389-
throw new BadRequestException(
390-
&#x27;Une erreur est survenue : Tentative de réinitialisation de mot de passe impossible&#x27;,
391-
);
392-
}
393-
//envoi du mail
394-
const params &#x3D; await this.passwdadmService.getPolicies();
395-
const mailAttribute &#x3D; params.emailAttribute;
396-
this.logger.log(&#x27;mailer.identityMailAttribute : &#x27; + mailAttribute);
397-
if (mailAttribute !&#x3D;&#x3D; &#x27;&#x27;) {
398-
const mail &#x3D; &lt;string&gt;get(identity.toObject(), mailAttribute);
399-
if (mail) {
400-
const smtpParams &#x3D; await this.mailadmService.getParams();
401-
//demande du token
402-
const k &#x3D; crypto.randomBytes(PasswdService.RANDOM_BYTES_K).toString(&#x27;hex&#x27;);
403-
const token &#x3D; await this.askToken({ mail: mail, uid: initDto.uid }, k, params.initTokenTTL);
404-
//envoi du token
405-
this.mailer
406-
.sendMail({
407-
from: smtpParams.sender,
408-
to: mail,
409-
subject: &#x27;Activation de votre compte&#x27;,
410-
template: &#x27;initaccount&#x27;,
411-
context: {
412-
displayName: identity.inetOrgPerson.displayName,
413-
uid: initDto.uid,
414-
url: this.config.get(&#x27;frontPwd.url&#x27;) + &#x27;/initaccount/&#x27; + token,
415-
mail: identity.inetOrgPerson.mail
416-
},
417-
})
418-
.then(() &#x3D;&gt; {
419-
this.logger.log(&#x27;Init compte envoyé pour uid&#x27; + initDto.uid + &#x27; à &#x27; + mail);
420-
this.setInitState(identity, InitStatesEnum.SENT);
421-
})
422-
.catch((e) &#x3D;&gt; {
423-
this.logger.error(&#x27;Erreur serveur lors de l envoi du mail&#x27; + e);
424-
throw new BadRequestException({
425-
message: &#x27;Erreur serveur lors de l envoi du mail&#x27; + e,
426-
error: &#x27;Bad Request&#x27;,
427-
statusCode: 400,
428-
});
429-
});
425+
const send &#x3D; await this.mailer.sendMail({
426+
from: smtpParams.sender,
427+
to: mail,
428+
subject: &#x27;Activation de votre compte&#x27;,
429+
template: &#x27;initaccount&#x27;,
430+
context: {
431+
displayName: identity.inetOrgPerson.displayName,
432+
uid: initDto.uid,
433+
url: this.config.get(&#x27;frontPwd.url&#x27;) + &#x27;/initaccount/&#x27; + token,
434+
mail: identity.inetOrgPerson.mail
435+
},
436+
})
437+
this.logger.log(&#x27;Init compte envoyé pour uid &#x27; + initDto.uid + &#x27; à &#x27; + mail);
438+
this.setInitState(identity, InitStatesEnum.SENT);
430439

431-
return true;
432-
} else {
433-
this.logger.error(&#x27;Error while initAccount identityMailAttribute Empty&#x27;);
434-
return false;
435-
}
436-
} else {
437-
this.logger.error(&#x27;Error while initAccount identityMailAttribute not defined&#x27;);
438-
return false;
439-
}
440+
return send;
440441
} catch (e) {
441-
this.logger.error(&#x27;Error while initialize password. &#x27; + e + &#x60; (uid&#x3D;${initDto?.uid})&#x60;);
442-
return false;
442+
this.logger.error(&#x27;Error while sending init account email: &#x27; + e);
443+
throw new BadRequestException({
444+
message: &#x27;Erreur serveur lors de l envoi du mail&#x27;,
445+
error: &#x27;Bad Request&#x27;,
446+
statusCode: 400,
447+
});
443448
}
444449
}
445450

@@ -450,7 +455,7 @@ <h3 id="inputs">Properties</h3>
450455
&#x27;inetOrgPerson.uid&#x27;: passwdDto.uid,
451456
state: IdentityState.SYNCED,
452457
})) as Identities;
453-
if ( identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED){
458+
if (identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.INACTIVE || identity.dataStatus &#x3D;&#x3D;&#x3D; DataStatusEnum.DELETED) {
454459
throw new BadRequestException(
455460
&#x27;Une erreur est survenue : Tentative de réinitialisation de mot de passe impossible&#x27;,
456461
);
@@ -482,7 +487,7 @@ <h3 id="inputs">Properties</h3>
482487
},
483488
);
484489
// on met actif l&#x27;identité
485-
await this.identities.model.updateOne({ _id:identity._id},{dataStatus: DataStatusEnum.ACTIVE})
490+
await this.identities.model.updateOne({ _id: identity._id }, { dataStatus: DataStatusEnum.ACTIVE })
486491
return result;
487492
} catch (e) {
488493
let job &#x3D; undefined;
@@ -682,12 +687,19 @@ <h3 id="inputs">Properties</h3>
682687
if (identities.length &#x3D;&#x3D;&#x3D; 0) {
683688
throw new HttpException(&#x27;Aucune identité trouvée.&#x27;, 404);
684689
}
690+
685691
const updated &#x3D; await Promise.all(
686-
identities.map((identity) &#x3D;&gt; {
692+
identities.map(async (identity) &#x3D;&gt; {
687693
this.logger.verbose(&#x27;send To :&#x27; + identity.get(&#x27;inetOrgPerson.uid&#x27;));
688-
return this.initAccount({ uid: identity.get(&#x27;inetOrgPerson.uid&#x27;) });
694+
try {
695+
return await this.initAccount({ uid: identity.get(&#x27;inetOrgPerson.uid&#x27;) });
696+
} catch (e) {
697+
this.logger.error(&#x27;Error while init account for &#x27; + identity.get(&#x27;inetOrgPerson.uid&#x27;) + &#x27;: &#x27; + e);
698+
return null;
699+
}
689700
}),
690701
);
702+
691703
return updated as any;
692704
}
693705

0 commit comments

Comments
 (0)