Skip to content

Commit 85a4ce7

Browse files
alainabbastacxou
authored andcommitted
save
1 parent b5bd3a8 commit 85a4ce7

File tree

11 files changed

+108
-92
lines changed

11 files changed

+108
-92
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dev: ## Start development environment
2525
-p $(APP_PORT):4000 \
2626
-p 9229:9229 \
2727
-v $(CURDIR):/data \
28-
$(IMG_NAME) yarn start:debug
28+
$(IMG_NAME) yarn start:debug
2929

3030
install: ## Install dependencies
3131
@docker run -it --rm \
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import {AbstractServiceSchema} from "~/_common/abstracts/abstract.service.schema";
2+
import {InjectModel} from "@nestjs/mongoose";
3+
import {Model} from "mongoose";
4+
import {Settings, SettingsSchema} from "~/settings/_schemas/settings.schema";
5+
6+
export class AbstractSettingsService extends AbstractServiceSchema {
7+
protected settingsName: string
8+
9+
constructor(@InjectModel(Settings.name) protected _model: Model<Settings>) {
10+
super();
11+
}
12+
13+
protected async getParameter(settingName: string): Promise<object | null> {
14+
try {
15+
const enr= await this.findOne({name: settingName})
16+
return enr.parameters
17+
} catch (e) {
18+
return this.defaultValues()
19+
}
20+
}
21+
22+
protected async setParameter(settingName: string, parameters: object): Promise<any> {
23+
const enr = new this._model({
24+
name: settingName
25+
, parameters: parameters
26+
})
27+
const ok= await this.upsert(
28+
{name: settingName},
29+
{
30+
$setOnInsert: {
31+
name: settingName
32+
},
33+
$set: {
34+
"parameters": parameters
35+
}
36+
})
37+
return ok
38+
}
39+
40+
protected async defaultValues(): Promise<object> {
41+
42+
return {}
43+
}
44+
45+
}

src/management/passwd/passwd.controller.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {VerifyTokenDto} from './_dto/verify-token.dto';
88
import {ResetPasswordDto} from './_dto/reset-password.dto';
99
import {omit} from "radash";
1010
import {PasswdadmService} from "~/settings/passwdadm/passwdadm.service";
11-
import {PasswordPolicies} from "~/settings/passwdadm/_schemas/PasswordPolicies";
1211
import {InitAccountDto} from "~/management/passwd/_dto/init-account.dto";
1312
import {InitResetDto} from "~/management/passwd/_dto/init-reset.dto";
1413
import crypto from "crypto";

src/management/passwd/passwd.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {PasswdadmService} from "~/settings/passwdadm/passwdadm.service";
2121
import {IdentityState} from "~/management/identities/_enums/states.enum";
2222
import {InitResetDto} from "~/management/passwd/_dto/init-reset.dto";
2323
import {SmsService} from "~/management/passwd/sms-service";
24+
import {PasswordPoliciesDto} from "~/settings/passwdadm/dto/password-policy.dto";
2425

2526
interface TokenData {
2627
k: string;
@@ -97,7 +98,7 @@ export class PasswdService extends AbstractService {
9798
}
9899
}else{
99100
//envoi par SMS si c est possible
100-
const policies=await this.passwdadmService.getPolicies()
101+
const policies=new PasswordPoliciesDto()
101102
if (policies.resetBySms === true){
102103
this.logger.log("Reset password asked by SMS for : " + initDto.uid )
103104
const smsAttribute=this.config.get('frontPwd.identityMobileAttribute')
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { AbstractSchema } from '~/_common/abstracts/schemas/abstract.schema';
2+
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
3+
4+
export type SettingsDocument = Document;
5+
6+
@Schema({ versionKey: false })
7+
export class Settings extends AbstractSchema {
8+
@Prop({ type: String, default: "" ,required: true, unique: true,})
9+
name: string
10+
@Prop({type: Object, default:{}})
11+
parameters: object
12+
13+
}
14+
15+
export const SettingsSchema = SchemaFactory.createForClass(Settings);

src/settings/passwdadm/_schemas/PasswordPolicies.ts

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/settings/passwdadm/dto/password-policy.dto.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,39 @@ import {IsNumber, IsBoolean, IsString} from 'class-validator';
44
export class PasswordPoliciesDto {
55
@IsNumber()
66
@ApiProperty({ example: '8', description: 'Password minimal Length', type: Number })
7-
public len: Number;
7+
public len: number=10;
88

99
@IsNumber()
1010
@ApiProperty({ example: '1', description: 'Minimal amount of letters in uppercase', type: Number })
11-
public hasUpperCase: Number;
11+
public hasUpperCase: number;
1212

1313
@IsNumber()
1414
@ApiProperty({ example: '1', description: 'Minimal amount of letters in lowercase', type: Number })
15-
public hasLowerCase: Number;
15+
public hasLowerCase: number;
1616

1717
@IsNumber()
1818
@ApiProperty({ example: '1', description: 'Minimal amount of numbers', type: Number })
19-
public hasNumbers: Number;
19+
public hasNumbers: number;
2020

2121
@IsNumber()
2222
@ApiProperty({ example: '1', description: 'Minimal amount of special characters', type: Number })
23-
public hasSpecialChars: Number;
23+
public hasSpecialChars: number;
2424

2525
@IsNumber()
2626
@ApiProperty({ example: '30', description: 'Minimal complexity (entropy), Below this number the password wont be accepted', type: Number })
27-
public minComplexity: Number;
27+
public minComplexity: number;
2828

2929
@IsNumber()
3030
@ApiProperty({ example: '70', description: 'Good complexity (entropy), Upper this number the password is considered good', type: Number })
31-
public goodComplexity: Number;
31+
public goodComplexity: number;
3232

3333
@IsBoolean()
3434
@ApiProperty({ example: true, description: 'Teh password will be checked on Pwned', type: Boolean })
35-
public checkPwned: Boolean;
35+
public checkPwned: boolean;
3636

3737
@IsBoolean()
3838
@ApiProperty({ example: true, description: 'Mote de passe peut etre reinitialisé par sms', type: Boolean })
39-
public resetBySms: Boolean;
39+
public resetBySms: boolean;
4040

4141
@IsNumber()
4242
@ApiProperty({ example: '10', description: 'after X bad logins the user will be banned for bannedTime', type: Number })

src/settings/passwdadm/passwdadm.controller.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { PasswdadmService } from './passwdadm.service';
33
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
44
import { Response } from 'express';
55
import {omit} from "radash";
6+
import {InitAccountDto} from "~/management/passwd/_dto/init-account.dto";
7+
import {PasswordPoliciesDto} from "~/settings/passwdadm/dto/password-policy.dto";
68

79

810
@Controller('passwd')
@@ -12,4 +14,12 @@ export class PasswdadmController {
1214

1315
public constructor(private passwdadmService: PasswdadmService) { }
1416

17+
@Post('setpolicies')
18+
@ApiOperation({summary: 'enregistre la police de mdp'})
19+
@ApiResponse({status: HttpStatus.OK})
20+
public async getPolicies(@Body() body: PasswordPoliciesDto,@Res() res: Response): Promise<Response> {
21+
const data = await this.passwdadmService.setPolicies(body)
22+
//const datax=omit(data.toObject,['_id'])
23+
return res.status(HttpStatus.OK).json({data})
24+
}
1525
}

src/settings/passwdadm/passwdadm.module.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@ import { Module } from '@nestjs/common';
22
import { PasswdadmService } from './passwdadm.service';
33
import { PasswdadmController } from './passwdadm.controller';
44
import { BackendsModule } from '~/core/backends/backends.module';
5-
import { IdentitiesModule } from '~/management/identities/identities.module';
65
import {MongooseModule} from "@nestjs/mongoose";
7-
import {PasswordPolicies,PasswordPoliciesSchema} from "~/settings/passwdadm/_schemas/PasswordPolicies";
8-
6+
import {Settings,SettingsSchema} from "~/settings/_schemas/settings.schema";
97
@Module({
108
imports: [BackendsModule,
11-
IdentitiesModule,
129
MongooseModule.forFeatureAsync([
1310
{
14-
name: PasswordPolicies.name,
15-
useFactory: () => PasswordPoliciesSchema,
11+
name: Settings.name,
12+
useFactory: () => SettingsSchema,
1613
},
1714
]),
1815
],

src/settings/passwdadm/passwdadm.service.ts

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,27 @@
1-
import {BadRequestException, Injectable, InternalServerErrorException, NotFoundException} from '@nestjs/common';
2-
import Redis from 'ioredis';
3-
import {AbstractService} from '~/_common/abstracts/abstract.service';
4-
import {PasswordPolicies} from "~/settings/passwdadm/_schemas/PasswordPolicies";
5-
import {Model} from "mongoose";
1+
import {Document, Model} from "mongoose";
62
import {InjectModel} from "@nestjs/mongoose";
7-
import {IdentitiesService} from "~/management/identities/identities.service";
83
import stringEntropy from 'fast-password-entropy'
94
import {pwnedPassword} from "hibp";
105
import {PasswordPoliciesDto} from "~/settings/passwdadm/dto/password-policy.dto";
6+
import {AbstractSettingsService} from "~/_common/abstracts/abstract-settings.service";
7+
import {Injectable} from "@nestjs/common";
118

129
@Injectable()
13-
export class PasswdadmService extends AbstractService {
14-
public constructor(
15-
protected readonly identities: IdentitiesService,
16-
@InjectModel(PasswordPolicies.name) protected passwordPolicies: Model<PasswordPolicies>
17-
) {
18-
super();
19-
}
20-
21-
public async getPolicies(): Promise<PasswordPolicies> {
22-
const passwordPolicies = await this.passwordPolicies.findOne()
23-
if (passwordPolicies === null) {
24-
return new this.passwordPolicies()
25-
}
26-
return passwordPolicies
27-
}
10+
export class PasswdadmService extends AbstractSettingsService {
2811

29-
public async setPolicies(policies: PasswordPoliciesDto):Promise<boolean>{
30-
//lecture de la police
31-
let passwordPolicies = await this.passwordPolicies.findOne()
32-
if (passwordPolicies === null) {
33-
passwordPolicies= new this.passwordPolicies()
34-
}
35-
return true
3612

13+
public async getPolicies(): Promise<object> {
14+
const parameters=this.getParameter('passwordpolicies')
15+
return parameters
3716
}
3817

18+
public async setPolicies(policies: PasswordPoliciesDto):Promise<any>{
19+
return this.setParameter('passwordpolicies',policies)
20+
}
21+
public async checkPolicies(password: string): Promise<boolean> {
22+
return true
23+
}
24+
/*
3925
public async checkPolicies(password: string): Promise<boolean> {
4026
const policies = await this.getPolicies()
4127
if (password.length < policies.len) {
@@ -85,4 +71,13 @@ export class PasswdadmService extends AbstractService {
8571
}
8672
return true
8773
}
74+
75+
*/
76+
protected async defaultValues(): Promise<object> {
77+
return new PasswordPoliciesDto()
78+
}
79+
80+
81+
82+
8883
}

0 commit comments

Comments
 (0)