From 084dfc04c5a72a26dc87f923437018d9249f1f8f Mon Sep 17 00:00:00 2001 From: claincly Date: Thu, 21 Apr 2022 16:37:15 +0100 Subject: [PATCH] Fix Basic authentication header Issue: google/ExoPlayer#9544 The header must include the word "Basic", but the word is missing. #minor-release PiperOrigin-RevId: 443386880 --- .../source/rtsp/RtspAuthenticationInfo.java | 27 ++++++++++++++----- .../rtsp/RtspAuthenticationInfoTest.java | 2 +- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfo.java b/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfo.java index 526e47cd56c..97b5d18ee78 100644 --- a/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfo.java +++ b/library/rtsp/src/main/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfo.java @@ -45,9 +45,14 @@ /** HTTP digest authentication (RFC2069). */ public static final int DIGEST = 2; - private static final String DIGEST_FORMAT = + /** Basic authorization header format, see RFC7617. */ + private static final String BASIC_AUTHORIZATION_HEADER_FORMAT = "Basic %s"; + + /** Digest authorization header format, see RFC7616. */ + private static final String DIGEST_AUTHORIZATION_HEADER_FORMAT = "Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\""; - private static final String DIGEST_FORMAT_WITH_OPAQUE = + + private static final String DIGEST_AUTHORIZATION_HEADER_FORMAT_WITH_OPAQUE = "Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"," + " opaque=\"%s\""; @@ -107,9 +112,11 @@ public String getAuthorizationHeaderValue( } private String getBasicAuthorizationHeaderValue(RtspAuthUserInfo authUserInfo) { - return Base64.encodeToString( - RtspMessageUtil.getStringBytes(authUserInfo.username + ":" + authUserInfo.password), - Base64.DEFAULT); + return Util.formatInvariant( + BASIC_AUTHORIZATION_HEADER_FORMAT, + Base64.encodeToString( + RtspMessageUtil.getStringBytes(authUserInfo.username + ":" + authUserInfo.password), + Base64.DEFAULT)); } private String getDigestAuthorizationHeaderValue( @@ -137,10 +144,16 @@ private String getDigestAuthorizationHeaderValue( if (opaque.isEmpty()) { return Util.formatInvariant( - DIGEST_FORMAT, authUserInfo.username, realm, nonce, uri, response); + DIGEST_AUTHORIZATION_HEADER_FORMAT, authUserInfo.username, realm, nonce, uri, response); } else { return Util.formatInvariant( - DIGEST_FORMAT_WITH_OPAQUE, authUserInfo.username, realm, nonce, uri, response, opaque); + DIGEST_AUTHORIZATION_HEADER_FORMAT_WITH_OPAQUE, + authUserInfo.username, + realm, + nonce, + uri, + response, + opaque); } } catch (NoSuchAlgorithmException e) { throw ParserException.createForManifestWithUnsupportedFeature(/* message= */ null, e); diff --git a/library/rtsp/src/test/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfoTest.java b/library/rtsp/src/test/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfoTest.java index 059faf65104..b322cc1d493 100644 --- a/library/rtsp/src/test/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfoTest.java +++ b/library/rtsp/src/test/java/com/google/android/exoplayer2/source/rtsp/RtspAuthenticationInfoTest.java @@ -33,7 +33,7 @@ public void getAuthorizationHeaderValue_withBasicAuthenticationMechanism_getsCor String authenticationRealm = "WallyWorld"; String username = "Aladdin"; String password = "open sesame"; - String expectedAuthorizationHeaderValue = "QWxhZGRpbjpvcGVuIHNlc2FtZQ==\n"; + String expectedAuthorizationHeaderValue = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\n"; RtspAuthenticationInfo authenticator = new RtspAuthenticationInfo( RtspAuthenticationInfo.BASIC, authenticationRealm, /* nonce= */ "", /* opaque= */ "");