1010namespace OCA \WebhookListeners \Service ;
1111
1212use OC \Authentication \Token \IProvider ;
13- use OC \Authentication \Token \PublicKeyToken ;
1413use OCA \WebhookListeners \Db \EphemeralTokenMapper ;
1514use OCA \WebhookListeners \Db \WebhookListener ;
1615use OCP \AppFramework \Utility \ITimeFactory ;
1716use OCP \Authentication \Token \IToken ;
1817use OCP \IUserManager ;
1918use OCP \L10N \IFactory ;
2019use OCP \Security \ISecureRandom ;
20+ use Psr \Log \LoggerInterface ;
2121
2222class TokenService {
2323 public function __construct (
2424 private IProvider $ tokenProvider ,
2525 private ISecureRandom $ random ,
2626 private EphemeralTokenMapper $ tokenMapper ,
27+ private LoggerInterface $ logger ,
2728 private ITimeFactory $ time ,
2829 private IFactory $ l10nFactory ,
2930 private IUserManager $ userManager ,
@@ -49,20 +50,25 @@ public function getTokens(WebhookListener $webhookListener, ?string $triggerUser
4950 $ tokenNeeded = $ webhookListener ->getTokenNeeded ();
5051 if (isset ($ tokenNeeded ['user_ids ' ])) {
5152 foreach ($ tokenNeeded ['user_ids ' ] as $ userId ) {
52- $ tokens ['user_ids ' ][$ userId ] = $ this ->createEphemeralToken ($ userId );
53+ try {
54+ $ tokens ['user_ids ' ][$ userId ] = $ this ->createEphemeralToken ($ userId );
55+ } catch (\Exception $ e ) {
56+ $ this ->logger ->error ('Webhook token creation for user ' . $ userId . ' failed: ' . $ e ->getMessage (), ['exception ' => $ e ]);
57+ }
58+
5359 }
5460 }
5561 if (isset ($ tokenNeeded ['user_roles ' ])) {
56- foreach ($ tokenNeeded ['user_roles ' ] as $ function ) {
57- switch ($ function ) {
62+ foreach ($ tokenNeeded ['user_roles ' ] as $ user_role ) {
63+ switch ($ user_role ) {
5864 case 'owner ' :
5965 // token for the person who created the flow
60- $ functionId = $ webhookListener ->getUserId ();
61- if (is_null ($ functionId )) { // no owner uid available
66+ $ ownerId = $ webhookListener ->getUserId ();
67+ if (is_null ($ ownerId )) { // no owner uid available
6268 break ;
6369 }
6470 $ tokens ['user_roles ' ]['owner ' ] = [
65- $ functionId => $ this ->createEphemeralToken ($ functionId )
71+ $ ownerId => $ this ->createEphemeralToken ($ ownerId )
6672 ];
6773 break ;
6874 case 'trigger ' :
@@ -74,6 +80,9 @@ public function getTokens(WebhookListener $webhookListener, ?string $triggerUser
7480 $ triggerUserId => $ this ->createEphemeralToken ($ triggerUserId )
7581 ];
7682 break ;
83+ default :
84+ $ this ->logger ->error ('Webhook token creation for user role ' . $ user_role . ' not defined. ' , ['Not defined ' => $ user_role ]);
85+
7786 }
7887 }
7988 }
@@ -96,12 +105,6 @@ private function createEphemeralToken(string $userId): string {
96105 $ name ,
97106 IToken::PERMANENT_TOKEN );
98107
99- // We need the getToken() method to be able to send the token out.
100- // That method is only available in PublicKeyToken which is returned by generateToken
101- // but not declared as such, so we have to check the type here
102- if (!($ deviceToken instanceof PublicKeyToken)) { // type needed for the getToken() function
103- throw new \Exception ('Unexpected token type ' );
104- }
105108 $ this ->tokenMapper ->addEphemeralToken (
106109 $ deviceToken ->getId (),
107110 $ userId ,
0 commit comments