@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorAuthChallengeStatusController
4 extends PhabricatorAuthController {
5
6 public function shouldAllowPartialSessions() {
7 // We expect that users may request the status of an MFA challenge when
8 // they hit the session upgrade gate on login.
9 return true;
10 }
11
12 public function handleRequest(AphrontRequest $request) {
13 $viewer = $this->getViewer();
14 $id = $request->getURIData('id');
15 $now = PhabricatorTime::getNow();
16
17 $result = new PhabricatorAuthChallengeUpdate();
18
19 $challenge = id(new PhabricatorAuthChallengeQuery())
20 ->setViewer($viewer)
21 ->withIDs(array($id))
22 ->withUserPHIDs(array($viewer->getPHID()))
23 ->withChallengeTTLBetween($now, null)
24 ->executeOne();
25 if ($challenge) {
26 $config = id(new PhabricatorAuthFactorConfigQuery())
27 ->setViewer($viewer)
28 ->withPHIDs(array($challenge->getFactorPHID()))
29 ->executeOne();
30 if ($config) {
31 $provider = $config->getFactorProvider();
32 $factor = $provider->getFactor();
33
34 $result = $factor->newChallengeStatusView(
35 $config,
36 $provider,
37 $viewer,
38 $challenge);
39 }
40 }
41
42 return id(new AphrontAjaxResponse())
43 ->setContent($result->newContent());
44 }
45
46}