@@ -47,6 +47,29 @@ public function __construct(ClientMapper $clientMapper,
4747 $ this ->crypto = $ crypto ;
4848 }
4949
50+ /**
51+ * @param string $secret
52+ * @param string $nextcloudVersion
53+ * @return string
54+ */
55+ public function hashOrEncryptSecretBasedOnNextcloudVersion (string $ secret , string $ nextcloudVersion ): string {
56+ switch (true ) {
57+ case version_compare ($ nextcloudVersion , '30.0.0 ' ) >= 0 :
58+ case version_compare ($ nextcloudVersion , '29.0.7 ' ) >= 0 && version_compare ($ nextcloudVersion , '30.0.0 ' ) < 0 :
59+ case version_compare ($ nextcloudVersion , '28.0.10 ' ) >= 0 && version_compare ($ nextcloudVersion , '29.0.0 ' ) < 0 :
60+ case version_compare ($ nextcloudVersion , '27.1.11.8 ' ) >= 0 && version_compare ($ nextcloudVersion , '28.0.0 ' ) < 0 :
61+ $ encryptedSecret = bin2hex ($ this ->crypto ->calculateHMAC ($ secret ));
62+ break ;
63+ case version_compare ($ nextcloudVersion , '27.0.0 ' ) === 0 :
64+ $ encryptedSecret = $ secret ;
65+ break ;
66+ default :
67+ $ encryptedSecret = $ this ->crypto ->encrypt ($ secret );
68+ break ;
69+ }
70+ return $ encryptedSecret ;
71+ }
72+
5073 /**
5174 * @param string $name
5275 * @param string $redirectUri
@@ -58,12 +81,8 @@ public function createNcOauthClient(string $name, string $redirectUri): array {
5881 $ client ->setName ($ name );
5982 $ client ->setRedirectUri (sprintf ($ redirectUri , $ clientId ));
6083 $ secret = $ this ->secureRandom ->generate (64 , self ::validChars);
61- if (version_compare (OC_Util::getVersionString (), '27.0.1 ' ) >= 0 ) {
62- $ encryptedSecret = $ this ->crypto ->encrypt ($ secret );
63- } else {
64- $ encryptedSecret = $ secret ;
65- }
66- $ client ->setSecret ($ encryptedSecret );
84+ $ nextcloudVersion = OC_Util::getVersionString ();
85+ $ client ->setSecret ($ this ->hashOrEncryptSecretBasedOnNextcloudVersion ($ secret , $ nextcloudVersion ));
6786 $ client ->setClientIdentifier ($ clientId );
6887 $ client = $ this ->clientMapper ->insert ($ client );
6988
@@ -87,8 +106,7 @@ public function getClientInfo(int $id): ?array {
87106 'id ' => $ client ->getId (),
88107 'nextcloud_oauth_client_name ' => $ client ->getName (),
89108 'openproject_redirect_uri ' => $ client ->getRedirectUri (),
90- 'nextcloud_client_id ' => $ client ->getClientIdentifier (),
91- 'nextcloud_client_secret ' => $ this ->crypto ->decrypt ($ client ->getSecret ()),
109+ 'nextcloud_client_id ' => $ client ->getClientIdentifier ()
92110 ];
93111 } catch (ClientNotFoundException $ e ) {
94112 return null ;
0 commit comments