3434use OCA \Mail \Exception \ValidationException ;
3535use OCP \AppFramework \Db \DoesNotExistException ;
3636use OCP \AppFramework \Db \MultipleObjectsReturnedException ;
37+ use OCP \ICacheFactory ;
3738use OCP \IUser ;
3839use OCP \IUserManager ;
3940use OCP \LDAP \ILDAPProvider ;
@@ -67,14 +68,17 @@ class Manager {
6768 /** @var TagMapper */
6869 private $ tagMapper ;
6970
71+ private ICacheFactory $ cacheFactory ;
72+
7073 public function __construct (IUserManager $ userManager ,
7174 ProvisioningMapper $ provisioningMapper ,
7275 MailAccountMapper $ mailAccountMapper ,
7376 ICrypto $ crypto ,
7477 ILDAPProviderFactory $ ldapProviderFactory ,
7578 AliasMapper $ aliasMapper ,
7679 LoggerInterface $ logger ,
77- TagMapper $ tagMapper ) {
80+ TagMapper $ tagMapper ,
81+ ICacheFactory $ cacheFactory ) {
7882 $ this ->userManager = $ userManager ;
7983 $ this ->provisioningMapper = $ provisioningMapper ;
8084 $ this ->mailAccountMapper = $ mailAccountMapper ;
@@ -83,14 +87,29 @@ public function __construct(IUserManager $userManager,
8387 $ this ->aliasMapper = $ aliasMapper ;
8488 $ this ->logger = $ logger ;
8589 $ this ->tagMapper = $ tagMapper ;
90+ $ this ->cacheFactory = $ cacheFactory ;
8691 }
8792
8893 public function getConfigById (int $ provisioningId ): ?Provisioning {
8994 return $ this ->provisioningMapper ->get ($ provisioningId );
9095 }
9196
9297 public function getConfigs (): array {
93- return $ this ->provisioningMapper ->getAll ();
98+ $ cache = null ;
99+ if ($ this ->cacheFactory ->isLocalCacheAvailable ()) {
100+ $ cache = $ this ->cacheFactory ->createLocal ('provisionings ' );
101+ $ cached = $ cache ->get ('provisionings_all ' );
102+ if ($ cached !== null ) {
103+ return unserialize ($ cached , ['allowed_classes ' => [Provisioning::class]]);
104+ }
105+ }
106+
107+ $ provisionings = $ this ->provisioningMapper ->getAll ();
108+ // let's cache the provisionings for 5 minutes
109+ if ($ this ->cacheFactory ->isLocalCacheAvailable ()) {
110+ $ cache ->set ('provisionings_all ' , serialize ($ provisionings ), 60 * 5 );
111+ }
112+ return $ provisionings ;
94113 }
95114
96115 public function provision (): int {
0 commit comments