Data room: architecture, sign-in and terms acceptance

Structure of the data room store, sign-in, the persistent token, invitation and password links, and how acceptance of the terms of use is recorded and revoked.

The data room runs on a separate store (subdomain) with its own theme; the portal controller is document/document, the permission keys live on the document/dataroom route. Folders and documents can be assigned to stores; the portal shows only the content of its own store.

Services

Data room permission (three layers in one decision point), data room access (granting rights, e-mails), contract in the data room (status, termination request), watermark, watermarked issue (package), document store.

Sign-in and account

Table names carry the installation's own prefix in the database.

  1. Sign-in with the framework's user master (username + password, active user). There is no attempt limit.
  2. "Keep me signed in": 30-day persistent token, stored as a hash in doc_portal_token; cookie secure, httponly, SameSite=Lax. Signing out deletes the token.
  3. Activation or invitation link: single use, valid 7 days (user_invite, SHA-256 hash); own password at least 8 characters with confirmation, then automatic sign-in.
  4. Forgotten password: username or e-mail → single-use link valid for 2 hours.
  5. Every request re-checks whether the user is active.

Portal endpoints

document/document (sign-in page or room), .login, .logout, .setpassword, .setpasswordsave (valid link), .forgot, .consent (signed in, POST + CSRF). JSON errors have the error + error_code structure. Log channel: document/portal; every portal event is logged with IP (X-Forwarded-For) and browser.

Known limitations

The portal sign-in has no attempt limit. It has not yet run in a live data room with real sign-ins.