Stop losing organizations to swallowed exceptions, and accept the full create payload

FixSecurityService
সারি
৭ আগস্ট, ২০২৬ এ ৫:২৬ AM UTC
লেখক
Kamo
মন্তব্য@ info: status
3903267

createOrganization could destroy a customer's signup and report nothing useful. Transaction integrity: - Five Docstors ran behind try/catch that only looked safe. ChildOrgTemplateSeedingService, BillingSetupService, SystemUserBackfillService and (via PostAuth***Service) DailyAllotmentService are all @Transactional and JOIN this transaction, so an exception escaping one leaves it rollback-only no matter who catches it. The method returned 200, the commit then raised UnexpectedRollbackException, and the customer got a blank 500 with no organization — because an optional billing step had a bad day. Billing and System-User setup now run after commit in their own transactions; template seeding, which must precede owner creation, fails loudly through a new OrgCreationFailedException handler; and a **************** check before the success return catches every remaining vector, including ones inside third-party call chains. - **************** was dispatched INSIDE the open transaction under a comment claiming otherwise. It is @Async and opens with **************** so the child org usually was not committed yet and provisioning died into a log line — leaving web-alias customers on /setup/dns forever, waiting on GoDaddy records nobody ever pushed. Now afterCommit. - DomainVerificationWatcher CNAME-probed the apex, which never carries one, and wrote the result back unconditionally — actively downgrading is_dns_verified on the brand-new web-alias orgs that were already correct. It now probes the KnownAliases labels and only ever upgrades. Also: a taken domain is checked before the first write and answered with 409 instead of a rollback 500; the owner's OTK is minted from resolved rights rather than every RoleRightType, which was handing back rights the parent's model had NUKEd; wizard-created domains get their KnownAliases child rows; resolveCreatorContext reads the session via the attribute-then-cookie helper and the CREATE_CHILD_ORG gate now fails closed, where a ***-cookie caller previously skipped it entirely; and a rolled-back create no longer leaves an orphan *** in Redis. Create payload now carries the Behavior & Labeling fields the wizard collects — website, contact email, white-label identity, social links, language, currency, isPrivate, the eight custom labels and the branding selectors — with per-column truncation and a null meaning "leave the default". An untouched custom label writes nothing, because resolveTitle treats a null synced flag as "inherit" and writing false would sever a new child from a parent that had renamed its nouns. isPrivate is gated by assertCanSetPrivate once the parent is attached, and branch-types/creatable now returns allowOwnersPrivateOrgs so the wizard can disable the choice instead of collecting a 403.

সব পরিবর্তন

যেমন তুমি জাহাজ দেখেছ?

প্রত্যেকটা আপডেট স্বয়ংক্রিয়ভাবে আপনার কর্মক্ষেত্র স্বয়ংক্রিয়ভাবে. সপ্তাহের পর সপ্তাহের মধ্যে মুক্ত হয়ে তা দেখতে শুরু করুন।.

চিরকালের জন্য মুক্তকরণ আরম্ভ করা হবেপ্রদর্শন সংক্রান্ত পছন্দ