mirror of
https://github.com/grpc/grpc-node.git
synced 2025-12-08 18:23:54 +00:00
Node: fix metadata validation bug, improve error reporting
This commit is contained in:
parent
cb1676a943
commit
0dd0bda233
@ -187,7 +187,8 @@ NAN_METHOD(PluginCallback) {
|
||||
shared_ptr<Resources> resources(new Resources);
|
||||
grpc_status_code code = static_cast<grpc_status_code>(
|
||||
Nan::To<uint32_t>(info[0]).FromJust());
|
||||
char *details = *Utf8String(info[1]);
|
||||
Utf8String details_utf8_str(info[1]);
|
||||
char *details = *details_utf8_str;
|
||||
grpc_metadata_array array;
|
||||
if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(),
|
||||
&array, resources)){
|
||||
|
||||
@ -237,7 +237,8 @@ NAN_METHOD(MetadataKeyIsLegal) {
|
||||
"headerKeyIsLegal's argument must be a string");
|
||||
}
|
||||
Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
|
||||
char *key_str = *Nan::Utf8String(key);
|
||||
Nan::Utf8String key_utf8_str(key);
|
||||
char *key_str = *key_utf8_str;
|
||||
info.GetReturnValue().Set(static_cast<bool>(
|
||||
grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length()))));
|
||||
}
|
||||
@ -248,7 +249,8 @@ NAN_METHOD(MetadataNonbinValueIsLegal) {
|
||||
"metadataNonbinValueIsLegal's argument must be a string");
|
||||
}
|
||||
Local<String> value = Nan::To<String>(info[0]).ToLocalChecked();
|
||||
char *value_str = *Nan::Utf8String(value);
|
||||
Nan::Utf8String value_utf8_str(value);
|
||||
char *value_str = *value_utf8_str;
|
||||
info.GetReturnValue().Set(static_cast<bool>(
|
||||
grpc_header_nonbin_value_is_legal(
|
||||
value_str, static_cast<size_t>(value->Length()))));
|
||||
@ -260,7 +262,8 @@ NAN_METHOD(MetadataKeyIsBinary) {
|
||||
"metadataKeyIsLegal's argument must be a string");
|
||||
}
|
||||
Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
|
||||
char *key_str = *Nan::Utf8String(key);
|
||||
Nan::Utf8String key_utf8_str(key);
|
||||
char *key_str = *key_utf8_str;
|
||||
info.GetReturnValue().Set(static_cast<bool>(
|
||||
grpc_is_binary_header(key_str, static_cast<size_t>(key->Length()))));
|
||||
}
|
||||
|
||||
@ -98,6 +98,8 @@ exports.createFromMetadataGenerator = function(metadata_generator) {
|
||||
message = error.message;
|
||||
if (error.hasOwnProperty('code')) {
|
||||
code = error.code;
|
||||
} else {
|
||||
code = grpc.status.UNAUTHENTICATED;
|
||||
}
|
||||
if (!metadata) {
|
||||
metadata = new Metadata();
|
||||
@ -116,13 +118,16 @@ exports.createFromMetadataGenerator = function(metadata_generator) {
|
||||
exports.createFromGoogleCredential = function(google_credential) {
|
||||
return exports.createFromMetadataGenerator(function(auth_context, callback) {
|
||||
var service_url = auth_context.service_url;
|
||||
console.log('Service URL:', service_url);
|
||||
google_credential.getRequestMetadata(service_url, function(err, header) {
|
||||
if (err) {
|
||||
console.log('Auth error:', err);
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
var metadata = new Metadata();
|
||||
metadata.add('authorization', header.Authorization);
|
||||
console.log(header.Authorization);
|
||||
callback(null, metadata);
|
||||
});
|
||||
});
|
||||
|
||||
@ -64,7 +64,7 @@ function normalizeKey(key) {
|
||||
if (grpc.metadataKeyIsLegal(key)) {
|
||||
return key;
|
||||
} else {
|
||||
throw new Error('Metadata key contains illegal characters');
|
||||
throw new Error('Metadata key"' + key + '" contains illegal characters');
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,7 +79,8 @@ function validate(key, value) {
|
||||
'keys that don\'t end with \'-bin\' must have String values');
|
||||
}
|
||||
if (!grpc.metadataNonbinValueIsLegal(value)) {
|
||||
throw new Error('Metadata string value contains illegal characters');
|
||||
throw new Error('Metadata string value "' + value +
|
||||
'" contains illegal characters');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user