|
49 | 49 | use OC_User; |
50 | 50 | use OC_Util; |
51 | 51 | use OCA\DAV\Connector\Sabre\Auth; |
| 52 | +use OCP\AppFramework\Db\TTransactional; |
52 | 53 | use OCP\AppFramework\Utility\ITimeFactory; |
53 | 54 | use OCP\Authentication\Exceptions\ExpiredTokenException; |
54 | 55 | use OCP\Authentication\Exceptions\InvalidTokenException; |
55 | 56 | use OCP\EventDispatcher\GenericEvent; |
56 | 57 | use OCP\EventDispatcher\IEventDispatcher; |
57 | 58 | use OCP\Files\NotPermittedException; |
58 | 59 | use OCP\IConfig; |
| 60 | +use OCP\IDBConnection; |
59 | 61 | use OCP\IRequest; |
60 | 62 | use OCP\ISession; |
61 | 63 | use OCP\IUser; |
|
92 | 94 | * @package OC\User |
93 | 95 | */ |
94 | 96 | class Session implements IUserSession, Emitter { |
95 | | - /** @var Manager $manager */ |
96 | | - private $manager; |
97 | | - |
98 | | - /** @var ISession $session */ |
99 | | - private $session; |
100 | | - |
101 | | - /** @var ITimeFactory */ |
102 | | - private $timeFactory; |
103 | | - |
104 | | - /** @var IProvider */ |
105 | | - private $tokenProvider; |
106 | | - |
107 | | - /** @var IConfig */ |
108 | | - private $config; |
| 97 | + use TTransactional; |
109 | 98 |
|
110 | 99 | /** @var User $activeUser */ |
111 | 100 | protected $activeUser; |
112 | 101 |
|
113 | | - /** @var ISecureRandom */ |
114 | | - private $random; |
115 | | - |
116 | | - /** @var ILockdownManager */ |
117 | | - private $lockdownManager; |
118 | | - |
119 | | - private LoggerInterface $logger; |
120 | | - /** @var IEventDispatcher */ |
121 | | - private $dispatcher; |
122 | | - |
123 | | - public function __construct(Manager $manager, |
124 | | - ISession $session, |
125 | | - ITimeFactory $timeFactory, |
126 | | - ?IProvider $tokenProvider, |
127 | | - IConfig $config, |
128 | | - ISecureRandom $random, |
129 | | - ILockdownManager $lockdownManager, |
130 | | - LoggerInterface $logger, |
131 | | - IEventDispatcher $dispatcher |
| 102 | + public function __construct( |
| 103 | + private Manager $manager, |
| 104 | + private ISession $session, |
| 105 | + private ITimeFactory $timeFactory, |
| 106 | + private ?IProvider $tokenProvider, |
| 107 | + private IConfig $config, |
| 108 | + private ISecureRandom $random, |
| 109 | + private ILockdownManager $lockdownManager, |
| 110 | + private LoggerInterface $logger, |
| 111 | + private IEventDispatcher $dispatcher, |
132 | 112 | ) { |
133 | | - $this->manager = $manager; |
134 | | - $this->session = $session; |
135 | | - $this->timeFactory = $timeFactory; |
136 | | - $this->tokenProvider = $tokenProvider; |
137 | | - $this->config = $config; |
138 | | - $this->random = $random; |
139 | | - $this->lockdownManager = $lockdownManager; |
140 | | - $this->logger = $logger; |
141 | | - $this->dispatcher = $dispatcher; |
142 | 113 | } |
143 | 114 |
|
144 | 115 | /** |
@@ -695,8 +666,10 @@ public function createSessionToken(IRequest $request, $uid, $loginName, $passwor |
695 | 666 | $sessionId = $this->session->getId(); |
696 | 667 | $pwd = $this->getPassword($password); |
697 | 668 | // Make sure the current sessionId has no leftover tokens |
698 | | - $this->tokenProvider->invalidateToken($sessionId); |
699 | | - $this->tokenProvider->generateToken($sessionId, $uid, $loginName, $pwd, $name, IToken::TEMPORARY_TOKEN, $remember); |
| 669 | + $this->atomic(function () use ($sessionId, $uid, $loginName, $pwd, $name, $remember) { |
| 670 | + $this->tokenProvider->invalidateToken($sessionId); |
| 671 | + $this->tokenProvider->generateToken($sessionId, $uid, $loginName, $pwd, $name, IToken::TEMPORARY_TOKEN, $remember); |
| 672 | + }, \OCP\Server::get(IDBConnection::class)); |
700 | 673 | return true; |
701 | 674 | } catch (SessionNotAvailableException $ex) { |
702 | 675 | // This can happen with OCC, where a memory session is used |
|
0 commit comments