double user creation fail

This commit is contained in:
Jörn-Michael Miehe 2022-03-19 18:06:17 +00:00
parent b70806195e
commit b53aab012d

View file

@ -4,6 +4,7 @@ from datetime import datetime
from passlib.context import CryptContext from passlib.context import CryptContext
from pydantic import BaseModel, validator from pydantic import BaseModel, validator
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from . import models from . import models
@ -83,10 +84,12 @@ class User(UserBase):
.first()) .first())
if user is None: if user is None:
# inexistent user, fake doing password verification
crypt_context.dummy_verify() crypt_context.dummy_verify()
return None return None
if not crypt_context.verify(password, user.password): if not crypt_context.verify(password, user.password):
# password hash mismatch
return None return None
return cls.from_orm(user) return cls.from_orm(user)
@ -97,21 +100,25 @@ class User(UserBase):
db: Session, db: Session,
user: UserCreate, user: UserCreate,
crypt_context: CryptContext, crypt_context: CryptContext,
) -> User: ) -> User | None:
user = models.User( try:
name=user.name, user = models.User(
password=crypt_context.hash(user.password), name=user.name,
capabilities=[ password=crypt_context.hash(user.password),
models.UserCapability(capability=capability) capabilities=[
for capability in user.capabilities models.UserCapability(capability=capability)
] for capability in user.capabilities
) ]
)
db.add(user) db.add(user)
db.commit() db.commit()
db.refresh(user) db.refresh(user)
return cls.from_orm(user) return cls.from_orm(user)
except IntegrityError:
pass
class DistinguishedNameBase(BaseModel): class DistinguishedNameBase(BaseModel):