JSON-encoded binary fields should use Base64::encode64
It is not interoperable to use Base64::urlsafe_encode64 for fields in JSON that contain binary (as opposed to UTF8-safe) data. For instance, the Golang JSON decoder (which is what gitlab-workhorse uses) insists upon the standard base64 encoding.
This commit is contained in:
parent
2845e8d973
commit
670b2c1af5
2 changed files with 7 additions and 2 deletions
|
@ -229,12 +229,17 @@ module Gitlab
|
|||
|
||||
protected
|
||||
|
||||
# This is the outermost encoding of a senddata: header. It is safe for
|
||||
# inclusion in HTTP response headers
|
||||
def encode(hash)
|
||||
Base64.urlsafe_encode64(JSON.dump(hash))
|
||||
end
|
||||
|
||||
# This is for encoding individual fields inside the senddata JSON that
|
||||
# contain binary data. In workhorse, the corresponding struct field should
|
||||
# be type []byte
|
||||
def encode_binary(binary)
|
||||
Base64.urlsafe_encode64(binary)
|
||||
Base64.encode64(binary)
|
||||
end
|
||||
|
||||
def gitaly_server_hash(repository)
|
||||
|
|
|
@ -39,7 +39,7 @@ describe Gitlab::Workhorse do
|
|||
token: Gitlab::GitalyClient.token(project.repository_storage)
|
||||
},
|
||||
'ArchivePath' => metadata['ArchivePath'],
|
||||
'GetArchiveRequest' => Base64.urlsafe_encode64(
|
||||
'GetArchiveRequest' => Base64.encode64(
|
||||
Gitaly::GetArchiveRequest.new(
|
||||
repository: repository.gitaly_repository,
|
||||
commit_id: metadata['CommitId'],
|
||||
|
|
Loading…
Reference in a new issue