Refactor configuration and security features for improved development experience
- Updated the .env.example file to reflect a development environment setup with enhanced secret key requirements and local host settings. - Modified the Docker Compose configuration to enhance security with read-only settings and no-new-privileges options. - Updated requirements.txt to pin package versions for better dependency management. - Enhanced the FastAPI application to include dynamic OpenAPI and documentation URLs based on the environment. - Implemented session versioning in JWT tokens to improve security and user session management. - Added new validation for user roles and password strength in schemas. - Improved email sending logic to handle recipient lists more robustly and added logging for SMTP operations. - Updated dashboard and profile templates to reflect new features and improve user experience.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
from pydantic import BaseModel, EmailStr, Field, field_validator
|
||||
|
||||
from app.core.password_policy import validate_password_strength
|
||||
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
@@ -7,6 +9,12 @@ class UserCreate(BaseModel):
|
||||
password: str = Field(min_length=10, max_length=255)
|
||||
role: str = Field(default="reader", pattern="^(admin|editor|reader)$")
|
||||
|
||||
@field_validator("password")
|
||||
@classmethod
|
||||
def strong_password(cls, value: str) -> str:
|
||||
validate_password_strength(value)
|
||||
return value
|
||||
|
||||
|
||||
class ProfileUpdate(BaseModel):
|
||||
email: EmailStr
|
||||
@@ -16,6 +24,16 @@ class ProfileUpdate(BaseModel):
|
||||
class PasswordChange(BaseModel):
|
||||
new_password: str = Field(min_length=10, max_length=255)
|
||||
|
||||
@field_validator("new_password")
|
||||
@classmethod
|
||||
def strong_password(cls, value: str) -> str:
|
||||
validate_password_strength(value)
|
||||
return value
|
||||
|
||||
|
||||
class UserRoleUpdate(BaseModel):
|
||||
role: str = Field(pattern="^(admin|editor|reader)$")
|
||||
|
||||
|
||||
class UserOut(BaseModel):
|
||||
id: int
|
||||
|
||||
Reference in New Issue
Block a user