Use strictly same now timestamp over a transaction, even for UUIDv7s generated.

This commit is contained in:
Leo Vasanko
2026-02-10 21:45:09 +00:00
parent 2105040661
commit 12715ee405
2 changed files with 25 additions and 15 deletions
+14 -9
View File
@@ -169,13 +169,14 @@ def create_org(org: Org, *, ctx: SessionContext | None = None) -> None:
"""
if org.uuid in _db.orgs:
raise ValueError(f"Organization {org.uuid} already exists")
now = datetime.now(UTC)
with _db.transaction("admin:create_org", ctx):
new_org = Org.create(display_name=org.display_name)
new_org = Org.create(display_name=org.display_name, created_at=now)
new_org.uuid = org.uuid
_db.orgs[org.uuid] = new_org
# Create Administration role with org admin permission
admin_role_uuid = uuid7.create()
admin_role_uuid = uuid7.create(now)
# Find the auth:org:admin permission UUID
org_admin_perm_uuid = None
for pid, p in _db.permissions.items():
@@ -690,6 +691,11 @@ def create_credential_session(
if display_name:
_db.users[user_uuid].display_name = display_name
# Align credential timestamps with transaction time
credential.created_at = now
credential.last_used = now
credential.last_verified = now
# Create credential
_db.credentials[credential.uuid] = credential
@@ -747,11 +753,12 @@ def bootstrap(
)
# Generate UUIDs upfront
perm_admin_uuid = uuid7.create()
perm_org_admin_uuid = uuid7.create()
org_uuid = uuid7.create()
role_uuid = uuid7.create()
user_uuid = uuid7.create()
now = datetime.now(UTC)
perm_admin_uuid = uuid7.create(now)
perm_org_admin_uuid = uuid7.create(now)
org_uuid = uuid7.create(now)
role_uuid = uuid7.create(now)
user_uuid = uuid7.create(now)
# Set reset token expiry (passphrase generated by ResetToken.create)
if reset_expiry is None:
@@ -759,8 +766,6 @@ def bootstrap(
reset_expiry = reset_expires()
now = datetime.now(UTC)
with _db.transaction("bootstrap"):
# Create auth:admin permission
perm_admin = Permission(
+11 -6
View File
@@ -54,14 +54,16 @@ class Permission(msgspec.Struct, dict=True, omit_defaults=True):
scope: str,
display_name: str,
domain: str | None = None,
created_at: datetime | None = None,
) -> Permission:
"""Create a new Permission with auto-generated uuid7."""
now = created_at or datetime.now(UTC)
perm = cls(
scope=scope,
display_name=display_name,
domain=domain,
)
perm.uuid = uuid7.create()
perm.uuid = uuid7.create(now)
return perm
@@ -85,10 +87,11 @@ class Org(msgspec.Struct, dict=True):
return [p for p in db.data().permissions.values() if self.uuid in p.orgs]
@classmethod
def create(cls, display_name: str) -> Org:
def create(cls, display_name: str, created_at: datetime | None = None) -> Org:
"""Create a new Org with auto-generated uuid7."""
now = created_at or datetime.now(UTC)
org = cls(display_name=display_name)
org.uuid = uuid7.create()
org.uuid = uuid7.create(now)
return org
@@ -138,15 +141,17 @@ class Role(msgspec.Struct, dict=True, omit_defaults=True):
org: UUID | Org,
display_name: str,
permissions: set[UUID] | None = None,
created_at: datetime | None = None,
) -> Role:
"""Create a new Role with auto-generated uuid7."""
now = created_at or datetime.now(UTC)
org_uuid = org if isinstance(org, UUID) else org.uuid
role = cls(
org_uuid=org_uuid,
display_name=display_name,
permissions={p: True for p in (permissions or set())},
)
role.uuid = uuid7.create()
role.uuid = uuid7.create(now)
return role
@@ -309,7 +314,7 @@ class Session(msgspec.Struct, dict=True):
"expiry": self.expiry.isoformat(),
}
def store(self, now: datetime) -> None:
def store(self, last_seen: datetime) -> None:
"""Store this session in the database and record a visit.
Updates user.last_seen and user.visits. Must be called inside
@@ -317,7 +322,7 @@ class Session(msgspec.Struct, dict=True):
"""
_data = db.data()
_data.sessions[self.key] = self
_data.users[self.user_uuid].last_seen = now
_data.users[self.user_uuid].last_seen = last_seen
_data.users[self.user_uuid].visits += 1
@classmethod