2626
2727namespace OC \Authentication \TwoFactorAuth \Db ;
2828
29+ use Doctrine \DBAL \Exception \UniqueConstraintViolationException ;
2930use OCP \DB \QueryBuilder \IQueryBuilder ;
3031use OCP \IDBConnection ;
3132
@@ -72,25 +73,7 @@ public function getState(string $uid): array {
7273 public function persist (string $ providerId , string $ uid , int $ enabled ) {
7374 $ qb = $ this ->conn ->getQueryBuilder ();
7475
75- $ this ->conn ->beginTransaction ();
76- // To prevent duplicate primary key, we have to first check if an INSERT
77- // or UPDATE is required
78- $ query = $ qb ->select ('* ' )
79- ->from (self ::TABLE_NAME )
80- ->where ($ qb ->expr ()->eq ('provider_id ' , $ qb ->createNamedParameter ($ providerId )))
81- ->andWhere ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )));
82- $ result = $ query ->execute ();
83- $ rowCount = count ($ result ->fetchAll ());
84- $ result ->closeCursor ();
85-
86- if ($ rowCount > 0 ) {
87- // There is an entry -> update it
88- $ updateQuery = $ qb ->update (self ::TABLE_NAME )
89- ->set ('enabled ' , $ qb ->createNamedParameter ($ enabled ))
90- ->where ($ qb ->expr ()->eq ('provider_id ' , $ qb ->createNamedParameter ($ providerId )))
91- ->andWhere ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )));
92- $ updateQuery ->execute ();
93- } else {
76+ try {
9477 // Insert a new entry
9578 $ insertQuery = $ qb ->insert (self ::TABLE_NAME )->values ([
9679 'provider_id ' => $ qb ->createNamedParameter ($ providerId ),
@@ -99,8 +82,14 @@ public function persist(string $providerId, string $uid, int $enabled) {
9982 ]);
10083
10184 $ insertQuery ->execute ();
85+ } catch (UniqueConstraintViolationException $ ex ) {
86+ // There is already an entry -> update it
87+ $ updateQuery = $ qb ->update (self ::TABLE_NAME )
88+ ->set ('enabled ' , $ qb ->createNamedParameter ($ enabled ))
89+ ->where ($ qb ->expr ()->eq ('provider_id ' , $ qb ->createNamedParameter ($ providerId )))
90+ ->andWhere ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )));
91+ $ updateQuery ->execute ();
10292 }
103- $ this ->conn ->commit ();
10493
10594 }
10695
0 commit comments