Skip to content

Commit cff8d32

Browse files
committed
Oauth unit test: Rely on id_token
1 parent e3f0a0f commit cff8d32

File tree

1 file changed

+52
-36
lines changed

1 file changed

+52
-36
lines changed

test/testoauth.cpp

Lines changed: 52 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,7 @@ class OAuthTestCase : public QObject
9999
QString _expectedClientId = Theme::instance()->oauthClientId();
100100

101101
public:
102-
enum State { StartState,
103-
StatusPhpState,
104-
BrowserOpened,
105-
TokenAsked,
106-
UserInfoFetched,
107-
CustomState } state = StartState;
102+
enum State { StartState, StatusPhpState, BrowserOpened, TokenAsked, CustomState } state = StartState;
108103
Q_ENUM(State);
109104

110105
// for oauth2 we use localhost, for oidc we use 127.0.0.1
@@ -134,8 +129,6 @@ class OAuthTestCase : public QObject
134129
return this->wellKnownReply(op, req);
135130
} else if (req.url().path().endsWith(QLatin1String("status.php"))) {
136131
return this->statusPhpReply(op, req);
137-
} else if (req.url().path().endsWith(QLatin1String("ocs/v2.php/cloud/user")) && req.url().query() == QLatin1String("format=json")) {
138-
return this->userInfoReply(op, req);
139132
} else if (req.url().path().endsWith(QLatin1String("clients-registrations"))) {
140133
return this->clientRegistrationReply(op, req);
141134
}
@@ -189,7 +182,7 @@ class OAuthTestCase : public QObject
189182

190183
virtual void browserReplyFinished() {
191184
QCOMPARE(sender(), browserReply.data());
192-
QCOMPARE(state, UserInfoFetched);
185+
QCOMPARE(state, TokenAsked);
193186
browserReply->deleteLater();
194187
QCOMPARE(QNetworkReply::NoError, browserReply->error());
195188
QCOMPARE(browserReply->rawHeader("Location"), QByteArray("opencloud://success"));
@@ -220,19 +213,6 @@ class OAuthTestCase : public QObject
220213
return new FakePostReply(op, req, std::move(payload), fakeAm);
221214
}
222215

223-
virtual QNetworkReply *userInfoReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req)
224-
{
225-
OC_ASSERT(state == TokenAsked);
226-
state = UserInfoFetched;
227-
OC_ASSERT(op == QNetworkAccessManager::GetOperation);
228-
OC_ASSERT(req.url().toString().startsWith(sOAuthTestServer.toString()));
229-
OC_ASSERT(req.url().path() == sOAuthTestServer.path() + QStringLiteral("/ocs/v2.php/cloud/user"));
230-
OC_ASSERT(req.url().query() == QStringLiteral("format=json"));
231-
auto payload = std::make_unique<QBuffer>();
232-
payload->setData(userInfoPayload());
233-
return new FakePostReply(op, req, std::move(payload), fakeAm);
234-
}
235-
236216
virtual QNetworkReply *wellKnownReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req)
237217
{
238218
return new FakeErrorReply(op, req, fakeAm, 404);
@@ -246,7 +226,7 @@ class OAuthTestCase : public QObject
246226
virtual QByteArray tokenReplyPayload() const {
247227
// the dummy server provides the user admin
248228
QJsonDocument jsondata(QJsonObject{{QStringLiteral("access_token"), QStringLiteral("123")}, {QStringLiteral("refresh_token"), QStringLiteral("456")},
249-
{QStringLiteral("message_url"), QStringLiteral("opencloud://success")}, {QStringLiteral("user_id"), QStringLiteral("admin")},
229+
{QStringLiteral("message_url"), QStringLiteral("opencloud://success")}, {QStringLiteral("id_token"), idToken()},
250230
{QStringLiteral("token_type"), QStringLiteral("Bearer")}});
251231
return jsondata.toJson();
252232
}
@@ -260,25 +240,49 @@ class OAuthTestCase : public QObject
260240
return jsondata.toJson();
261241
}
262242

263-
virtual QByteArray userInfoPayload() const
243+
virtual QString idToken() const
264244
{
265-
// the dummy server provides the user admin
266-
// we don't provide "meta" at the moment, since it is not used
267-
QJsonDocument jsonData(QJsonObject{{QStringLiteral("ocs"),
268-
QJsonObject{{QStringLiteral("data"),
269-
QJsonObject{
270-
{QStringLiteral("display-name"), QStringLiteral("Admin")},
271-
{QStringLiteral("id"), QStringLiteral("admin")},
272-
{QStringLiteral("email"), QStringLiteral("admin@admin.admin")},
273-
274-
}}}}});
275-
return jsonData.toJson();
245+
/* https://10015.io/tools/jwt-encoder-decoder with sample key
246+
{
247+
"amr": [
248+
"pwd",
249+
"pop",
250+
"hwk",
251+
"user",
252+
"pin",
253+
"mfa"
254+
],
255+
"at_hash": "jEL4ptHeYx4eQa847tOVoQ",
256+
"aud": [
257+
"OpenCloudDesktop"
258+
],
259+
"auth_time": 1737560752,
260+
"azp": "OpenCloudDesktop",
261+
"client_id": "OpenCloudDesktop",
262+
"email": "admin@admin.admin",
263+
"email_verified": true,
264+
"exp": 1739884152,
265+
"iat": 1739880552,
266+
"iss": "oauthtest://someserver/opencloud",
267+
"jti": "e2db5f2d-6bcc-42d7-a20f-46955d7ab6b4",
268+
"name": "Admin",
269+
"preferred_username": "admin",
270+
"sub": "f4a04b62-e17a-4a98-bcc6-63345ded5a25"
271+
}
272+
*/
273+
return QStringLiteral(
274+
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
275+
"eyJhbXIiOlsicHdkIiwicG9wIiwiaHdrIiwidXNlciIsInBpbiIsIm1mYSJdLCJhdF9oYXNoIjoiakVMNHB0SGVZeDRlUWE4NDd0T1ZvUSIsImF1ZCI6WyJPcGVuQ2xvdWREZXNrdG9wIl0sIm"
276+
"F1dGhfdGltZSI6MTczNzU2MDc1MiwiYXpwIjoiT3BlbkNsb3VkRGVza3RvcCIsImNsaWVudF9pZCI6Ik9wZW5DbG91ZERlc2t0b3AiLCJlbWFpbCI6ImFkbWluQGFkbWluLmFkbWluIiwiZW1h"
277+
"aWxfdmVyaWZpZWQiOnRydWUsImV4cCI6MTczOTg4NDE1MiwiaWF0IjoxNzM5ODgwNTUyLCJpc3MiOiJvYXV0aHRlc3Q6Ly9zb21lc2VydmVyL29wZW5jbG91ZCIsImp0aSI6ImUyZGI1ZjJkLT"
278+
"ZiY2MtNDJkNy1hMjBmLTQ2OTU1ZDdhYjZiNCIsIm5hbWUiOiJBZG1pbiIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwic3ViIjoiZjRhMDRiNjItZTE3YS00YTk4LWJjYzYtNjMzNDVk"
279+
"ZWQ1YTI1In0.wj3NyKWaDhWWwui6lxGdmJEGUyqCsNYCRJFTbgIUeC4");
276280
}
277281

278282
virtual void oauthResult(OAuth::Result result, const QString &token, const QString &refreshToken)
279283
{
280284
QCOMPARE(result, OAuth::LoggedIn);
281-
QCOMPARE(state, UserInfoFetched);
285+
QCOMPARE(state, TokenAsked);
282286
QCOMPARE(token, QStringLiteral("123"));
283287
QCOMPARE(refreshToken, QStringLiteral("456"));
284288
gotAuthOk = true;
@@ -638,6 +642,18 @@ private Q_SLOTS:
638642
return out;
639643
}
640644

645+
QString idToken() const override
646+
{
647+
// same as the parent implementation but with the current client id
648+
return QStringLiteral(
649+
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
650+
"eyJhbXIiOlsicHdkIiwicG9wIiwiaHdrIiwidXNlciIsInBpbiIsIm1mYSJdLCJhdF9oYXNoIjoiakVMNHB0SGVZeDRlUWE4NDd0T1ZvUSIsImF1ZCI6WyIzZTRlYTBmMy01OWVhLT"
651+
"QzNGEtOTJmMi1iMGQzYjU0NDQzZTkiXSwiYXV0aF90aW1lIjoxNzM3NTYwNzUyLCJhenAiOiJPcGVuQ2xvdWREZXNrdG9wIiwiY2xpZW50X2lkIjoiT3BlbkNsb3VkRGVza3RvcCIs"
652+
"ImVtYWlsIjoiYWRtaW5AYWRtaW4uYWRtaW4iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzM5ODg0MTUyLCJpYXQiOjE3Mzk4ODA1NTIsImlzcyI6Im9hdXRodGVzdDovL3"
653+
"NvbWVzZXJ2ZXIvb3BlbmNsb3VkIiwianRpIjoiZTJkYjVmMmQtNmJjYy00MmQ3LWEyMGYtNDY5NTVkN2FiNmI0IiwibmFtZSI6IkFkbWluIiwicHJlZmVycmVkX3VzZXJuYW1lIjoi"
654+
"YWRtaW4iLCJzdWIiOiJmNGEwNGI2Mi1lMTdhLTRhOTgtYmNjNi02MzM0NWRlZDVhMjUifQ.UVjqXnuHFiu2iIPOW8qXze_a8tVMk03kuxoN4FKxhoY");
655+
}
656+
641657
} test;
642658
test.test();
643659
}

0 commit comments

Comments
 (0)