franse
April 6, 2024, 4:49pm
1
Wappler 6.4.1 Beta channel
Php Wappler Server
I started a new tutorial about how to implement push notifications using capacitor and android.
But since Firebase Cloud Messaging force to migrate to the new api v1 here is the thing:
Apps using the deprecated FCM legacy APIs for HTTP and XMPP should migrate to the HTTP v1 API at the earliest opportunity. Sending messages (including upstream messages) with those APIs was deprecated on June 20, 2023, and will be removed in June 2024 .
So a new challenge starts:
The HTTP v1 API uses short-lived access tokens according to the OAuth2 security model
Everything works as expected, using the OAuth playground and Postman:
Now, following this tutorial: Google Service Account Authorization with JWT which I need, or at least, that’s what I’m thinking in order to renew the access_token:
Found this error:
{"code":0,"file":"\/home\/fran#####\/public_html\/dmxConnectLib\/lib\/oauth\/Oauth2.php","line":169,"message":"Undefined array key \"jwt1\"","trace":"
#0 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/oauth\/Oauth2.php(169): exception_error_handler()\n
#1 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/oauth\/Oauth2.php(26): lib\\oauth\\Oauth2->__construct()\n
#2 \/home\/fran#####\/public_html\/dmxConnectLib\/modules\/oauth.php(22): lib\\oauth\\Oauth2::get()\n
#3 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/App.php(206): modules\\oauth->authorize()\n
#4 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/App.php(178): lib\\App->execSteps()\n
#5 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/App.php(146): lib\\App->execSteps()\n
#6 \/home\/fran#####\/public_html\/dmxConnectLib\/lib\/App.php(113): lib\\App->exec()\n
#7 \/home\/fran#####\/public_html\/dmxConnect\/api\/test\/sendpush.php(8): lib\\App->define()\n
#8 {main}"}
Is \"jwt1\"
correct?
Steps:
Can you test if the following fixes it:
oauth.zip (4.5 KB) unzip to dmxConnectLib/lib
franse
April 8, 2024, 8:18pm
5
Thanks @patrick now this:
Both PHP projects: 8.3.4 and 8.1.27
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php",
"line": 18,
"message": "lib\\jwt\\Jwt::get(): Argument #1 ($app) must be of type lib\\jwt\\App, lib\\App given, called in C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php on line 171",
"trace": "
#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(171): lib\\jwt\\Jwt::get(Object(lib\\App), 'jwt')\n
#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\oauth.php(14): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth')\n
#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\oauth->provider(Object(stdClass), 'oauth', Array)\n
#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Object(stdClass))\n
#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(172): lib\\App->exec(Object(stdClass), true)\n
#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n
#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n
#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n
#8 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n
#9 {main}"
}
Seems to be missing the namespace include, here an update
Jwt.zip (1.2 KB) unzip to dmxConnectLib/lib/jwt
franse
April 9, 2024, 1:07pm
7
Thanks @patrick
Now:
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php",
"line": 26,
"message": "Class \"lib\\jwt\\FileSystem\" not found",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(171): lib\\jwt\\Jwt::get(Object(lib\\App), 'jwt')\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#8 {main}"
}
Another namespace was missing and found some other issues, hope this one is now correct.
Jwt.zip (1.2 KB) unzip to dmxConnectLib/lib/jwt
franse
April 9, 2024, 1:39pm
9
Thanks again, now this:
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php",
"line": 30,
"message": "Using $this when not in object context",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(171): lib\\jwt\\Jwt::get(Object(lib\\App), 'jwt2')\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#8 {main}"
}
That was a bit too much copy/paste
Sorry for the many errors, currently working on something else and just doing this in between without really testing the changes I make. You can test the following file.
Jwt.zip (1.2 KB)
franse
April 9, 2024, 3:03pm
11
No problem!
It’s not urgent
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php",
"line": 30,
"message": "Undefined constant \"lib\\jwt\\Jwt\"",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(171): lib\\jwt\\Jwt::get(Object(lib\\App), 'jwt2')\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#8 {main}"
}
New update: Jwt.zip (1.2 KB)
franse
April 9, 2024, 4:03pm
13
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php",
"line": 39,
"message": "Undefined array key \"header\"",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php(39): exception_error_handler(2, 'Undefined array...', 'C:\\\\xampp\\\\htdocs...', 39)\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\jwt\\Jwt.php(30): lib\\jwt\\Jwt::sign(Array, Object(stdClass), 'jwt2')\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(171): lib\\jwt\\Jwt::get(Object(lib\\App), 'jwt2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#8 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#9 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#10 {main}"
}
Seems that the JWT module in PHP works a lot different than I initially thought. Have to rethink on how to correctly implement it. The problem is with that the global JWT Signing isn’t registered correctly and the OAuth2 module can’t find it. Will work on it again tomorrow.
1 Like
franse
April 9, 2024, 5:04pm
15
Thanks @patrick , I really appreciate it
Like I said, It’s not urgent, and I also have a droplet with nodejs, so there’s a workaround for now, and it’s working propertly there.
Please let me know if I can do something else.
Thanks once again!
Got a new version ready for testing: Jwt.zip (1.2 KB)
franse
April 10, 2024, 10:52am
17
Thanks Patrick, now this:
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php",
"line": 361,
"message": "SSL certificate problem: unable to get local issuer certificate",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(258): lib\\oauth\\Oauth2->httpPost('https://www.goo...', Array)\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(204): lib\\oauth\\Oauth2->grant('urn:ietf:params...', Array)\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#8 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#9 {main}"
}
So I go to OAuth - > disable verify ssl
(Please that I not need to do this on the node localhost, so I’m confused)
And:
{
"code": 0,
"file": "C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php",
"line": 265,
"message": "Invalid JWT Signature.",
"trace": "#0 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(204): lib\\oauth\\Oauth2->grant('urn:ietf:params...', Array)\n#1 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\oauth\\Oauth2.php(27): lib\\oauth\\Oauth2->__construct(Object(lib\\App), Object(stdClass), 'oauth2')\n#2 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\modules\\api.php(87): lib\\oauth\\Oauth2::get(Object(lib\\App), 'oauth2')\n#3 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(206): modules\\api->send(Object(stdClass), 'api', NULL)\n#4 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(178): lib\\App->execSteps(Object(stdClass))\n#5 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(146): lib\\App->execSteps(Array)\n#6 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnectLib\\lib\\App.php(113): lib\\App->exec(Array)\n#7 C:\\xampp\\htdocs\\test_php_push\\www\\dmxConnect\\api\\sender.php(7): lib\\App->define(Array)\n#8 {main}"
}
I’m using the exactly same setup that is working under node.
franse
April 10, 2024, 11:57am
18
Ok found the issue.
The fix works.
It seems that Wappler doesn’t reload the new service json.
So I replaced by code edit.
I’ll open another bug report for that later.
Thanks @patrick